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);
}