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;