Title: [257882] trunk
Revision
257882
Author
achristen...@apple.com
Date
2020-03-04 15:18:15 -0800 (Wed, 04 Mar 2020)

Log Message

Add SPI to evaluate _javascript_ in an iframe
https://bugs.webkit.org/show_bug.cgi?id=208605

Reviewed by Brady Eidson.

Source/WebCore:

Covered by new API tests.

* bindings/js/DOMWrapperWorld.cpp:
(WebCore::DOMWrapperWorld::DOMWrapperWorld):
Remove a now-invalid assertion that was firing during my test.
API::ContentWorld::defaultClientWorld creates a world with no name and type Type::User.
I'm surprised this wasn't hit before.

Source/WebKit:

* UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView evaluateJavaScript:completionHandler:]):
(-[WKWebView evaluateJavaScript:inContentWorld:completionHandler:]):
(-[WKWebView callAsyncJavaScript:arguments:inContentWorld:completionHandler:]):
(-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]):
(-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
(-[WKWebView _callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
(-[WKWebView _evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
(-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:completionHandler:inWorld:]): Deleted.
* UIProcess/API/Cocoa/WKWebViewPrivate.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::runJavaScriptInMainFrame):
(WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld):
(WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld): Deleted.
(WebKit::WebPageProxy::runJavaScriptInFrame): Deleted.
* UIProcess/WebPageProxy.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::runJavaScriptInFrameInScriptWorld):
(WebKit::WebPage::runJavaScriptInMainFrameScriptWorld): Deleted.
(WebKit::WebPage::runJavaScriptInFrame): Deleted.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:

Tools:

* TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (257881 => 257882)


--- trunk/Source/WebCore/ChangeLog	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebCore/ChangeLog	2020-03-04 23:18:15 UTC (rev 257882)
@@ -1,3 +1,18 @@
+2020-03-04  Alex Christensen  <achristen...@webkit.org>
+
+        Add SPI to evaluate _javascript_ in an iframe
+        https://bugs.webkit.org/show_bug.cgi?id=208605
+
+        Reviewed by Brady Eidson.
+
+        Covered by new API tests.
+
+        * bindings/js/DOMWrapperWorld.cpp:
+        (WebCore::DOMWrapperWorld::DOMWrapperWorld):
+        Remove a now-invalid assertion that was firing during my test.
+        API::ContentWorld::defaultClientWorld creates a world with no name and type Type::User.
+        I'm surprised this wasn't hit before.
+
 2020-03-03  Jiewen Tan  <jiewen_...@apple.com>
 
         [WebAuthn] Implement -[_WKWebAuthenticationPanelDelegate panel:decidePolicyForLocalAuthenticatorWithCompletionHandler:] SPI

Modified: trunk/Source/WebCore/bindings/js/DOMWrapperWorld.cpp (257881 => 257882)


--- trunk/Source/WebCore/bindings/js/DOMWrapperWorld.cpp	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebCore/bindings/js/DOMWrapperWorld.cpp	2020-03-04 23:18:15 UTC (rev 257882)
@@ -36,8 +36,6 @@
     , m_name(name)
     , m_type(type)
 {
-    ASSERT(!name.isEmpty() || m_type == Type::Normal);
-
     VM::ClientData* clientData = m_vm.clientData;
     ASSERT(clientData);
     static_cast<JSVMClientData*>(clientData)->rememberWorld(*this);

Modified: trunk/Source/WebKit/ChangeLog (257881 => 257882)


--- trunk/Source/WebKit/ChangeLog	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/ChangeLog	2020-03-04 23:18:15 UTC (rev 257882)
@@ -1,3 +1,33 @@
+2020-03-04  Alex Christensen  <achristen...@webkit.org>
+
+        Add SPI to evaluate _javascript_ in an iframe
+        https://bugs.webkit.org/show_bug.cgi?id=208605
+
+        Reviewed by Brady Eidson.
+
+        * UIProcess/API/Cocoa/WKWebView.mm:
+        (-[WKWebView evaluateJavaScript:completionHandler:]):
+        (-[WKWebView evaluateJavaScript:inContentWorld:completionHandler:]):
+        (-[WKWebView callAsyncJavaScript:arguments:inContentWorld:completionHandler:]):
+        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]):
+        (-[WKWebView _evaluateJavaScriptWithoutUserGesture:completionHandler:]):
+        (-[WKWebView _callAsyncJavaScript:arguments:inFrame:inContentWorld:completionHandler:]):
+        (-[WKWebView _evaluateJavaScript:inFrame:inContentWorld:completionHandler:]):
+        (-[WKWebView _evaluateJavaScript:asAsyncFunction:withArguments:forceUserGesture:completionHandler:inWorld:]): Deleted.
+        * UIProcess/API/Cocoa/WKWebViewPrivate.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::runJavaScriptInMainFrame):
+        (WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld):
+        (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld): Deleted.
+        (WebKit::WebPageProxy::runJavaScriptInFrame): Deleted.
+        * UIProcess/WebPageProxy.h:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::runJavaScriptInFrameInScriptWorld):
+        (WebKit::WebPage::runJavaScriptInMainFrameScriptWorld): Deleted.
+        (WebKit::WebPage::runJavaScriptInFrame): Deleted.
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
 2020-03-04  Per Arne Vollan  <pvol...@apple.com>
 
         Partially revert r256756, since it introduced bugs related to Accessibility.

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (257881 => 257882)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2020-03-04 23:18:15 UTC (rev 257882)
@@ -835,17 +835,17 @@
 
 - (void)evaluateJavaScript:(NSString *)_javascript_String completionHandler:(void (^)(id, NSError *))completionHandler
 {
-    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:YES completionHandler:completionHandler inWorld:WKContentWorld.pageWorld];
+    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:YES inFrame:nil inWorld:WKContentWorld.pageWorld completionHandler:completionHandler];
 }
 
 - (void)evaluateJavaScript:(NSString *)_javascript_String inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError *))completionHandler
 {
-    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:YES completionHandler:completionHandler inWorld:contentWorld];
+    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:YES inFrame:nil inWorld:contentWorld completionHandler:completionHandler];
 }
 
 - (void)callAsyncJavaScript:(NSString *)_javascript_String arguments:(NSDictionary<NSString *, id> *)arguments inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError *error))completionHandler
 {
-    [self _evaluateJavaScript:_javascript_String asAsyncFunction:YES withArguments:arguments forceUserGesture:YES completionHandler:completionHandler inWorld:contentWorld];
+    [self _evaluateJavaScript:_javascript_String asAsyncFunction:YES withArguments:arguments forceUserGesture:YES inFrame:nil inWorld:contentWorld completionHandler:completionHandler];
 }
 
 static bool validateArgument(id argument)
@@ -882,7 +882,7 @@
     return false;
 }
 
-- (void)_evaluateJavaScript:(NSString *)_javascript_String asAsyncFunction:(BOOL)asAsyncFunction withArguments:(NSDictionary<NSString *, id> *)arguments forceUserGesture:(BOOL)forceUserGesture completionHandler:(void (^)(id, NSError *))completionHandler inWorld:(WKContentWorld *)world
+- (void)_evaluateJavaScript:(NSString *)_javascript_String asAsyncFunction:(BOOL)asAsyncFunction withArguments:(NSDictionary<NSString *, id> *)arguments forceUserGesture:(BOOL)forceUserGesture inFrame:(WKFrameInfo *)frame inWorld:(WKContentWorld *)world completionHandler:(void (^)(id, NSError *))completionHandler
 {
     auto handler = adoptNS([completionHandler copy]);
 
@@ -918,8 +918,12 @@
 
         return;
     }
+    
+    Optional<WebCore::FrameIdentifier> frameID;
+    if (frame)
+        frameID = makeObjectIdentifier<WebCore::FrameIdentifierType>(frame._handle.frameID);
 
-    _page->runJavaScriptInMainFrameScriptWorld(WebCore::RunJavaScriptParameters { _javascript_String, !!asAsyncFunction, WTFMove(argumentsMap), !!forceUserGesture }, *world->_contentWorld.get(), [handler](API::SerializedScriptValue* serializedScriptValue, Optional<WebCore::ExceptionDetails> details, WebKit::ScriptValueCallback::Error errorCode) {
+    _page->runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters { _javascript_String, !!asAsyncFunction, WTFMove(argumentsMap), !!forceUserGesture }, frameID, *world->_contentWorld.get(), [handler](API::SerializedScriptValue* serializedScriptValue, Optional<WebCore::ExceptionDetails> details, WebKit::ScriptValueCallback::Error errorCode) {
         if (!handler)
             return;
 
@@ -2291,9 +2295,19 @@
 
 - (void)_evaluateJavaScriptWithoutUserGesture:(NSString *)_javascript_String completionHandler:(void (^)(id, NSError *))completionHandler
 {
-    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:NO completionHandler:completionHandler inWorld:WKContentWorld.pageWorld];
+    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:NO inFrame:nil inWorld:WKContentWorld.pageWorld completionHandler:completionHandler];
 }
 
+- (void)_callAsyncJavaScript:(NSString *)functionBody arguments:(NSDictionary<NSString *, id> *)arguments inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError *error))completionHandler
+{
+    [self _evaluateJavaScript:functionBody asAsyncFunction:YES withArguments:arguments forceUserGesture:YES inFrame:frame inWorld:contentWorld completionHandler:completionHandler];
+}
+
+- (void)_evaluateJavaScript:(NSString *)_javascript_String inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError *error))completionHandler
+{
+    [self _evaluateJavaScript:_javascript_String asAsyncFunction:NO withArguments:nil forceUserGesture:YES inFrame:frame inWorld:contentWorld completionHandler:completionHandler];
+}
+
 - (void)_updateWebsitePolicies:(_WKWebsitePolicies *)websitePolicies
 {
 }

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h (257881 => 257882)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h	2020-03-04 23:18:15 UTC (rev 257882)
@@ -104,6 +104,7 @@
 #endif
 
 @class WKBrowsingContextHandle;
+@class WKFrameInfo;
 @class WKWebpagePreferences;
 @class _WKApplicationManifest;
 @class _WKFrameHandle;
@@ -208,6 +209,8 @@
 - (void)_updateWebpagePreferences:(WKWebpagePreferences *)webpagePreferences WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
 - (void)_evaluateJavaScriptWithoutUserGesture:(NSString *)_javascript_String completionHandler:(void (^)(id, NSError *))completionHandler WK_API_AVAILABLE(macos(10.13), ios(11.0));
+- (void)_evaluateJavaScript:(NSString *)_javascript_String inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError * error))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+- (void)_callAsyncJavaScript:(NSString *)functionBody arguments:(NSDictionary<NSString *, id> *)arguments inFrame:(WKFrameInfo *)frame inContentWorld:(WKContentWorld *)contentWorld completionHandler:(void (^)(id, NSError *error))completionHandler WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
 @property (nonatomic, setter=_setLayoutMode:) _WKLayoutMode _layoutMode;
 // For use with _layoutMode = _WKLayoutModeFixedSize:

Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (257881 => 257882)


--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp	2020-03-04 23:18:15 UTC (rev 257882)
@@ -3786,7 +3786,7 @@
 
     GRefPtr<GTask> task = adoptGRef(g_task_new(webView, cancellable, callback, userData));
     auto world = API::ContentWorld::sharedWorldWithName(String::fromUTF8(worldName));
-    getPage(webView).runJavaScriptInMainFrameScriptWorld({ String::fromUTF8(script), false, WTF::nullopt, true }, world.get(), [task = WTFMove(task)](API::SerializedScriptValue* serializedScriptValue, Optional<ExceptionDetails> details, WebKit::CallbackBase::Error) {
+    getPage(webView).runJavaScriptInFrameInScriptWorld({ String::fromUTF8(script), false, WTF::nullopt, true }, WTF::nullopt, world.get(), [task = WTFMove(task)](API::SerializedScriptValue* serializedScriptValue, Optional<ExceptionDetails> details, WebKit::CallbackBase::Error) {
         ExceptionDetails exceptionDetails;
         if (details)
             exceptionDetails = *details;

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (257881 => 257882)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-03-04 23:18:15 UTC (rev 257882)
@@ -3980,10 +3980,10 @@
 
 void WebPageProxy::runJavaScriptInMainFrame(RunJavaScriptParameters&& parameters, WTF::Function<void (API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&& callbackFunction)
 {
-    runJavaScriptInMainFrameScriptWorld(WTFMove(parameters), API::ContentWorld::pageContentWorld(), WTFMove(callbackFunction));
+    runJavaScriptInFrameInScriptWorld(WTFMove(parameters), WTF::nullopt, API::ContentWorld::pageContentWorld(), WTFMove(callbackFunction));
 }
 
-void WebPageProxy::runJavaScriptInMainFrameScriptWorld(RunJavaScriptParameters&& parameters, API::ContentWorld& world, WTF::Function<void(API::SerializedScriptValue*, Optional<ExceptionDetails>, CallbackBase::Error)>&& callbackFunction)
+void WebPageProxy::runJavaScriptInFrameInScriptWorld(RunJavaScriptParameters&& parameters, Optional<WebCore::FrameIdentifier> frameID, API::ContentWorld& world, WTF::Function<void(API::SerializedScriptValue*, Optional<ExceptionDetails>, CallbackBase::Error)>&& callbackFunction)
 {
     // For backward-compatibility support running script in a WebView which has not done any loads yets.
     launchInitialProcessIfNecessary();
@@ -3993,17 +3993,10 @@
         return;
     }
 
-    auto callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process->throttler().backgroundActivity("WebPageProxy::runJavaScriptInMainFrameScriptWorld"_s));
-    send(Messages::WebPage::RunJavaScriptInMainFrameScriptWorld(parameters, world.worldData(), callbackID));
+    auto callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process->throttler().backgroundActivity("WebPageProxy::runJavaScriptInFrameInScriptWorld"_s));
+    send(Messages::WebPage::RunJavaScriptInFrameInScriptWorld(parameters, frameID, world.worldData(), callbackID));
 }
 
-void WebPageProxy::runJavaScriptInFrame(FrameIdentifier frameID, const String& script, bool forceUserGesture, WTF::Function<void(API::SerializedScriptValue*, Optional<ExceptionDetails>, CallbackBase::Error)>&& callbackFunction)
-{
-    ASSERT(mainFrame()->frameID() != frameID);
-    auto callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process->throttler().backgroundActivity("WebPageProxy::runJavaScriptInFrame"_s));
-    send(Messages::WebPage::RunJavaScriptInFrame(frameID, script, forceUserGesture, callbackID));
-}
-
 void WebPageProxy::getRenderTreeExternalRepresentation(WTF::Function<void (const String&, CallbackBase::Error)>&& callbackFunction)
 {
     if (!hasRunningProcess()) {

Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (257881 => 257882)


--- trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h	2020-03-04 23:18:15 UTC (rev 257882)
@@ -1109,9 +1109,7 @@
     void getSourceForFrame(WebFrameProxy*, WTF::Function<void (const String&, CallbackBase::Error)>&&);
     void getWebArchiveOfFrame(WebFrameProxy*, Function<void (API::Data*, CallbackBase::Error)>&&);
     void runJavaScriptInMainFrame(WebCore::RunJavaScriptParameters&&, WTF::Function<void (API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&& callbackFunction);
-    void runJavaScriptInMainFrameScriptWorld(WebCore::RunJavaScriptParameters&&, API::ContentWorld&, WTF::Function<void(API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&& callbackFunction);
-    // For sub frames.
-    void runJavaScriptInFrame(WebCore::FrameIdentifier, const String& script, bool forceUserGesture, WTF::Function<void(API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&& callbackFunction);
+    void runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters&&, Optional<WebCore::FrameIdentifier>, API::ContentWorld&, Function<void(API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&&);
     void forceRepaint(RefPtr<VoidCallback>&&);
 
     float headerHeight(WebFrameProxy&);

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (257881 => 257882)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-03-04 23:18:15 UTC (rev 257882)
@@ -3469,19 +3469,13 @@
     frame->coreFrame()->script().executeAsynchronousUserAgentScriptInWorld(world->coreWorld(), WTFMove(parameters), WTFMove(resolveFunction));
 }
 
-void WebPage::runJavaScriptInMainFrameScriptWorld(RunJavaScriptParameters&& parameters, const std::pair<ContentWorldIdentifier, String>& worldData, CallbackID callbackID)
+void WebPage::runJavaScriptInFrameInScriptWorld(RunJavaScriptParameters&& parameters, Optional<WebCore::FrameIdentifier> frameID, const std::pair<ContentWorldIdentifier, String>& worldData, CallbackID callbackID)
 {
+    auto* webFrame = frameID ? WebProcess::singleton().webFrame(*frameID) : mainWebFrame();
     m_userContentController->addContentWorld(worldData);
-    runJavaScript(mainWebFrame(), WTFMove(parameters), worldData.first, callbackID);
+    runJavaScript(webFrame, WTFMove(parameters), worldData.first, callbackID);
 }
 
-void WebPage::runJavaScriptInFrame(FrameIdentifier frameID, const String& script, bool forceUserGesture, CallbackID callbackID)
-{
-    WebFrame* frame = WebProcess::singleton().webFrame(frameID);
-    ASSERT(mainWebFrame() != frame);
-    runJavaScript(frame, { script, false, WTF::nullopt, forceUserGesture }, pageContentWorldIdentifier(), callbackID);
-}
-
 void WebPage::getContentsAsString(ContentAsStringIncludesChildFrames includeChildFrames, CallbackID callbackID)
 {
     switch (includeChildFrames) {

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (257881 => 257882)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-03-04 23:18:15 UTC (rev 257882)
@@ -1490,8 +1490,7 @@
     void getSourceForFrame(WebCore::FrameIdentifier, CallbackID);
     void getWebArchiveOfFrame(WebCore::FrameIdentifier, CallbackID);
     void runJavaScript(WebFrame*, WebCore::RunJavaScriptParameters&&, ContentWorldIdentifier, CallbackID);
-    void runJavaScriptInMainFrameScriptWorld(WebCore::RunJavaScriptParameters&&, const std::pair<ContentWorldIdentifier, String>& worldData, CallbackID);
-    void runJavaScriptInFrame(WebCore::FrameIdentifier, const String&, bool forceUserGesture, CallbackID);
+    void runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters&&, Optional<WebCore::FrameIdentifier>, const std::pair<ContentWorldIdentifier, String>& worldData, CallbackID);
     void forceRepaint(CallbackID);
     void takeSnapshot(WebCore::IntRect snapshotRect, WebCore::IntSize bitmapSize, uint32_t options, CallbackID);
 

Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (257881 => 257882)


--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-03-04 23:18:15 UTC (rev 257882)
@@ -210,9 +210,8 @@
     GetSourceForFrame(WebCore::FrameIdentifier frameID, WebKit::CallbackID callbackID)
     GetWebArchiveOfFrame(WebCore::FrameIdentifier frameID, WebKit::CallbackID callbackID)
 
-    // FIXME: These should use sendWithAsyncReply instead of callbackIDs
-    RunJavaScriptInMainFrameScriptWorld(struct WebCore::RunJavaScriptParameters parameters, std::pair<WebKit::ContentWorldIdentifier, String> world, WebKit::CallbackID callbackID)
-    RunJavaScriptInFrame(WebCore::FrameIdentifier frameID, String script, bool forceUserGesture, WebKit::CallbackID callbackID)
+    // FIXME: This should use sendWithAsyncReply instead of callbackIDs
+    RunJavaScriptInFrameInScriptWorld(struct WebCore::RunJavaScriptParameters parameters, Optional<WebCore::FrameIdentifier> frameID, std::pair<WebKit::ContentWorldIdentifier, String> world, WebKit::CallbackID callbackID)
 
     ForceRepaint(WebKit::CallbackID callbackID)
     SelectAll()

Modified: trunk/Tools/ChangeLog (257881 => 257882)


--- trunk/Tools/ChangeLog	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Tools/ChangeLog	2020-03-04 23:18:15 UTC (rev 257882)
@@ -1,3 +1,12 @@
+2020-03-04  Alex Christensen  <achristen...@webkit.org>
+
+        Add SPI to evaluate _javascript_ in an iframe
+        https://bugs.webkit.org/show_bug.cgi?id=208605
+
+        Reviewed by Brady Eidson.
+
+        * TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm:
+
 2020-03-03  Jiewen Tan  <jiewen_...@apple.com>
 
         [WebAuthn] Implement -[_WKWebAuthenticationPanelDelegate panel:decidePolicyForLocalAuthenticatorWithCompletionHandler:] SPI

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm (257881 => 257882)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm	2020-03-04 23:10:54 UTC (rev 257881)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/WKURLSchemeHandler-1.mm	2020-03-04 23:18:15 UTC (rev 257882)
@@ -1080,7 +1080,12 @@
         EXPECT_NE(child._handle.frameID, grandchild2._handle.frameID);
         EXPECT_NE(grandchild1._handle.frameID, grandchild2._handle.frameID);
 
-        done = true;
+        [webView _callAsyncJavaScript:@"window.customProperty = 'customValue'" arguments:nil inFrame:grandchild1 inContentWorld:[WKContentWorld defaultClientWorld] completionHandler:^(id, NSError *error) {
+            [webView _evaluateJavaScript:@"window.location.href + window.customProperty" inFrame:grandchild1 inContentWorld:[WKContentWorld defaultClientWorld] completionHandler:^(id result, NSError *error) {
+                EXPECT_WK_STREQ(result, "frame://host3/customValue");
+                done = true;
+            }];
+        }];
     }];
     TestWebKitAPI::Util::run(&done);
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to