Diff
Modified: trunk/Source/WebKit2/ChangeLog (203244 => 203245)
--- trunk/Source/WebKit2/ChangeLog 2016-07-14 21:43:03 UTC (rev 203244)
+++ trunk/Source/WebKit2/ChangeLog 2016-07-14 21:52:52 UTC (rev 203245)
@@ -1,3 +1,41 @@
+2016-07-14 Timothy Hatcher <[email protected]>
+
+ Web Automation: FrameNotFound errors happen a lot for the main frame
+ https://bugs.webkit.org/show_bug.cgi?id=159777
+ rdar://problem/27224628
+
+ Send both pageID and frameID, and have the WebProcess side resolve the
+ mainFrame from 0 based on the known pageID. This avoids a race waiting
+ for the DidCreateMainFrame message.
+
+ Reviewed by Brian Burg.
+
+ * UIProcess/Automation/WebAutomationSession.cpp:
+ (WebKit::WebAutomationSession::webFrameIDForHandle):
+ (WebKit::WebAutomationSession::switchToBrowsingContext):
+ (WebKit::WebAutomationSession::evaluateJavaScriptFunction):
+ (WebKit::WebAutomationSession::resolveChildFrameHandle):
+ (WebKit::WebAutomationSession::resolveParentFrameHandle):
+ (WebKit::WebAutomationSession::computeElementLayout):
+ (WebKit::WebAutomationSession::getAllCookies):
+ (WebKit::WebAutomationSession::deleteSingleCookie):
+ (WebKit::WebAutomationSession::webFrameProxyForHandle): Deleted.
+ (WebKit::WebAutomationSession::webFrameIDForHandle): Added.
+ * UIProcess/Automation/WebAutomationSession.h:
+ * WebProcess/Automation/WebAutomationSessionProxy.cpp:
+ (WebKit::WebAutomationSessionProxy::evaluateJavaScriptFunction):
+ (WebKit::WebAutomationSessionProxy::resolveChildFrameWithOrdinal):
+ (WebKit::WebAutomationSessionProxy::resolveChildFrameWithNodeHandle):
+ (WebKit::WebAutomationSessionProxy::resolveChildFrameWithName):
+ (WebKit::WebAutomationSessionProxy::resolveParentFrame):
+ (WebKit::WebAutomationSessionProxy::focusFrame):
+ (WebKit::WebAutomationSessionProxy::computeElementLayout):
+ (WebKit::WebAutomationSessionProxy::takeScreenshot):
+ (WebKit::WebAutomationSessionProxy::getCookiesForFrame):
+ (WebKit::WebAutomationSessionProxy::deleteCookie):
+ * WebProcess/Automation/WebAutomationSessionProxy.h:
+ * WebProcess/Automation/WebAutomationSessionProxy.messages.in:
+
2016-07-14 Alex Christensen <[email protected]>
Use SocketProvider to create SocketStreamHandles
Modified: trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp (203244 => 203245)
--- trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp 2016-07-14 21:43:03 UTC (rev 203244)
+++ trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.cpp 2016-07-14 21:52:52 UTC (rev 203245)
@@ -39,6 +39,7 @@
#include <WebCore/UUID.h>
#include <algorithm>
#include <wtf/HashMap.h>
+#include <wtf/Optional.h>
#include <wtf/text/StringConcatenate.h>
using namespace Inspector;
@@ -165,19 +166,16 @@
return handle;
}
-WebFrameProxy* WebAutomationSession::webFrameProxyForHandle(const String& handle, WebPageProxy& page)
+Optional<uint64_t> WebAutomationSession::webFrameIDForHandle(const String& handle)
{
if (handle.isEmpty())
- return page.mainFrame();
+ return 0;
auto iter = m_handleWebFrameMap.find(handle);
if (iter == m_handleWebFrameMap.end())
- return nullptr;
+ return Nullopt;
- if (WebFrameProxy* frame = page.process().webFrame(iter->value))
- return frame;
-
- return nullptr;
+ return iter->value;
}
String WebAutomationSession::handleForWebFrameID(uint64_t frameID)
@@ -294,8 +292,8 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* frame = webFrameProxyForHandle(optionalFrameHandle ? *optionalFrameHandle : emptyString(), *page);
- if (!frame)
+ Optional<uint64_t> frameID = webFrameIDForHandle(optionalFrameHandle ? *optionalFrameHandle : emptyString());
+ if (!frameID)
FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
// FIXME: We don't need to track this in WK2. Remove in a follow up.
@@ -302,7 +300,7 @@
m_activeBrowsingContextHandle = browsingContextHandle;
page->setFocus(true);
- page->process().send(Messages::WebAutomationSessionProxy::FocusFrame(frame->frameID()), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::FocusFrame(page->pageID(), frameID.value()), 0);
}
void WebAutomationSession::resizeWindowOfBrowsingContext(Inspector::ErrorString& errorString, const String& handle, const Inspector::InspectorObject& sizeObject)
@@ -472,8 +470,8 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* frame = webFrameProxyForHandle(optionalFrameHandle ? *optionalFrameHandle : emptyString(), *page);
- if (!frame)
+ Optional<uint64_t> frameID = webFrameIDForHandle(optionalFrameHandle ? *optionalFrameHandle : emptyString());
+ if (!frameID)
FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
Vector<String> argumentsVector;
@@ -491,7 +489,7 @@
uint64_t callbackID = m_nextEvaluateJavaScriptCallbackID++;
m_evaluateJavaScriptFunctionCallbacks.set(callbackID, WTFMove(callback));
- page->process().send(Messages::WebAutomationSessionProxy::EvaluateJavaScriptFunction(frame->frameID(), function, argumentsVector, expectsImplicitCallbackArgument, callbackTimeout, callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::EvaluateJavaScriptFunction(page->pageID(), frameID.value(), function, argumentsVector, expectsImplicitCallbackArgument, callbackTimeout, callbackID), 0);
}
void WebAutomationSession::didEvaluateJavaScriptFunction(uint64_t callbackID, const String& result, const String& errorType)
@@ -515,8 +513,8 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* frame = webFrameProxyForHandle(optionalFrameHandle ? *optionalFrameHandle : emptyString(), *page);
- if (!frame)
+ Optional<uint64_t> frameID = webFrameIDForHandle(optionalFrameHandle ? *optionalFrameHandle : emptyString());
+ if (!frameID)
FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
uint64_t callbackID = m_nextResolveFrameCallbackID++;
@@ -523,17 +521,17 @@
m_resolveChildFrameHandleCallbacks.set(callbackID, WTFMove(callback));
if (optionalNodeHandle) {
- page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithNodeHandle(frame->frameID(), *optionalNodeHandle, callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithNodeHandle(page->pageID(), frameID.value(), *optionalNodeHandle, callbackID), 0);
return;
}
if (optionalName) {
- page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithName(frame->frameID(), *optionalName, callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithName(page->pageID(), frameID.value(), *optionalName, callbackID), 0);
return;
}
if (optionalOrdinal) {
- page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithOrdinal(frame->frameID(), *optionalOrdinal, callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::ResolveChildFrameWithOrdinal(page->pageID(), frameID.value(), *optionalOrdinal, callbackID), 0);
return;
}
@@ -558,14 +556,14 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* frame = webFrameProxyForHandle(frameHandle, *page);
- if (!frame)
+ Optional<uint64_t> frameID = webFrameIDForHandle(frameHandle);
+ if (!frameID)
FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
uint64_t callbackID = m_nextResolveParentFrameCallbackID++;
m_resolveParentFrameHandleCallbacks.set(callbackID, WTFMove(callback));
- page->process().send(Messages::WebAutomationSessionProxy::ResolveParentFrame(frame->frameID(), callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::ResolveParentFrame(page->pageID(), frameID.value(), callbackID), 0);
}
void WebAutomationSession::didResolveParentFrame(uint64_t callbackID, uint64_t frameID, const String& errorType)
@@ -586,8 +584,8 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* frame = webFrameProxyForHandle(frameHandle, *page);
- if (!frame)
+ Optional<uint64_t> frameID = webFrameIDForHandle(frameHandle);
+ if (!frameID)
FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
uint64_t callbackID = m_nextComputeElementLayoutCallbackID++;
@@ -596,7 +594,7 @@
bool scrollIntoViewIfNeeded = optionalScrollIntoViewIfNeeded ? *optionalScrollIntoViewIfNeeded : false;
bool useViewportCoordinates = optionalUseViewportCoordinates ? *optionalUseViewportCoordinates : false;
- page->process().send(Messages::WebAutomationSessionProxy::ComputeElementLayout(frame->frameID(), nodeHandle, scrollIntoViewIfNeeded, useViewportCoordinates, callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::ComputeElementLayout(page->pageID(), frameID.value(), nodeHandle, scrollIntoViewIfNeeded, useViewportCoordinates, callbackID), 0);
}
void WebAutomationSession::didComputeElementLayout(uint64_t callbackID, WebCore::IntRect rect, const String& errorType)
@@ -711,15 +709,13 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* mainFrame = page->mainFrame();
- ASSERT(mainFrame);
- if (!mainFrame)
- FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
+ // 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(mainFrame->frameID(), callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::GetCookiesForFrame(page->pageID(), mainFrameID, callbackID), 0);
}
static Ref<Inspector::Protocol::Automation::Cookie> buildObjectForCookie(const WebCore::Cookie& cookie)
@@ -767,15 +763,13 @@
if (!page)
FAIL_WITH_PREDEFINED_ERROR(WindowNotFound);
- WebFrameProxy* mainFrame = page->mainFrame();
- ASSERT(mainFrame);
- if (!mainFrame)
- FAIL_WITH_PREDEFINED_ERROR(FrameNotFound);
+ // 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(mainFrame->frameID(), cookieName, callbackID), 0);
+ page->process().send(Messages::WebAutomationSessionProxy::DeleteCookie(page->pageID(), mainFrameID, cookieName, callbackID), 0);
}
void WebAutomationSession::didDeleteCookie(uint64_t callbackID, const String& errorType)
Modified: trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.h (203244 => 203245)
--- trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.h 2016-07-14 21:43:03 UTC (rev 203244)
+++ trunk/Source/WebKit2/UIProcess/Automation/WebAutomationSession.h 2016-07-14 21:52:52 UTC (rev 203245)
@@ -132,7 +132,7 @@
String handleForWebPageProxy(const WebPageProxy&);
RefPtr<Inspector::Protocol::Automation::BrowsingContext> buildBrowsingContextForPage(WebPageProxy&);
- WebFrameProxy* webFrameProxyForHandle(const String&, WebPageProxy&);
+ Optional<uint64_t> webFrameIDForHandle(const String&);
String handleForWebFrameID(uint64_t frameID);
String handleForWebFrameProxy(const WebFrameProxy&);
Modified: trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp (203244 => 203245)
--- trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp 2016-07-14 21:43:03 UTC (rev 203244)
+++ trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.cpp 2016-07-14 21:52:52 UTC (rev 203245)
@@ -226,9 +226,13 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidEvaluateJavaScriptFunction(callbackID, String(), errorType), 0);
}
-void WebAutomationSessionProxy::evaluateJavaScriptFunction(uint64_t frameID, const String& function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID)
+void WebAutomationSessionProxy::evaluateJavaScriptFunction(uint64_t pageID, uint64_t frameID, const String& function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID)
{
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebPage* page = WebProcess::singleton().webPage(pageID);
+ if (!page)
+ return;
+
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame)
return;
@@ -289,11 +293,18 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidEvaluateJavaScriptFunction(callbackID, result, errorType), 0);
}
-void WebAutomationSessionProxy::resolveChildFrameWithOrdinal(uint64_t frameID, uint32_t ordinal, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveChildFrameWithOrdinal(uint64_t pageID, uint64_t frameID, uint32_t ordinal, uint64_t callbackID)
{
+ 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);
+ return;
+ }
+
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
return;
@@ -320,11 +331,18 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, childFrame->frameID(), String()), 0);
}
-void WebAutomationSessionProxy::resolveChildFrameWithNodeHandle(uint64_t frameID, const String& nodeHandle, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveChildFrameWithNodeHandle(uint64_t pageID, uint64_t frameID, const String& nodeHandle, uint64_t callbackID)
{
+ 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);
+ return;
+ }
+
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
return;
@@ -351,11 +369,18 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, frameFromElement->frameID(), String()), 0);
}
-void WebAutomationSessionProxy::resolveChildFrameWithName(uint64_t frameID, const String& name, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveChildFrameWithName(uint64_t pageID, uint64_t frameID, const String& name, uint64_t callbackID)
{
+ 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);
+ return;
+ }
+
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, 0, frameNotFoundErrorType), 0);
return;
@@ -382,11 +407,18 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveChildFrame(callbackID, childFrame->frameID(), String()), 0);
}
-void WebAutomationSessionProxy::resolveParentFrame(uint64_t frameID, uint64_t callbackID)
+void WebAutomationSessionProxy::resolveParentFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID)
{
+ 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);
+ return;
+ }
+
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveParentFrame(callbackID, 0, frameNotFoundErrorType), 0);
return;
@@ -401,9 +433,13 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidResolveParentFrame(callbackID, parentFrame->frameID(), String()), 0);
}
-void WebAutomationSessionProxy::focusFrame(uint64_t frameID)
+void WebAutomationSessionProxy::focusFrame(uint64_t pageID, uint64_t frameID)
{
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebPage* page = WebProcess::singleton().webPage(pageID);
+ if (!page)
+ return;
+
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame)
return;
@@ -422,12 +458,19 @@
coreDOMWindow->focus(true);
}
-void WebAutomationSessionProxy::computeElementLayout(uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool useViewportCoordinates, uint64_t callbackID)
+void WebAutomationSessionProxy::computeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool useViewportCoordinates, uint64_t callbackID)
{
+ 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, WebCore::IntRect(), windowNotFoundErrorType), 0);
+ return;
+ }
+
String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
String nodeNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::NodeNotFound);
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ WebFrame* frame = frameID ? WebProcess::singleton().webFrame(frameID) : page->mainWebFrame();
if (!frame) {
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidComputeElementLayout(callbackID, WebCore::IntRect(), frameNotFoundErrorType), 0);
return;
@@ -466,10 +509,10 @@
void WebAutomationSessionProxy::takeScreenshot(uint64_t pageID, uint64_t callbackID)
{
ShareableBitmap::Handle handle;
- String windowNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::WindowNotFound);
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::DidTakeScreenshot(callbackID, handle, windowNotFoundErrorType), 0);
return;
}
@@ -493,12 +536,18 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidTakeScreenshot(callbackID, handle, String()), 0);
}
-void WebAutomationSessionProxy::getCookiesForFrame(uint64_t frameID, uint64_t callbackID)
+void WebAutomationSessionProxy::getCookiesForFrame(uint64_t pageID, uint64_t frameID, uint64_t callbackID)
{
- String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
+ 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);
+ return;
+ }
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ 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);
return;
}
@@ -511,12 +560,18 @@
WebProcess::singleton().parentProcessConnection()->send(Messages::WebAutomationSession::DidGetCookiesForFrame(callbackID, foundCookies, String()), 0);
}
-void WebAutomationSessionProxy::deleteCookie(uint64_t frameID, String cookieName, uint64_t callbackID)
+void WebAutomationSessionProxy::deleteCookie(uint64_t pageID, uint64_t frameID, String cookieName, uint64_t callbackID)
{
- String frameNotFoundErrorType = Inspector::Protocol::AutomationHelpers::getEnumConstantValue(Inspector::Protocol::Automation::ErrorMessage::FrameNotFound);
+ 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);
+ return;
+ }
- WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ 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);
return;
}
Modified: trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.h (203244 => 203245)
--- trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.h 2016-07-14 21:43:03 UTC (rev 203244)
+++ trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.h 2016-07-14 21:52:52 UTC (rev 203245)
@@ -58,16 +58,16 @@
void didReceiveMessage(IPC::Connection&, IPC::MessageDecoder&);
// Called by WebAutomationSessionProxy messages
- void evaluateJavaScriptFunction(uint64_t frameID, const String& function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID);
- void resolveChildFrameWithOrdinal(uint64_t frameID, uint32_t ordinal, uint64_t callbackID);
- void resolveChildFrameWithNodeHandle(uint64_t frameID, const String& nodeHandle, uint64_t callbackID);
- void resolveChildFrameWithName(uint64_t frameID, const String& name, uint64_t callbackID);
- void resolveParentFrame(uint64_t frameID, uint64_t callbackID);
- void focusFrame(uint64_t frameID);
- void computeElementLayout(uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool useViewportCoordinates, uint64_t callbackID);
+ 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 focusFrame(uint64_t pageID, uint64_t frameID);
+ void computeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool useViewportCoordinates, uint64_t callbackID);
void takeScreenshot(uint64_t pageID, uint64_t callbackID);
- void getCookiesForFrame(uint64_t frameID, uint64_t callbackID);
- void deleteCookie(uint64_t frameID, String cookieName, 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);
String m_sessionIdentifier;
Modified: trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.messages.in (203244 => 203245)
--- trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.messages.in 2016-07-14 21:43:03 UTC (rev 203244)
+++ trunk/Source/WebKit2/WebProcess/Automation/WebAutomationSessionProxy.messages.in 2016-07-14 21:52:52 UTC (rev 203245)
@@ -21,19 +21,19 @@
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
messages -> WebAutomationSessionProxy {
- EvaluateJavaScriptFunction(uint64_t frameID, String function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID)
+ EvaluateJavaScriptFunction(uint64_t pageID, uint64_t frameID, String function, Vector<String> arguments, bool expectsImplicitCallbackArgument, int callbackTimeout, uint64_t callbackID)
- ResolveChildFrameWithOrdinal(uint64_t frameID, uint32_t ordinal, uint64_t callbackID)
- ResolveChildFrameWithNodeHandle(uint64_t frameID, String nodeHandle, uint64_t callbackID)
- ResolveChildFrameWithName(uint64_t frameID, String name, uint64_t callbackID)
- ResolveParentFrame(uint64_t frameID, 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)
- FocusFrame(uint64_t frameID)
+ FocusFrame(uint64_t pageID, uint64_t frameID)
- ComputeElementLayout(uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool useViewportCoordinates, uint64_t callbackID)
+ ComputeElementLayout(uint64_t pageID, uint64_t frameID, String nodeHandle, bool scrollIntoViewIfNeeded, bool useViewportCoordinates, uint64_t callbackID)
TakeScreenshot(uint64_t pageID, uint64_t callbackID)
- GetCookiesForFrame(uint64_t frameID, uint64_t callbackID)
- DeleteCookie(uint64_t frameID, String cookieName, 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)
}