Title: [170943] trunk/Source/WebKit2
Revision
170943
Author
ander...@apple.com
Date
2014-07-09 17:50:25 -0700 (Wed, 09 Jul 2014)

Log Message

Closed web views should never create new web processes
https://bugs.webkit.org/show_bug.cgi?id=134787
<rdar://problem/16892526>

Reviewed by Simon Fraser.

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView loadHTMLString:baseURL:]):
(-[WKWebView reload]):
(-[WKWebView reloadFromOrigin]):
Return nil if the returned navigation ID is 0.

* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::reattachToWebProcess):
Assert that the page is not closed.

(WebKit::WebPageProxy::reattachToWebProcessWithItem):
(WebKit::WebPageProxy::loadRequest):
(WebKit::WebPageProxy::loadFile):
(WebKit::WebPageProxy::loadData):
(WebKit::WebPageProxy::loadHTMLString):
(WebKit::WebPageProxy::loadAlternateHTMLString):
(WebKit::WebPageProxy::loadPlainTextString):
(WebKit::WebPageProxy::loadWebArchiveData):
Add early returns if the page is closed.

* UIProcess/WebPageProxy.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (170942 => 170943)


--- trunk/Source/WebKit2/ChangeLog	2014-07-10 00:29:10 UTC (rev 170942)
+++ trunk/Source/WebKit2/ChangeLog	2014-07-10 00:50:25 UTC (rev 170943)
@@ -1,5 +1,35 @@
 2014-07-09  Anders Carlsson  <ander...@apple.com>
 
+        Closed web views should never create new web processes
+        https://bugs.webkit.org/show_bug.cgi?id=134787
+        <rdar://problem/16892526>
+
+        Reviewed by Simon Fraser.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView loadHTMLString:baseURL:]):
+        (-[WKWebView reload]):
+        (-[WKWebView reloadFromOrigin]):
+        Return nil if the returned navigation ID is 0.
+
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::reattachToWebProcess):
+        Assert that the page is not closed.
+
+        (WebKit::WebPageProxy::reattachToWebProcessWithItem):
+        (WebKit::WebPageProxy::loadRequest):
+        (WebKit::WebPageProxy::loadFile):
+        (WebKit::WebPageProxy::loadData):
+        (WebKit::WebPageProxy::loadHTMLString):
+        (WebKit::WebPageProxy::loadAlternateHTMLString):
+        (WebKit::WebPageProxy::loadPlainTextString):
+        (WebKit::WebPageProxy::loadWebArchiveData):
+        Add early returns if the page is closed.
+
+        * UIProcess/WebPageProxy.h:
+
+2014-07-09  Anders Carlsson  <ander...@apple.com>
+
         Support transparent WKWebViews
         https://bugs.webkit.org/show_bug.cgi?id=134779
         <rdar://problem/17351058>

Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm (170942 => 170943)


--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2014-07-10 00:29:10 UTC (rev 170942)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebView.mm	2014-07-10 00:50:25 UTC (rev 170943)
@@ -393,6 +393,9 @@
 - (WKNavigation *)loadHTMLString:(NSString *)string baseURL:(NSURL *)baseURL
 {
     uint64_t navigationID = _page->loadHTMLString(string, baseURL.absoluteString);
+    if (!navigationID)
+        return nil;
+
     auto navigation = _navigationState->createLoadDataNavigation(navigationID);
 
     return navigation.autorelease();
@@ -450,7 +453,7 @@
 
     ASSERT(_page->backForwardList().currentItem());
     auto navigation = _navigationState->createBackForwardNavigation(navigationID, *_page->backForwardList().currentItem());
-
+ 
     return navigation.autorelease();
 }
 
@@ -469,7 +472,8 @@
 - (WKNavigation *)reload
 {
     uint64_t navigationID = _page->reload(false);
-    ASSERT(navigationID);
+    if (!navigationID)
+        return nil;
 
     auto navigation = _navigationState->createReloadNavigation(navigationID);
     return navigation.autorelease();
@@ -478,7 +482,8 @@
 - (WKNavigation *)reloadFromOrigin
 {
     uint64_t navigationID = _page->reload(true);
-    ASSERT(navigationID);
+    if (!navigationID)
+        return nil;
 
     auto navigation = _navigationState->createReloadNavigation(navigationID);
     return navigation.autorelease();

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (170942 => 170943)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-07-10 00:29:10 UTC (rev 170942)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp	2014-07-10 00:50:25 UTC (rev 170943)
@@ -537,8 +537,10 @@
 
 void WebPageProxy::reattachToWebProcess()
 {
+    ASSERT(!m_isClosed);
     ASSERT(!isValid());
     ASSERT(m_process->state() == WebProcessProxy::State::Terminated);
+
     m_isValid = true;
 
     if (m_process->context().processModel() == ProcessModelSharedSecondaryProcess)
@@ -569,6 +571,9 @@
 
 uint64_t WebPageProxy::reattachToWebProcessWithItem(WebBackForwardListItem* item)
 {
+    if (m_isClosed)
+        return 0;
+
     if (item && item != m_backForwardList->currentItem())
         m_backForwardList->goToItem(item);
     
@@ -703,6 +708,9 @@
 
 uint64_t WebPageProxy::loadRequest(const ResourceRequest& request, API::Object* userData)
 {
+    if (m_isClosed)
+        return 0;
+
     uint64_t navigationID = generateNavigationID();
 
     auto transaction = m_pageLoadState.transaction();
@@ -724,6 +732,9 @@
 
 void WebPageProxy::loadFile(const String& fileURLString, const String& resourceDirectoryURLString, API::Object* userData)
 {
+    if (m_isClosed)
+        return;
+
     if (!isValid())
         reattachToWebProcess();
 
@@ -751,6 +762,9 @@
 
 void WebPageProxy::loadData(API::Data* data, const String& MIMEType, const String& encoding, const String& baseURL, API::Object* userData)
 {
+    if (m_isClosed)
+        return;
+
     if (!isValid())
         reattachToWebProcess();
 
@@ -761,6 +775,9 @@
 
 uint64_t WebPageProxy::loadHTMLString(const String& htmlString, const String& baseURL, API::Object* userData)
 {
+    if (m_isClosed)
+        return 0;
+
     uint64_t navigationID = generateNavigationID();
 
     auto transaction = m_pageLoadState.transaction();
@@ -780,6 +797,9 @@
 
 void WebPageProxy::loadAlternateHTMLString(const String& htmlString, const String& baseURL, const String& unreachableURL, API::Object* userData)
 {
+    if (m_isClosed)
+        return;
+
     if (!isValid())
         reattachToWebProcess();
 
@@ -797,6 +817,9 @@
 
 void WebPageProxy::loadPlainTextString(const String& string, API::Object* userData)
 {
+    if (m_isClosed)
+        return;
+
     if (!isValid())
         reattachToWebProcess();
 
@@ -806,6 +829,9 @@
 
 void WebPageProxy::loadWebArchiveData(API::Data* webArchiveData, API::Object* userData)
 {
+    if (m_isClosed)
+        return;
+
     if (!isValid())
         reattachToWebProcess();
 

Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (170942 => 170943)


--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-07-10 00:29:10 UTC (rev 170942)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h	2014-07-10 00:50:25 UTC (rev 170943)
@@ -1426,7 +1426,7 @@
     RefPtr<WebColorPicker> m_colorPicker;
 #endif
 
-    uint64_t m_pageID;
+    const uint64_t m_pageID;
     Ref<API::Session> m_session;
 
     bool m_isPageSuspended;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to