webengine/osswebengine/WebCore/platform/network/symbian/SynchLoader.cpp
branchRCL_3
changeset 58 220a17280356
parent 0 dd21522fd290
child 93 79859ed3eea9
--- 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