Use sendWithAsyncReply() for WebPage::TryClose IPC
https://bugs.webkit.org/show_bug.cgi?id=204926
Reviewed by Alex Christensen.
Use sendWithAsyncReply() for WebPage::TryClose IPC, instead of 2 separate IPCs.
* UIProcess/Automation/WebAutomationSession.cpp:
(WebKit::WebAutomationSession::closeBrowsingContext):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::tryClose):
(WebKit::WebPageProxy::closePage):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::tryClose):
(WebKit::WebPage::sendClose):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@253187 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog
index 6366c6b..b29157d 100644
--- a/Source/WebKit/ChangeLog
+++ b/Source/WebKit/ChangeLog
@@ -1,3 +1,25 @@
+2019-12-05 Chris Dumez <cdumez@apple.com>
+
+ Use sendWithAsyncReply() for WebPage::TryClose IPC
+ https://bugs.webkit.org/show_bug.cgi?id=204926
+
+ Reviewed by Alex Christensen.
+
+ Use sendWithAsyncReply() for WebPage::TryClose IPC, instead of 2 separate IPCs.
+
+ * UIProcess/Automation/WebAutomationSession.cpp:
+ (WebKit::WebAutomationSession::closeBrowsingContext):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::tryClose):
+ (WebKit::WebPageProxy::closePage):
+ * UIProcess/WebPageProxy.h:
+ * UIProcess/WebPageProxy.messages.in:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::tryClose):
+ (WebKit::WebPage::sendClose):
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
2019-12-05 John Wilander <wilander@apple.com>
Resource Load Statistics (experimental): Add fast mode for non-cookie website data deletion
diff --git a/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp b/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp
index 1e34af6..73f0886 100644
--- a/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp
+++ b/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp
@@ -355,7 +355,7 @@
if (!page)
SYNC_FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- page->closePage(false);
+ page->closePage();
}
void WebAutomationSession::switchToBrowsingContext(const String& browsingContextHandle, const String* optionalFrameHandle, Ref<SwitchToBrowsingContextCallback>&& callback)
diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp
index efc82e8..01c1720 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp
@@ -1081,8 +1081,15 @@
if (m_process->isSuddenTerminationEnabled())
return true;
- m_process->send(Messages::WebPage::TryClose(), m_webPageID);
m_process->responsivenessTimer().start();
+ sendWithAsyncReply(Messages::WebPage::TryClose(), [this, weakThis = makeWeakPtr(*this)](bool shouldClose) {
+ if (!weakThis)
+ return;
+
+ m_process->responsivenessTimer().stop();
+ if (shouldClose)
+ closePage();
+ });
return false;
}
@@ -5312,11 +5319,8 @@
m_uiClient->didExitFullscreen(this);
}
-void WebPageProxy::closePage(bool stopResponsivenessTimer)
+void WebPageProxy::closePage()
{
- if (stopResponsivenessTimer)
- m_process->responsivenessTimer().stop();
-
pageClient().clearAllEditCommands();
m_uiClient->close(this);
}
diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h
index 10947ff..0fb531f 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.h
+++ b/Source/WebKit/UIProcess/WebPageProxy.h
@@ -557,7 +557,7 @@
void didExceedInactiveMemoryLimitWhileActive();
void didExceedBackgroundCPULimitWhileInForeground();
- void closePage(bool stopResponsivenessTimer);
+ void closePage();
void addPlatformLoadParameters(LoadParameters&);
RefPtr<API::Navigation> loadRequest(WebCore::ResourceRequest&&, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldAllowExternalSchemes, API::Object* userData = nullptr);
diff --git a/Source/WebKit/UIProcess/WebPageProxy.messages.in b/Source/WebKit/UIProcess/WebPageProxy.messages.in
index 7d9005e..5aed13e 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.messages.in
+++ b/Source/WebKit/UIProcess/WebPageProxy.messages.in
@@ -24,7 +24,7 @@
# UI messages
CreateNewPage(struct WebKit::FrameInfoData originatingFrameInfoData, Optional<WebKit::WebPageProxyIdentifier> originatingPageID, WebCore::ResourceRequest request, struct WebCore::WindowFeatures windowFeatures, struct WebKit::NavigationActionData navigationActionData) -> (Optional<WebCore::PageIdentifier> newPageID, Optional<WebKit::WebPageCreationParameters> newPageParameters) Synchronous
ShowPage()
- ClosePage(bool stopResponsivenessTimer)
+ ClosePage()
RunJavaScriptAlert(WebCore::FrameIdentifier frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, String message) -> () Synchronous
RunJavaScriptConfirm(WebCore::FrameIdentifier frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, String message) -> (bool result) Synchronous
RunJavaScriptPrompt(WebCore::FrameIdentifier frameID, struct WebCore::SecurityOriginData frameSecurityOrigin, String message, String defaultValue) -> (String result) Synchronous
diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.cpp b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
index 539c4b6..e940ba3 100644
--- a/Source/WebKit/WebProcess/WebPage/WebPage.cpp
+++ b/Source/WebKit/WebProcess/WebPage/WebPage.cpp
@@ -1457,19 +1457,15 @@
RunLoop::main().stop();
}
-void WebPage::tryClose()
+void WebPage::tryClose(CompletionHandler<void(bool)>&& completionHandler)
{
- SendStopResponsivenessTimer stopper;
-
- if (!corePage()->userInputBridge().tryClosePage())
- return;
-
- send(Messages::WebPageProxy::ClosePage(true));
+ bool shouldClose = corePage()->userInputBridge().tryClosePage();
+ completionHandler(shouldClose);
}
void WebPage::sendClose()
{
- send(Messages::WebPageProxy::ClosePage(false));
+ send(Messages::WebPageProxy::ClosePage());
}
void WebPage::suspendForProcessSwap()
diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.h b/Source/WebKit/WebProcess/WebPage/WebPage.h
index 69838b0..340b6d8 100644
--- a/Source/WebKit/WebProcess/WebPage/WebPage.h
+++ b/Source/WebKit/WebProcess/WebPage/WebPage.h
@@ -1336,7 +1336,7 @@
void loadDataImpl(uint64_t navigationID, bool shouldTreatAsContinuingLoad, Optional<WebsitePoliciesData>&&, Ref<WebCore::SharedBuffer>&&, const String& MIMEType, const String& encodingName, const URL& baseURL, const URL& failingURL, const UserData&, WebCore::ShouldOpenExternalURLsPolicy = WebCore::ShouldOpenExternalURLsPolicy::ShouldNotAllow);
// Actions
- void tryClose();
+ void tryClose(CompletionHandler<void(bool)>&&);
void platformDidReceiveLoadParameters(const LoadParameters&);
void loadRequest(LoadParameters&&);
NO_RETURN void loadRequestWaitingForProcessLaunch(LoadParameters&&, URL&&, WebPageProxyIdentifier, bool);
diff --git a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
index 3e891f81..5f2f1ad 100644
--- a/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
+++ b/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
@@ -234,7 +234,7 @@
ResumeActiveDOMObjectsAndAnimations()
Close()
- TryClose()
+ TryClose() -> (bool shouldClose) Async
SetEditable(bool editable)
ValidateCommand(String name, WebKit::CallbackID callbackID)