--- a/webengine/osswebengine/WebCore/platform/network/symbian/SynchLoader.cpp Fri Feb 19 23:55:03 2010 +0200
+++ b/webengine/osswebengine/WebCore/platform/network/symbian/SynchLoader.cpp Fri Mar 12 15:48:51 2010 +0200
@@ -27,6 +27,10 @@
namespace WebCore {
+const int KSyncRequestTimeOut = 3*1000*1000;
+
+int syncRequestTimerCb( void* ptr );
+
// ============================SynchLoader MEMBER FUNCTIONS ===============================
class SynchResourceHandleClient;
@@ -142,6 +146,7 @@
, m_response()
, m_error(String(), KErrNone, String(), String())
, m_data(0)
+ , m_syncRequestTimer(0)
{
m_status = &aStatus;
@@ -150,11 +155,19 @@
if (m_loader) {
m_resourceHandle = m_loader->handle();
+
+ //Start the synchronous request expiry timer
+ m_syncRequestTimer = CPeriodic::NewL(CActive::EPriorityHigh);
+ m_syncRequestTimer->Start( KSyncRequestTimeOut,0,TCallBack(&syncRequestTimerCb,this));
}
}
SynchResourceHandleClient::~SynchResourceHandleClient()
{
+ if (m_syncRequestTimer && m_syncRequestTimer->IsActive()) {
+ m_syncRequestTimer->Cancel();
+ }
+ delete m_syncRequestTimer;
}
PassRefPtr<SynchResourceHandleClient> SynchResourceHandleClient::create(TRequestStatus& aStatus,
@@ -217,6 +230,11 @@
{
m_error = error;
+ //Cancel the synchronous Request timer
+ if (m_syncRequestTimer->IsActive()) {
+ m_syncRequestTimer->Cancel();
+ }
+
if (!m_finished) { // Avoid multiple execution
if (m_loader) {
m_loader->removeSubresourceLoader();
@@ -234,5 +252,19 @@
//m_loader = 0;
}
+void SynchResourceHandleClient::handleSyncRequestTimeOut()
+{
+ cancel(ResourceError(String(), KErrCancel, String(), String()));
+}
+
+// -----------------------------------------------------------------------------
+// syncRequestTimerCb
+// -----------------------------------------------------------------------------
+int syncRequestTimerCb(void* ptr)
+{
+ ((SynchResourceHandleClient*)ptr)->handleSyncRequestTimeOut();
+ return 0;
+}
+
} // End namespace WebCore