webengine/osswebengine/WebKit/s60/webview/WebView.cpp
branchRCL_3
changeset 99 ca6d8a014f4b
parent 95 d96eed154187
--- a/webengine/osswebengine/WebKit/s60/webview/WebView.cpp	Tue Sep 14 23:23:58 2010 +0300
+++ b/webengine/osswebengine/WebKit/s60/webview/WebView.cpp	Wed Sep 15 13:25:15 2010 +0300
@@ -102,7 +102,6 @@
 #include "EventNames.h"
 #include "Editor.h"
 #include "ThumbnailGenerator.h"
-#include <kjs_window.h>
 #include "PluginHandler.h"
 
 using namespace WebCore;
@@ -220,7 +219,7 @@
 , m_checkerBoardGc(NULL)
 , m_checkerBoardDestroyTimer(NULL)
 , m_isPinchZoomOut(false)
-, m_jsTimeouts(0)
+, m_jsPaused(0)
 {
 }
 
@@ -282,6 +281,8 @@
     if (StaticObjectsContainer::instance()->webSurface()->topView() == this) 
         StaticObjectsContainer::instance()->webSurface()->setView( NULL ); 
     
+    delete m_pausedTimeouts;
+    
 }
 
 // -----------------------------------------------------------------------------
@@ -410,6 +411,8 @@
     
     m_checkerBoardDestroyTimer = CPeriodic::NewL(CActive::EPriorityIdle);
     
+    m_pausedTimeouts = new(ELeave) Vector<std::pair<RefPtr<WebCore::Frame>, KJS::PausedTimeouts*>, 16>();
+    
 }
 
 void WebView::initializePageScalerL()
@@ -3336,28 +3339,40 @@
 
 void WebView::pauseJsTimers()
 {
-    if(m_jsTimeouts==0) {        
-        WebCore::Frame *frame = core(mainFrame());
-        KJS::Window* window = KJS::Window::retrieveWindow(frame);
-        if(window) {
-            m_jsTimeouts = window->pauseTimeouts();
+    if(!m_jsPaused) {
+        for (Frame* frame = core(mainFrame()); frame; frame = frame->tree()->traverseNext()) {
+            if (KJS::Window* window = KJS::Window::retrieveWindow(frame)) {
+                KJS::PausedTimeouts* timeouts = window->pauseTimeouts();
+                if(timeouts)
+                    m_pausedTimeouts->append(std::make_pair(frame, timeouts));
+                }
         }
+        m_jsPaused = (m_pausedTimeouts->size()) ? ETrue : EFalse;
     }
 }
 
 void WebView::resumeJsTimers()
 {
-    if(m_jsTimeouts) {
-        WebCore::Frame *frame = core(mainFrame());
-        KJS::Window* window = KJS::Window::retrieveWindow(frame);
-        if(window) {
-            window->resumeTimeouts(m_jsTimeouts);
-            delete m_jsTimeouts;
-            m_jsTimeouts = 0;
+    if(m_jsPaused) {
+        TInt count = m_pausedTimeouts->size();
+        for (size_t i = 0; i < count; i++) {
+            KJS::Window* window = KJS::Window::retrieveWindow(m_pausedTimeouts->at(i).first.get());
+            if (window) {
+                window->resumeTimeouts(m_pausedTimeouts->at(i).second);
+            }
+            delete m_pausedTimeouts->at(i).second;
         }
+        m_pausedTimeouts->clear();
+        m_jsPaused = EFalse;  
     }
 }
-// END OF FILE
+
+void WebView::resetJsTimers()
+{
+    m_jsPaused=0;
+    m_pausedTimeouts->clear();
+}
+
 void WebView::scrollStatus(bool status)
     {
     if(m_scrollingstatus != status)
@@ -3378,3 +3393,4 @@
         scrollStatus(scrolling);
         }
     };
+// END OF FILE