[SCM] WebKit Debian packaging branch, webkit-1.1, updated. upstream/1.1.19-706-ge5415e9

darin at chromium.org darin at chromium.org
Thu Feb 4 21:29:43 UTC 2010


The following commit has been merged in the webkit-1.1 branch:
commit 51221629d199511f59a925da3b0b517596f83884
Author: darin at chromium.org <darin at chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Wed Jan 27 19:15:13 2010 +0000

    2010-01-26  Darin Fisher  <darin at chromium.org>
    
            Reviewed by David Levin.
    
            Add methods to support running a nested modal loop outside of WebKit.
            https://bugs.webkit.org/show_bug.cgi?id=34199
    
            * public/WebView.h:
            * src/WebViewImpl.cpp:
            (WebKit::WebView::willEnterModalLoop): Create PageGroupLoadDeferrer
            (WebKit::WebView::didExitModalLoop): Destroy PageGroupLoadDeferrer
    
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@53943 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit/chromium/ChangeLog b/WebKit/chromium/ChangeLog
index b1ae94c..a043c6b 100644
--- a/WebKit/chromium/ChangeLog
+++ b/WebKit/chromium/ChangeLog
@@ -1,3 +1,15 @@
+2010-01-26  Darin Fisher  <darin at chromium.org>
+
+        Reviewed by David Levin.
+
+        Add methods to support running a nested modal loop outside of WebKit.
+        https://bugs.webkit.org/show_bug.cgi?id=34199
+
+        * public/WebView.h:
+        * src/WebViewImpl.cpp:
+        (WebKit::WebView::willEnterModalLoop): Create PageGroupLoadDeferrer
+        (WebKit::WebView::didExitModalLoop): Destroy PageGroupLoadDeferrer
+
 2010-01-27  Darin Fisher  <darin at chromium.org>
 
         Reviewed by Dimitri Glazkov.
diff --git a/WebKit/chromium/public/WebView.h b/WebKit/chromium/public/WebView.h
index c31667f..aba556c 100644
--- a/WebKit/chromium/public/WebView.h
+++ b/WebKit/chromium/public/WebView.h
@@ -252,6 +252,7 @@ public:
 
 
     // Custom colors -------------------------------------------------------
+
     virtual void setScrollbarColors(unsigned inactiveColor,
                                     unsigned activeColor,
                                     unsigned trackColor) = 0;
@@ -261,6 +262,14 @@ public:
                                     unsigned inactiveBackgroundColor,
                                     unsigned inactiveForegroundColor) = 0;
 
+
+    // Modal dialog support ------------------------------------------------
+
+    // Call these methods before and after running a nested, modal event loop
+    // to suspend script callbacks and resource loads.
+    WEBKIT_API static void willEnterModalLoop();
+    WEBKIT_API static void didExitModalLoop();
+
 protected:
     ~WebView() {}
 };
diff --git a/WebKit/chromium/src/WebViewImpl.cpp b/WebKit/chromium/src/WebViewImpl.cpp
index 2418a4d..97825e9 100644
--- a/WebKit/chromium/src/WebViewImpl.cpp
+++ b/WebKit/chromium/src/WebViewImpl.cpp
@@ -66,6 +66,7 @@
 #include "NodeRenderStyle.h"
 #include "Page.h"
 #include "PageGroup.h"
+#include "PageGroupLoadDeferrer.h"
 #include "Pasteboard.h"
 #include "PlatformContextSkia.h"
 #include "PlatformKeyboardEvent.h"
@@ -130,6 +131,10 @@ static const double maxTextSizeMultiplier = 3.0;
 // one page group.
 const char* pageGroupName = "default";
 
+// Used to defer all page activity in cases where the embedder wishes to run
+// a nested event loop.
+static PageGroupLoadDeferrer* pageGroupLoadDeferrer;
+
 // Ensure that the WebDragOperation enum values stay in sync with the original
 // DragOperation constants.
 #define COMPILE_ASSERT_MATCHING_ENUM(coreName) \
@@ -175,6 +180,28 @@ void WebView::resetVisitedLinkState()
     Page::allVisitedStateChanged(PageGroup::pageGroup(pageGroupName));
 }
 
+void WebView::willEnterModalLoop()
+{
+    // It is not valid to nest more than once.
+    ASSERT(!pageGroupLoadDeferrer);
+
+    PageGroup* pageGroup = PageGroup::pageGroup(pageGroupName);
+    ASSERT(pageGroup);
+    ASSERT(!pageGroup->pages().isEmpty());
+
+    // Pick any page in the page group since we are deferring all pages.
+    pageGroupLoadDeferrer = new PageGroupLoadDeferrer(*pageGroup->pages().begin(), true);
+}
+
+void WebView::didExitModalLoop()
+{
+    // The embedder must have called willEnterNestedEventLoop.
+    ASSERT(pageGroupLoadDeferrer);
+
+    delete pageGroupLoadDeferrer;
+    pageGroupLoadDeferrer = 0;
+}
+
 void WebViewImpl::initializeMainFrame(WebFrameClient* frameClient)
 {
     // NOTE: The WebFrameImpl takes a reference to itself within InitMainFrame

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list