Diff
Modified: trunk/Source/WebKit/ChangeLog (244032 => 244033)
--- trunk/Source/WebKit/ChangeLog 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/ChangeLog 2019-04-08 19:31:45 UTC (rev 244033)
@@ -1,3 +1,50 @@
+2019-04-05 Brian Burg <bb...@apple.com>
+
+ Web Automation: clean up some WebAutomationSession methods to use modern async IPC
+ https://bugs.webkit.org/show_bug.cgi?id=196168
+
+ Reviewed by Devin Rousso.
+
+ Modern WebKit IPC is capable of providing completion handlers and can track callback IDs.
+ So, most messages between WebAutomationSession and its proxy can use this facility and stop
+ keeping track of callback IDs manually. This makes most code easier to read on both the
+ sender and receiver side.
+
+ There are two cases that could not be converted:
+ - For evaluateJavaScript, we cannot use async IPC because WebAutomationSession expects to
+ be able to cancel all pending replies when a page navigates away, the web process crashes,
+ or when handling an alert.
+ - For takeScreenshot, there is not currently support in the modern async IPC code paths for
+ sending the result back. ShareableBitmap and friends lack a modern decoder implementation.
+
+ * UIProcess/Automation/WebAutomationSession.cpp:
+ (WebKit::WebAutomationSession::resolveChildFrameHandle):
+ (WebKit::WebAutomationSession::resolveParentFrameHandle):
+ (WebKit::WebAutomationSession::computeElementLayout):
+ (WebKit::WebAutomationSession::selectOptionElement):
+ (WebKit::WebAutomationSession::getAllCookies):
+ (WebKit::WebAutomationSession::deleteSingleCookie):
+ (WebKit::WebAutomationSession::viewportInViewCenterPointOfElement):
+ (WebKit::WebAutomationSession::didResolveChildFrame): Deleted.
+ (WebKit::WebAutomationSession::didResolveParentFrame): Deleted.
+ (WebKit::WebAutomationSession::didComputeElementLayout): Deleted.
+ (WebKit::WebAutomationSession::didSelectOptionElement): Deleted.
+ (WebKit::WebAutomationSession::didGetCookiesForFrame): Deleted.
+ (WebKit::WebAutomationSession::didDeleteCookie): Deleted.
+ * UIProcess/Automation/WebAutomationSession.h:
+ * UIProcess/Automation/WebAutomationSession.messages.in:
+ * WebProcess/Automation/WebAutomationSessionProxy.cpp:
+ (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
+ (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
+ (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
+ (WebKit::WebAutomationSessionProxy::resolveParentFrame):
+ (WebKit::WebAutomationSessionProxy::computeElementLayout):
+ (WebKit::WebAutomationSessionProxy::selectOptionElement):
+ (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
+ (WebKit::WebAutomationSessionProxy::deleteCookie):
+ * WebProcess/Automation/WebAutomationSessionProxy.h:
+ * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
+
2019-04-08 Alex Christensen <achristen...@webkit.org>
REGRESSION(236463) DownloadManager can call a null CompletionHandler
Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp (244032 => 244033)
--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.cpp 2019-04-08 19:31:45 UTC (rev 244033)
@@ -970,21 +970,27 @@
if (!frameID)
ASYNC_FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
- uint64_t callbackID = m_nextResolveFrameCallbackID++;
- m_resolveChildFrameHandleCallbacks.set(callbackID, WTFMove(callback));
+ WTF::CompletionHandler<void(Optional<String>, uint64_t)> completionHandler = [this, protectedThis = makeRef(*this), callback = callback.copyRef()](Optional<String> errorType, uint64_t frameID) mutable {
+ if (errorType) {
+ callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
+ return;
+ }
+ callback->sendSuccess(handleForWebFrameID(frameID));
+ };
+
if (optionalNodeHandle) {
- page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithNodeHandle(page->pageID(), frameID.value(), *optionalNodeHandle, callbackID), 0);
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ResolveChildFrameWithNodeHandle(page->pageID(), frameID.value(), *optionalNodeHandle), WTFMove(completionHandler));
return;
}
if (optionalName) {
- page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithName(page->pageID(), frameID.value(), *optionalName, callbackID), 0);
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ResolveChildFrameWithName(page->pageID(), frameID.value(), *optionalName), WTFMove(completionHandler));
return;
}
if (optionalOrdinal) {
- page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithOrdinal(page->pageID(), frameID.value(), *optionalOrdinal, callbackID), 0);
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ResolveChildFrameWithOrdinal(page->pageID(), frameID.value(), *optionalOrdinal), WTFMove(completionHandler));
return;
}
@@ -991,18 +997,6 @@
ASSERT_NOT_REACHED();
}
-void WebAutomationSession::didResolveChildFrame(uint64_t callbackID, uint64_t frameID, const String& errorType)
-{
- auto callback = m_resolveChildFrameHandleCallbacks.take(callbackID);
- if (!callback)
- return;
-
- if (!errorType.isEmpty())
- callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(errorType));
- else
- callback->sendSuccess(handleForWebFrameID(frameID));
-}
-
void WebAutomationSession::resolveParentFrameHandle(const String& browsingContextHandle, const String& frameHandle, Ref<ResolveParentFrameHandleCallback>&& callback)
{
WebPageProxy* page = webPageProxyForHandle(browsingContextHandle);
@@ -1013,22 +1007,16 @@
if (!frameID)
ASYNC_FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
- uint64_t callbackID = m_nextResolveParentFrameCallbackID++;
- m_resolveParentFrameHandleCallbacks.set(callbackID, WTFMove(callback));
+ WTF::CompletionHandler<void(Optional<String>, uint64_t)> completionHandler = [this, protectedThis = makeRef(*this), callback = callback.copyRef()](Optional<String> errorType, uint64_t frameID) mutable {
+ if (errorType) {
+ callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
+ return;
+ }
- page->process().send(Messages::WebAutomationSessionProxy::ResolveParentFrame(page->pageID(), frameID.value(), callbackID), 0);
-}
+ callback->sendSuccess(handleForWebFrameID(frameID));
+ };
-void WebAutomationSession::didResolveParentFrame(uint64_t callbackID, uint64_t frameID, const String& errorType)
-{
- auto callback = m_resolveParentFrameHandleCallbacks.take(callbackID);
- if (!callback)
- return;
-
- if (!errorType.isEmpty())
- callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(errorType));
- else
- callback->sendSuccess(handleForWebFrameID(frameID));
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ResolveParentFrame(page->pageID(), frameID.value()), WTFMove(completionHandler));
}
static Optional<CoordinateSystem> protocolStringToCoordinateSystem(const String& coordinateSystemString)
@@ -1054,62 +1042,42 @@
if (!coordinateSystem)
ASYNC_FAIL_WITH_PREDEFINED_ERROR_AND_DETAILS(InvalidParameter, "The parameter 'coordinateSystem' is invalid.");
- // Start at 2 and use only even numbers to not conflict with m_nextViewportInViewCenterPointOfElementCallbackID.
- uint64_t callbackID = m_nextComputeElementLayoutCallbackID += 2;
- m_computeElementLayoutCallbacks.set(callbackID, WTFMove(callback));
-
- bool scrollIntoViewIfNeeded = optionalScrollIntoViewIfNeeded ? *optionalScrollIntoViewIfNeeded : false;
- page->process().send(Messages::WebAutomationSessionProxy::ComputeElementLayout(page->pageID(), frameID.value(), nodeHandle, scrollIntoViewIfNeeded, coordinateSystem.value(), callbackID), 0);
-}
-
-void WebAutomationSession::didComputeElementLayout(uint64_t callbackID, WebCore::IntRect rect, Optional<WebCore::IntPoint> inViewCenterPoint, bool isObscured, const String& errorType)
-{
- if (callbackID % 2 == 1) {
- ASSERT(inViewCenterPoint);
- if (auto callback = m_viewportInViewCenterPointOfElementCallbacks.take(callbackID)) {
- Optional<AutomationCommandError> error;
- if (!errorType.isEmpty())
- error = AUTOMATION_COMMAND_ERROR_WITH_MESSAGE(errorType);
- callback(inViewCenterPoint, error);
+ WTF::CompletionHandler<void(Optional<String>, WebCore::IntRect, Optional<WebCore::IntPoint>, bool)> completionHandler = [callback = callback.copyRef()](Optional<String> errorType, WebCore::IntRect rect, Optional<WebCore::IntPoint> inViewCenterPoint, bool isObscured) mutable {
+ if (errorType) {
+ callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
+ return;
}
- return;
- }
- auto callback = m_computeElementLayoutCallbacks.take(callbackID);
- if (!callback)
- return;
+ auto originObject = Inspector::Protocol::Automation::Point::create()
+ .setX(rect.x())
+ .setY(rect.y())
+ .release();
- if (!errorType.isEmpty()) {
- callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(errorType));
- return;
- }
+ auto sizeObject = Inspector::Protocol::Automation::Size::create()
+ .setWidth(rect.width())
+ .setHeight(rect.height())
+ .release();
- auto originObject = Inspector::Protocol::Automation::Point::create()
- .setX(rect.x())
- .setY(rect.y())
- .release();
+ auto rectObject = Inspector::Protocol::Automation::Rect::create()
+ .setOrigin(WTFMove(originObject))
+ .setSize(WTFMove(sizeObject))
+ .release();
- auto sizeObject = Inspector::Protocol::Automation::Size::create()
- .setWidth(rect.width())
- .setHeight(rect.height())
- .release();
+ if (!inViewCenterPoint) {
+ callback->sendSuccess(WTFMove(rectObject), nullptr, isObscured);
+ return;
+ }
- auto rectObject = Inspector::Protocol::Automation::Rect::create()
- .setOrigin(WTFMove(originObject))
- .setSize(WTFMove(sizeObject))
- .release();
+ auto inViewCenterPointObject = Inspector::Protocol::Automation::Point::create()
+ .setX(inViewCenterPoint.value().x())
+ .setY(inViewCenterPoint.value().y())
+ .release();
- if (!inViewCenterPoint) {
- callback->sendSuccess(WTFMove(rectObject), nullptr, isObscured);
- return;
- }
+ callback->sendSuccess(WTFMove(rectObject), WTFMove(inViewCenterPointObject), isObscured);
+ };
- auto inViewCenterPointObject = Inspector::Protocol::Automation::Point::create()
- .setX(inViewCenterPoint.value().x())
- .setY(inViewCenterPoint.value().y())
- .release();
-
- callback->sendSuccess(WTFMove(rectObject), WTFMove(inViewCenterPointObject), isObscured);
+ bool scrollIntoViewIfNeeded = optionalScrollIntoViewIfNeeded ? *optionalScrollIntoViewIfNeeded : false;
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ComputeElementLayout(page->pageID(), frameID.value(), nodeHandle, scrollIntoViewIfNeeded, coordinateSystem.value()), WTFMove(completionHandler));
}
void WebAutomationSession::selectOptionElement(const String& browsingContextHandle, const String& frameHandle, const String& nodeHandle, Ref<SelectOptionElementCallback>&& callback)
@@ -1122,27 +1090,18 @@
if (!frameID)
ASYNC_FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
- uint64_t callbackID = m_nextSelectOptionElementCallbackID++;
- m_selectOptionElementCallbacks.set(callbackID, WTFMove(callback));
+ WTF::CompletionHandler<void(Optional<String>)> completionHandler = [callback = callback.copyRef()](Optional<String> errorType) mutable {
+ if (errorType) {
+ callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
+ return;
+ }
+
+ callback->sendSuccess();
+ };
- page->process().send(Messages::WebAutomationSessionProxy::SelectOptionElement(page->pageID(), frameID.value(), nodeHandle, callbackID), 0);
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::SelectOptionElement(page->pageID(), frameID.value(), nodeHandle), WTFMove(completionHandler));
}
-void WebAutomationSession::didSelectOptionElement(uint64_t callbackID, const String& errorType)
-{
- auto callback = m_selectOptionElementCallbacks.take(callbackID);
- if (!callback)
- return;
-
- if (!errorType.isEmpty()) {
- callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(errorType));
- return;
- }
-
- callback->sendSuccess();
-}
-
-
void WebAutomationSession::isShowingJavaScriptDialog(Inspector::ErrorString& errorString, const String& browsingContextHandle, bool* result)
{
ASSERT(m_client);
@@ -1270,21 +1229,6 @@
m_filesToSelectForFileUpload.swap(newFileList);
}
-void WebAutomationSession::getAllCookies(const String& browsingContextHandle, Ref<GetAllCookiesCallback>&& callback)
-{
- WebPageProxy* page = webPageProxyForHandle(browsingContextHandle);
- if (!page)
- ASYNC_FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
-
- // Always send the main frame ID as 0 so it is resolved on the WebProcess side. This avoids a race when page->mainFrame() is null still.
- const uint64_t mainFrameID = 0;
-
- uint64_t callbackID = m_nextGetCookiesCallbackID++;
- m_getCookieCallbacks.set(callbackID, WTFMove(callback));
-
- page->process().send(Messages::WebAutomationSessionProxy::GetCookiesForFrame(page->pageID(), mainFrameID, callbackID), 0);
-}
-
static Ref<Inspector::Protocol::Automation::Cookie> buildObjectForCookie(const WebCore::Cookie& cookie)
{
return Inspector::Protocol::Automation::Cookie::create()
@@ -1310,18 +1254,24 @@
return cookies;
}
-void WebAutomationSession::didGetCookiesForFrame(uint64_t callbackID, Vector<WebCore::Cookie> cookies, const String& errorType)
+void WebAutomationSession::getAllCookies(const String& browsingContextHandle, Ref<GetAllCookiesCallback>&& callback)
{
- auto callback = m_getCookieCallbacks.take(callbackID);
- if (!callback)
- return;
+ WebPageProxy* page = webPageProxyForHandle(browsingContextHandle);
+ if (!page)
+ ASYNC_FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- if (!errorType.isEmpty()) {
- callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(errorType));
- return;
- }
+ WTF::CompletionHandler<void(Optional<String>, Vector<WebCore::Cookie>)> completionHandler = [callback = callback.copyRef()](Optional<String> errorType, Vector<WebCore::Cookie> cookies) mutable {
+ if (errorType) {
+ callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
+ return;
+ }
- callback->sendSuccess(buildArrayForCookies(cookies));
+ callback->sendSuccess(buildArrayForCookies(cookies));
+ };
+
+ // Always send the main frame ID as 0 so it is resolved on the WebProcess side. This avoids a race when page->mainFrame() is null still.
+ const uint64_t mainFrameID = 0;
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::GetCookiesForFrame(page->pageID(), mainFrameID), WTFMove(completionHandler));
}
void WebAutomationSession::deleteSingleCookie(const String& browsingContextHandle, const String& cookieName, Ref<DeleteSingleCookieCallback>&& callback)
@@ -1330,29 +1280,20 @@
if (!page)
ASYNC_FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
+ WTF::CompletionHandler<void(Optional<String>)> completionHandler = [callback = callback.copyRef()](Optional<String> errorType) mutable {
+ if (errorType) {
+ callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(*errorType));
+ return;
+ }
+
+ callback->sendSuccess();
+ };
+
// Always send the main frame ID as 0 so it is resolved on the WebProcess side. This avoids a race when page->mainFrame() is null still.
const uint64_t mainFrameID = 0;
-
- uint64_t callbackID = m_nextDeleteCookieCallbackID++;
- m_deleteCookieCallbacks.set(callbackID, WTFMove(callback));
-
- page->process().send(Messages::WebAutomationSessionProxy::DeleteCookie(page->pageID(), mainFrameID, cookieName, callbackID), 0);
+ page->process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::DeleteCookie(page->pageID(), mainFrameID, cookieName), WTFMove(completionHandler));
}
-void WebAutomationSession::didDeleteCookie(uint64_t callbackID, const String& errorType)
-{
- auto callback = m_deleteCookieCallbacks.take(callbackID);
- if (!callback)
- return;
-
- if (!errorType.isEmpty()) {
- callback->sendFailure(STRING_FOR_PREDEFINED_ERROR_MESSAGE(errorType));
- return;
- }
-
- callback->sendSuccess();
-}
-
static String domainByAddingDotPrefixIfNeeded(String domain)
{
if (domain[0] != '.') {
@@ -1518,11 +1459,17 @@
// MARK: SimulatedInputDispatcher::Client API
void WebAutomationSession::viewportInViewCenterPointOfElement(WebPageProxy& page, uint64_t frameID, const String& nodeHandle, Function<void (Optional<WebCore::IntPoint>, Optional<AutomationCommandError>)>&& completionHandler)
{
- // Start at 3 and use only odd numbers to not conflict with m_nextComputeElementLayoutCallbackID.
- uint64_t callbackID = m_nextViewportInViewCenterPointOfElementCallbackID += 2;
- m_viewportInViewCenterPointOfElementCallbacks.set(callbackID, WTFMove(completionHandler));
+ WTF::CompletionHandler<void(Optional<String>, WebCore::IntRect, Optional<WebCore::IntPoint>, bool)> didComputeElementLayoutHandler = [completionHandler = WTFMove(completionHandler)](Optional<String> errorType, WebCore::IntRect, Optional<WebCore::IntPoint> inViewCenterPoint, bool) mutable {
+ if (errorType) {
+ completionHandler(WTF::nullopt, AUTOMATION_COMMAND_ERROR_WITH_MESSAGE(*errorType));
+ return;
+ }
- page.process().send(Messages::WebAutomationSessionProxy::ComputeElementLayout(page.pageID(), frameID, nodeHandle, false, CoordinateSystem::LayoutViewport, callbackID), 0);
+ ASSERT(inViewCenterPoint);
+ completionHandler(inViewCenterPoint, WTF::nullopt);
+ };
+
+ page.process().sendWithAsyncReply(Messages::WebAutomationSessionProxy::ComputeElementLayout(page.pageID(), frameID, nodeHandle, false, CoordinateSystem::LayoutViewport), WTFMove(didComputeElementLayoutHandler));
}
#if ENABLE(WEBDRIVER_MOUSE_INTERACTIONS)
Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.h (244032 => 244033)
--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.h 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.h 2019-04-08 19:31:45 UTC (rev 244033)
@@ -29,6 +29,8 @@
#include "AutomationBackendDispatchers.h"
#include "AutomationFrontendDispatchers.h"
#include "Connection.h"
+#include "MessageReceiver.h"
+#include "MessageSender.h"
#include "ShareableBitmap.h"
#include "SimulatedInputDispatcher.h"
#include "WebEvent.h"
@@ -232,18 +234,12 @@
void maximizeWindowForPage(WebPageProxy&, WTF::CompletionHandler<void()>&&);
void hideWindowForPage(WebPageProxy&, WTF::CompletionHandler<void()>&&);
- // Implemented in generated WebAutomationSessionMessageReceiver.cpp.
+ // IPC::MessageReceiver (Implemented by generated code in WebAutomationSessionMessageReceiver.cpp).
void didReceiveMessage(IPC::Connection&, IPC::Decoder&) override;
// Called by WebAutomationSession messages.
void didEvaluateJavaScriptFunction(uint64_t callbackID, const String& result, const String& errorType);
- void didResolveChildFrame(uint64_t callbackID, uint64_t frameID, const String& errorType);
- void didResolveParentFrame(uint64_t callbackID, uint64_t frameID, const String& errorType);
- void didComputeElementLayout(uint64_t callbackID, WebCore::IntRect, Optional<WebCore::IntPoint>, bool isObscured, const String& errorType);
- void didSelectOptionElement(uint64_t callbackID, const String& errorType);
void didTakeScreenshot(uint64_t callbackID, const ShareableBitmap::Handle&, const String& errorType);
- void didGetCookiesForFrame(uint64_t callbackID, Vector<WebCore::Cookie>, const String& errorType);
- void didDeleteCookie(uint64_t callbackID, const String& errorType);
// Platform-dependent implementations.
#if ENABLE(WEBDRIVER_MOUSE_INTERACTIONS)
@@ -305,32 +301,9 @@
uint64_t m_nextEvaluateJavaScriptCallbackID { 1 };
HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::EvaluateJavaScriptFunctionCallback>> m_evaluateJavaScriptFunctionCallbacks;
- uint64_t m_nextResolveFrameCallbackID { 1 };
- HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::ResolveChildFrameHandleCallback>> m_resolveChildFrameHandleCallbacks;
-
- uint64_t m_nextResolveParentFrameCallbackID { 1 };
- HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::ResolveParentFrameHandleCallback>> m_resolveParentFrameHandleCallbacks;
-
- // Start at 2 and use only even numbers to not conflict with m_nextViewportInViewCenterPointOfElementCallbackID.
- uint64_t m_nextComputeElementLayoutCallbackID { 2 };
- HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::ComputeElementLayoutCallback>> m_computeElementLayoutCallbacks;
-
- // Start at 3 and use only odd numbers to not conflict with m_nextComputeElementLayoutCallbackID.
- uint64_t m_nextViewportInViewCenterPointOfElementCallbackID { 3 };
- HashMap<uint64_t, Function<void(Optional<WebCore::IntPoint>, Optional<AutomationCommandError>)>> m_viewportInViewCenterPointOfElementCallbacks;
-
uint64_t m_nextScreenshotCallbackID { 1 };
HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::TakeScreenshotCallback>> m_screenshotCallbacks;
- uint64_t m_nextGetCookiesCallbackID { 1 };
- HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::GetAllCookiesCallback>> m_getCookieCallbacks;
-
- uint64_t m_nextDeleteCookieCallbackID { 1 };
- HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::DeleteSingleCookieCallback>> m_deleteCookieCallbacks;
-
- uint64_t m_nextSelectOptionElementCallbackID { 1 };
- HashMap<uint64_t, RefPtr<Inspector::AutomationBackendDispatcherHandler::SelectOptionElementCallback>> m_selectOptionElementCallbacks;
-
enum class WindowTransitionedToState {
Fullscreen,
Unfullscreen,
Modified: trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.messages.in (244032 => 244033)
--- trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.messages.in 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/UIProcess/Automation/WebAutomationSession.messages.in 2019-04-08 19:31:45 UTC (rev 244033)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 Apple Inc. All rights reserved.
+# Copyright (C) 2016-2019 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -22,16 +22,5 @@
messages -> WebAutomationSession {
DidEvaluateJavaScriptFunction(uint64_t callbackID, String result, String errorType)
-
- DidResolveChildFrame(uint64_t callbackID, uint64_t frameID, String errorType)
- DidResolveParentFrame(uint64_t callbackID, uint64_t frameID, String errorType)
-
- DidComputeElementLayout(uint64_t callbackID, WebCore::IntRect rect, Optional<WebCore::IntPoint> inViewCenterPoint, bool isObscured, String errorType)
-
- DidSelectOptionElement(uint64_t callbackID, String errorType)
-
DidTakeScreenshot(uint64_t callbackID, WebKit::ShareableBitmap::Handle imageDataHandle, String errorType)
-
- DidGetCookiesForFrame(uint64_t callbackID, Vector<WebCore::Cookie> cookies, String errorType)
- DidDeleteCookie(uint64_t callbackID, String errorType)
}
Modified: trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp (244032 => 244033)
--- trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.cpp 2019-04-08 19:31:45 UTC (rev 244033)
@@ -312,12 +312,12 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidEvaluateJavaScriptFunction(callbackID, result, errorType), 0);
}
-void WebAutomationSessionProxy::resolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal, CompletionHandler<void(Optional<String>, uint64_t)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType, 0);
return;
}
@@ -325,37 +325,37 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebCore::Frame* coreFrame = frame->coreFrame();
if (!coreFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebCore::Frame* coreChildFrame = coreFrame->tree().scopedChild(ordinal);
if (!coreChildFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebFrame* childFrame = WebFrame::fromCoreFrame(*coreChildFrame);
if (!childFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, childFrame->frameID(), String()), 0);
+ completionHandler(WTF::nullopt, childFrame->frameID());
}
-void WebAutomationSessionProxy::resolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, const String& nodeHandle, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, const String& nodeHandle, CompletionHandler<void(Optional<String>, uint64_t)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType, 0);
return;
}
@@ -363,37 +363,37 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebCore::Element* coreElement = elementForNodeHandle(*frame, nodeHandle);
if (!coreElement || !coreElement->isFrameElementBase()) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebCore::Frame* coreFrameFromElement = static_cast<WebCore::HTMLFrameElementBase*>(coreElement)->contentFrame();
if (!coreFrameFromElement) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebFrame* frameFromElement = WebFrame::fromCoreFrame(*coreFrameFromElement);
if (!frameFromElement) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, frameFromElement->frameID(), String()), 0);
+ completionHandler(WTF::nullopt, frameFromElement->frameID());
}
-void WebAutomationSessionProxy::resolveChildFrameWithName(uint64_t pageID, uint64_t frameID, const String& name, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveChildFrameWithName(uint64_t pageID, uint64_t frameID, const String& name, CompletionHandler<void(Optional<String>, uint64_t)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType, 0);
return;
}
@@ -401,37 +401,37 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebCore::Frame* coreFrame = frame->coreFrame();
if (!coreFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebCore::Frame* coreChildFrame = coreFrame->tree().scopedChild(name);
if (!coreChildFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebFrame* childFrame = WebFrame::fromCoreFrame(*coreChildFrame);
if (!childFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, childFrame->frameID(), String()), 0);
+ completionHandler(WTF::nullopt, childFrame->frameID());
}
-void WebAutomationSessionProxy::resolveParentFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveParentFrame(uint64_t pageID, uint64_t frameID, CompletionHandler<void(Optional<String>, uint64_t)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveParentFrame(callbackID, 0, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType, 0);
return;
}
@@ -439,17 +439,17 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveParentFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
WebFrame* parentFrame = frame->parentFrame();
if (!parentFrame) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveParentFrame(callbackID, 0, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, 0);
return;
}
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveParentFrame(callbackID, parentFrame->frameID(), String()), 0);
+ completionHandler(WTF::nullopt, parentFrame->frameID());
}
void WebAutomationSessionProxy::focusFrame(uint64_t pageID, uint64_t frameID)
@@ -534,12 +534,12 @@
return &element;
}
-void WebAutomationSessionProxy::computeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, CoordinateSystem coordinateSystem, uint64_t callbackID)
+void WebAutomationSessionProxy::computeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, CoordinateSystem coordinateSystem, CompletionHandler<void(Optional<String>, WebCore::IntRect, Optional<WebCore::IntPoint>, bool)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidComputeElementLayout(callbackID, { }, WTF::nullopt, false, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType, { }, WTF::nullopt, false);
return;
}
@@ -549,13 +549,13 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame || !frame->coreFrame() || !frame->coreFrame()->view()) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidComputeElementLayout(callbackID, { }, WTF::nullopt, false, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, { }, WTF::nullopt, false);
return;
}
WebCore::Element* coreElement = elementForNodeHandle(*frame, nodeHandle);
if (!coreElement) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidComputeElementLayout(callbackID, { }, WTF::nullopt, false, nodeNotFoundErrorType), 0);
+ completionHandler(nodeNotFoundErrorType, { }, WTF::nullopt, false);
return;
}
@@ -600,15 +600,15 @@
}
}
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidComputeElementLayout(callbackID, resultElementBounds, resultInViewCenterPoint, isObscured, String()), 0);
+ completionHandler(WTF::nullopt, resultElementBounds, resultInViewCenterPoint, isObscured);
}
-void WebAutomationSessionProxy::selectOptionElement(uint64_t pageID, uint64_t frameID, String nodeHandle, uint64_t callbackID)
+void WebAutomationSessionProxy::selectOptionElement(uint64_t pageID, uint64_t frameID, String nodeHandle, CompletionHandler<void(Optional<String>)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidSelectOptionElement(callbackID, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType);
return;
}
@@ -615,7 +615,7 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame || !frame->coreFrame() || !frame->coreFrame()->view()) {
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidSelectOptionElement(callbackID, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType);
return;
}
@@ -622,13 +622,13 @@
WebCore::Element* coreElement = elementForNodeHandle(*frame, nodeHandle);
if (!coreElement || (!is<WebCore::HTMLOptionElement>(coreElement) && !is<WebCore::HTMLOptGroupElement>(coreElement))) {
String nodeNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::NodeNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidSelectOptionElement(callbackID, nodeNotFoundErrorType), 0);
+ completionHandler(nodeNotFoundErrorType);
return;
}
String elementNotInteractableErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::ElementNotInteractable);
if (is<WebCore::HTMLOptGroupElement>(coreElement)) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidSelectOptionElement(callbackID, elementNotInteractableErrorType), 0);
+ completionHandler(elementNotInteractableErrorType);
return;
}
@@ -635,7 +635,7 @@
auto& optionElement = downcast<WebCore::HTMLOptionElement>(*coreElement);
auto* selectElement = optionElement.ownerSelectElement();
if (!selectElement) {
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidSelectOptionElement(callbackID, elementNotInteractableErrorType), 0);
+ completionHandler(elementNotInteractableErrorType);
return;
}
@@ -644,7 +644,7 @@
// optionSelectedByUser() will fire input and change events if needed, but all other events should be fired manually here.
selectElement->optionSelectedByUser(optionElement.index(), true, selectElement->multiple());
}
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidSelectOptionElement(callbackID, { }), 0);
+ completionHandler(WTF::nullopt);
}
static WebCore::IntRect snapshotRectForScreenshot(WebPage& page, WebCore::Element* element, bool clipToViewport)
@@ -719,12 +719,12 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidTakeScreenshot(callbackID, handle, { }), 0);
}
-void WebAutomationSessionProxy::getCookiesForFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID)
+void WebAutomationSessionProxy::getCookiesForFrame(uint64_t pageID, uint64_t frameID, CompletionHandler<void(Optional<String>, Vector<WebCore::Cookie>)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidGetCookiesForFrame(callbackID, Vector<WebCore::Cookie>(), windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType, Vector<WebCore::Cookie>());
return;
}
@@ -731,7 +731,7 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame || !frame->coreFrame() || !frame->coreFrame()->document()) {
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidGetCookiesForFrame(callbackID, Vector<WebCore::Cookie>(), frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType, Vector<WebCore::Cookie>());
return;
}
@@ -741,15 +741,15 @@
if (!document.cookieURL().isEmpty())
page->corePage()->cookieJar().getRawCookies(document, document.cookieURL(), foundCookies);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidGetCookiesForFrame(callbackID, foundCookies, String()), 0);
+ completionHandler(WTF::nullopt, foundCookies);
}
-void WebAutomationSessionProxy::deleteCookie(uint64_t pageID, uint64_t frameID, String cookieName, uint64_t callbackID)
+void WebAutomationSessionProxy::deleteCookie(uint64_t pageID, uint64_t frameID, String cookieName, CompletionHandler<void(Optional<String>)>&& completionHandler)
{
WebPage* page = WebProcess::singleton().webPage(pageID);
if (!page) {
String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidDeleteCookie(callbackID, windowNotFoundErrorType), 0);
+ completionHandler(windowNotFoundErrorType);
return;
}
@@ -756,7 +756,7 @@
WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame || !frame->coreFrame() || !frame->coreFrame()->document()) {
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidDeleteCookie(callbackID, frameNotFoundErrorType), 0);
+ completionHandler(frameNotFoundErrorType);
return;
}
@@ -763,7 +763,7 @@
auto& document = *frame->coreFrame()->document();
page->corePage()->cookieJar().deleteCookie(document, document.cookieURL(), cookieName);
- WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidDeleteCookie(callbackID, String()), 0);
+ completionHandler(WTF::nullopt);
}
} // namespace WebKit
Modified: trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.h (244032 => 244033)
--- trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.h 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.h 2019-04-08 19:31:45 UTC (rev 244033)
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 Apple Inc. All rights reserved.
+ * Copyright (C) 2016-2019 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -31,6 +31,7 @@
#include <wtf/text/WTFString.h>
namespace WebCore {
+struct Cookie;
class Element;
}
@@ -60,16 +61,16 @@
// Called by WebAutomationSessionProxy messages
void evaluateJavaScriptFunction(uint64_t pageID, uint64_t frameID, const String& function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID);
- void resolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal, uint64_t callbackID);
- void resolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, const String& nodeHandle, uint64_t callbackID);
- void resolveChildFrameWithName(uint64_t pageID, uint64_t frameID, const String& name, uint64_t callbackID);
- void resolveParentFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID);
+ void resolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal, CompletionHandler<void(Optional<String>, uint64_t)>&&);
+ void resolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, const String& nodeHandle, CompletionHandler<void(Optional<String>, uint64_t)>&&);
+ void resolveChildFrameWithName(uint64_t pageID, uint64_t frameID, const String& name, CompletionHandler<void(Optional<String>, uint64_t)>&&);
+ void resolveParentFrame(uint64_t pageID, uint64_t frameID, CompletionHandler<void(Optional<String>, uint64_t)>&&);
void focusFrame(uint64_t pageID, uint64_t frameID);
- void computeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, CoordinateSystem, uint64_t callbackID);
- void selectOptionElement(uint64_t pageID, uint64_t frameID, String nodeHandle, uint64_t callbackID);
+ void computeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, CoordinateSystem, CompletionHandler<void(Optional<String>, WebCore::IntRect, Optional<WebCore::IntPoint>, bool)>&&);
+ void selectOptionElement(uint64_t pageID, uint64_t frameID, String nodeHandle, CompletionHandler<void(Optional<String>)>&&);
void takeScreenshot(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool clipToViewport, uint64_t callbackID);
- void getCookiesForFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID);
- void deleteCookie(uint64_t pageID, uint64_t frameID, String cookieName, uint64_t callbackID);
+ void getCookiesForFrame(uint64_t pageID, uint64_t frameID, CompletionHandler<void(Optional<String>, Vector<WebCore::Cookie>)>&&);
+ void deleteCookie(uint64_t pageID, uint64_t frameID, String cookieName, CompletionHandler<void(Optional<String>)>&&);
String m_sessionIdentifier;
Modified: trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.messages.in (244032 => 244033)
--- trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.messages.in 2019-04-08 18:50:41 UTC (rev 244032)
+++ trunk/Source/WebKit/WebProcess/Automation/WebAutomationSessionProxy.messages.in 2019-04-08 19:31:45 UTC (rev 244033)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016 Apple Inc. All rights reserved.
+# Copyright (C) 2016-2019 Apple Inc. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
@@ -23,19 +23,19 @@
messages -> WebAutomationSessionProxy {
EvaluateJavaScriptFunction(uint64_t pageID, uint64_t frameID, String function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID)
- ResolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal, uint64_t callbackID)
- ResolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, String nodeHandle, uint64_t callbackID)
- ResolveChildFrameWithName(uint64_t pageID, uint64_t frameID, String name, uint64_t callbackID)
- ResolveParentFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID)
+ ResolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal) -> (Optional<String> errorType, uint64_t frameID) Async
+ ResolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, String nodeHandle) -> (Optional<String> errorType, uint64_t frameID) Async
+ ResolveChildFrameWithName(uint64_t pageID, uint64_t frameID, String name) -> (Optional<String> errorType, uint64_t frameID) Async
+ ResolveParentFrame(uint64_t pageID, uint64_t frameID) -> (Optional<String> errorType, uint64_t frameID) Async
FocusFrame(uint64_t pageID, uint64_t frameID)
- ComputeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, enum:uint8_t WebKit::CoordinateSystem coordinateSystem, uint64_t callbackID)
+ ComputeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, enum:uint8_t WebKit::CoordinateSystem coordinateSystem) -> (Optional<String> errorType, WebCore::IntRect rect, Optional<WebCore::IntPoint> inViewCenterPoint, bool isObscured) Async
- SelectOptionElement(uint64_t pageID, uint64_t frameID, String nodeHandle, uint64_t callbackID)
+ SelectOptionElement(uint64_t pageID, uint64_t frameID, String nodeHandle) -> (Optional<String> errorType) Async
TakeScreenshot(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool clipToViewport, uint64_t callbackID)
- GetCookiesForFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID)
- DeleteCookie(uint64_t pageID, uint64_t frameID, String cookieName, uint64_t callbackID)
+ GetCookiesForFrame(uint64_t pageID, uint64_t frameID) -> (Optional<String> errorType, Vector<WebCore::Cookie> cookies) Async
+ DeleteCookie(uint64_t pageID, uint64_t frameID, String cookieName) -> (Optional<String> errorType) Async
}