Changeset 268074 in webkit
- Timestamp:
- Oct 6, 2020 2:21:44 PM (4 years ago)
- Location:
- trunk/Source/WebKit
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebKit/ChangeLog
r268072 r268074 1 2020-10-06 Alex Christensen <achristensen@webkit.org> 2 3 Use sendWithAsyncReply to evaluate JavaScript in a WebPage 4 https://bugs.webkit.org/show_bug.cgi?id=217351 5 6 Reviewed by Youenn Fablet. 7 8 No change in meaningful behavior, but complexity is removed. 9 10 * UIProcess/API/C/WKPage.cpp: 11 (WKPageRunJavaScriptInMainFrame): 12 * UIProcess/API/Cocoa/WKWebView.mm: 13 (-[WKWebView _evaluateJavaScript:asAsyncFunction:withSourceURL:withArguments:forceUserGesture:inFrame:inWorld:completionHandler:]): 14 (-[WKWebView takeSnapshotWithConfiguration:completionHandler:]): 15 * UIProcess/WebPageProxy.cpp: 16 (WebKit::WebPageProxy::runJavaScriptInMainFrame): 17 (WebKit::WebPageProxy::runJavaScriptInFrameInScriptWorld): 18 (WebKit::WebPageProxy::scriptValueCallback): Deleted. 19 * UIProcess/WebPageProxy.h: 20 * UIProcess/WebPageProxy.messages.in: 21 * WebProcess/WebPage/WebPage.cpp: 22 (WebKit::WebPage::runJavaScript): 23 (WebKit::WebPage::runJavaScriptInFrameInScriptWorld): 24 * WebProcess/WebPage/WebPage.h: 25 * WebProcess/WebPage/WebPage.messages.in: 26 1 27 2020-10-06 Per Arne Vollan <pvollan@apple.com> 2 28 -
trunk/Source/WebKit/UIProcess/API/C/WKPage.cpp
r267966 r268074 2490 2490 void WKPageRunJavaScriptInMainFrame(WKPageRef pageRef, WKStringRef scriptRef, void* context, WKPageRunJavaScriptFunction callback) 2491 2491 { 2492 toImpl(pageRef)->runJavaScriptInMainFrame({ toImpl(scriptRef)->string(), URL { }, false, WTF::nullopt, true }, [context, callback](API::SerializedScriptValue* returnValue, Optional<WebCore::ExceptionDetails>, CallbackBase::Error error) { 2493 callback(toAPI(returnValue), (error != CallbackBase::Error::None) ? toAPI(API::Error::create().ptr()) : 0, context); 2492 toImpl(pageRef)->runJavaScriptInMainFrame({ toImpl(scriptRef)->string(), URL { }, false, WTF::nullopt, true }, [context, callback] (auto&& result) { 2493 if (result.has_value()) 2494 callback(toAPI(result.value().get()), nullptr, context); 2495 else 2496 callback(nullptr, nullptr, context); 2494 2497 }); 2495 2498 } -
trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
r267966 r268074 797 797 } 798 798 799 #if USE(APPKIT) 799 800 static WKErrorCode callbackErrorCode(WebKit::CallbackBase::Error error) 800 801 { … … 814 815 } 815 816 } 817 #endif 816 818 817 819 - (void)evaluateJavaScript:(NSString *)javaScriptString completionHandler:(void (^)(id, NSError *))completionHandler … … 933 935 } 934 936 935 _page->runJavaScriptInFrameInScriptWorld({ javaScriptString, sourceURL, !!asAsyncFunction, WTFMove(argumentsMap), !!forceUserGesture }, frameID, *world->_contentWorld.get(), [handler] (API::SerializedScriptValue* serializedScriptValue, Optional<WebCore::ExceptionDetails> details, WebKit::ScriptValueCallback::Error errorCode) {937 _page->runJavaScriptInFrameInScriptWorld({ javaScriptString, sourceURL, !!asAsyncFunction, WTFMove(argumentsMap), !!forceUserGesture }, frameID, *world->_contentWorld.get(), [handler] (auto&& result) { 936 938 if (!handler) 937 939 return; 938 940 939 if (errorCode != WebKit::ScriptValueCallback::Error::None) { 940 auto error = createNSError(callbackErrorCode(errorCode)); 941 if (errorCode == WebKit::ScriptValueCallback::Error::OwnerWasInvalidated) { 942 // The OwnerWasInvalidated callback is synchronous. We don't want to call the block from within it 943 // because that can trigger re-entrancy bugs in WebKit. 944 // FIXME: It would be even better if GenericCallback did this for us. 945 dispatch_async(dispatch_get_main_queue(), [handler, error] { 946 auto rawHandler = (void (^)(id, NSError *))handler.get(); 947 rawHandler(nil, error.get()); 948 }); 949 return; 950 } 951 952 auto rawHandler = (void (^)(id, NSError *))handler.get(); 953 rawHandler(nil, error.get()); 941 auto rawHandler = (void (^)(id, NSError *))handler.get(); 942 if (!result.has_value()) { 943 rawHandler(nil, nsErrorFromExceptionDetails(result.error()).get()); 954 944 return; 955 945 } 956 946 957 auto rawHandler = (void (^)(id, NSError *))handler.get(); 958 if (details) { 959 ASSERT(!serializedScriptValue); 960 rawHandler(nil, nsErrorFromExceptionDetails(*details).get()); 961 return; 962 } 963 964 if (!serializedScriptValue) { 947 if (!result.value()) { 965 948 rawHandler(nil, createNSError(WKErrorJavaScriptResultTypeIsUnsupported).get()); 966 949 return; 967 950 } 968 951 969 id body = API::SerializedScriptValue::deserialize( serializedScriptValue->internalRepresentation(), 0);952 id body = API::SerializedScriptValue::deserialize(result.value()->internalRepresentation(), 0); 970 953 rawHandler(body, nil); 971 954 }); … … 997 980 // in snapshotConfiguration.afterScreenUpdates at that time. 998 981 _page->takeSnapshot(WebCore::enclosingIntRect(rectInViewCoordinates), bitmapSize, WebKit::SnapshotOptionsInViewCoordinates, [handler, snapshotWidth, imageHeight](const WebKit::ShareableBitmap::Handle& imageHandle, WebKit::CallbackBase::Error errorCode) { 999 if (errorCode != WebKit:: ScriptValueCallback::Error::None) {982 if (errorCode != WebKit::CallbackBase::Error::None) { 1000 983 auto error = createNSError(callbackErrorCode(errorCode)); 1001 984 handler(nil, error.get()); -
trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp
r267763 r268074 3786 3786 GRefPtr<GTask> task = adoptGRef(g_task_new(webView, cancellable, callback, userData)); 3787 3787 3788 getPage(webView).runJavaScriptInMainFrame(WTFMove(params), [task = WTFMove(task)](API::SerializedScriptValue* serializedScriptValue, Optional<ExceptionDetails> details, WebKit::CallbackBase::Error) { 3788 getPage(webView).runJavaScriptInMainFrame(WTFMove(params), [task = WTFMove(task)] (auto&& result) { 3789 RefPtr<API::SerializedScriptValue> serializedScriptValue; 3789 3790 ExceptionDetails exceptionDetails; 3790 if (details) 3791 exceptionDetails = *details; 3792 webkitWebViewRunJavaScriptCallback(serializedScriptValue, exceptionDetails, task.get()); 3791 if (result.has_value()) 3792 serializedScriptValue = WTFMove(result.value()); 3793 else 3794 exceptionDetails = WTFMove(result.error()); 3795 webkitWebViewRunJavaScriptCallback(serializedScriptValue.get(), exceptionDetails, task.get()); 3793 3796 }); 3794 3797 } … … 3920 3923 GRefPtr<GTask> task = adoptGRef(g_task_new(webView, cancellable, callback, userData)); 3921 3924 auto world = API::ContentWorld::sharedWorldWithName(String::fromUTF8(worldName)); 3922 getPage(webView).runJavaScriptInFrameInScriptWorld({ String::fromUTF8(script), URL { }, false, WTF::nullopt, true }, WTF::nullopt, world.get(), [task = WTFMove(task)](API::SerializedScriptValue* serializedScriptValue, Optional<ExceptionDetails> details, WebKit::CallbackBase::Error) { 3925 getPage(webView).runJavaScriptInFrameInScriptWorld({ String::fromUTF8(script), URL { }, false, WTF::nullopt, true }, WTF::nullopt, world.get(), [task = WTFMove(task)] (auto&& result) { 3926 RefPtr<API::SerializedScriptValue> serializedScriptValue; 3923 3927 ExceptionDetails exceptionDetails; 3924 if (details) 3925 exceptionDetails = *details; 3926 webkitWebViewRunJavaScriptCallback(serializedScriptValue, exceptionDetails, task.get()); 3928 if (result.has_value()) 3929 serializedScriptValue = WTFMove(result.value()); 3930 else 3931 exceptionDetails = WTFMove(result.error()); 3932 webkitWebViewRunJavaScriptCallback(serializedScriptValue.get(), exceptionDetails, task.get()); 3927 3933 }); 3928 3934 } … … 3963 3969 gpointer outputStreamData = g_memory_output_stream_get_data(G_MEMORY_OUTPUT_STREAM(object)); 3964 3970 getPage(webView).runJavaScriptInMainFrame({ String::fromUTF8(reinterpret_cast<const gchar*>(outputStreamData)), URL { }, false, WTF::nullopt, true }, 3965 [task](API::SerializedScriptValue* serializedScriptValue, Optional<ExceptionDetails> details, WebKit::CallbackBase::Error) { 3971 [task] (auto&& result) { 3972 RefPtr<API::SerializedScriptValue> serializedScriptValue; 3966 3973 ExceptionDetails exceptionDetails; 3967 if (details) 3968 exceptionDetails = *details; 3969 webkitWebViewRunJavaScriptCallback(serializedScriptValue, exceptionDetails, task.get()); 3974 if (result.has_value()) 3975 serializedScriptValue = WTFMove(result.value()); 3976 else 3977 exceptionDetails = WTFMove(result.error()); 3978 webkitWebViewRunJavaScriptCallback(serializedScriptValue.get(), exceptionDetails, task.get()); 3970 3979 }); 3971 3980 } -
trunk/Source/WebKit/UIProcess/Inspector/socket/RemoteInspectorProtocolHandler.cpp
r262302 r268074 122 122 { 123 123 m_page.runJavaScriptInMainFrame({ script, URL { }, false, WTF::nullopt, false }, 124 [] (API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails> exceptionDetails, CallbackBase::Error) {125 if (exceptionDetails)126 LOG_ERROR("Exception running script \"%s\"", exceptionDetails->message.utf8().data());124 [] (auto&& result) { 125 if (!result.has_value()) 126 LOG_ERROR("Exception running script \"%s\"", result.error().message.utf8().data()); 127 127 }); 128 128 } -
trunk/Source/WebKit/UIProcess/WebPageProxy.cpp
r268017 r268074 4082 4082 } 4083 4083 4084 void WebPageProxy::runJavaScriptInMainFrame(RunJavaScriptParameters&& parameters, WTF::Function<void (API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&& callbackFunction)4084 void WebPageProxy::runJavaScriptInMainFrame(RunJavaScriptParameters&& parameters, CompletionHandler<void(Expected<RefPtr<API::SerializedScriptValue>, WebCore::ExceptionDetails>&&)>&& callbackFunction) 4085 4085 { 4086 4086 runJavaScriptInFrameInScriptWorld(WTFMove(parameters), WTF::nullopt, API::ContentWorld::pageContentWorld(), WTFMove(callbackFunction)); 4087 4087 } 4088 4088 4089 void WebPageProxy::runJavaScriptInFrameInScriptWorld(RunJavaScriptParameters&& parameters, Optional<WebCore::FrameIdentifier> frameID, API::ContentWorld& world, WTF::Function<void(API::SerializedScriptValue*, Optional<ExceptionDetails>, CallbackBase::Error)>&& callbackFunction)4089 void WebPageProxy::runJavaScriptInFrameInScriptWorld(RunJavaScriptParameters&& parameters, Optional<WebCore::FrameIdentifier> frameID, API::ContentWorld& world, CompletionHandler<void(Expected<RefPtr<API::SerializedScriptValue>, WebCore::ExceptionDetails>&&)>&& callbackFunction) 4090 4090 { 4091 4091 // For backward-compatibility support running script in a WebView which has not done any loads yets. 4092 4092 launchInitialProcessIfNecessary(); 4093 4093 4094 if (!hasRunningProcess()) { 4095 callbackFunction(nullptr, { }, CallbackBase::Error::Unknown); 4096 return; 4097 } 4094 if (!hasRunningProcess()) 4095 return callbackFunction({ nullptr }); 4098 4096 4099 4097 ProcessThrottler::ActivityVariant activity; … … 4101 4099 if (pageClient().canTakeForegroundAssertions()) 4102 4100 activity = m_process->throttler().foregroundActivity("WebPageProxy::runJavaScriptInFrameInScriptWorld"_s); 4103 else 4104 #endif 4105 activity = m_process->throttler().backgroundActivity("WebPageProxy::runJavaScriptInFrameInScriptWorld"_s); 4106 4107 auto callbackID = m_callbacks.put(WTFMove(callbackFunction), WTFMove(activity)); 4108 send(Messages::WebPage::RunJavaScriptInFrameInScriptWorld(parameters, frameID, world.worldData(), callbackID)); 4101 #endif 4102 4103 sendWithAsyncReply(Messages::WebPage::RunJavaScriptInFrameInScriptWorld(parameters, frameID, world.worldData()), [activity = WTFMove(activity), callbackFunction = WTFMove(callbackFunction)] (const IPC::DataReference& dataReference, Optional<ExceptionDetails>&& details) mutable { 4104 if (details) 4105 return callbackFunction(makeUnexpected(WTFMove(*details))); 4106 if (dataReference.isEmpty()) 4107 return callbackFunction({ nullptr }); 4108 Vector<uint8_t> data; 4109 data.reserveInitialCapacity(dataReference.size()); 4110 data.append(dataReference.data(), dataReference.size()); 4111 callbackFunction({ API::SerializedScriptValue::adopt(WTFMove(data)).ptr() }); 4112 }); 4109 4113 } 4110 4114 … … 7159 7163 7160 7164 callback->invalidate(); 7161 }7162 7163 void WebPageProxy::scriptValueCallback(const IPC::DataReference& dataReference, Optional<ExceptionDetails> details, CallbackID callbackID)7164 {7165 auto callback = m_callbacks.take<ScriptValueCallback>(callbackID);7166 if (!callback) {7167 // FIXME: Log error or assert.7168 return;7169 }7170 7171 if (dataReference.isEmpty()) {7172 callback->performCallbackWithReturnValue(nullptr, details);7173 return;7174 }7175 7176 Vector<uint8_t> data;7177 data.reserveInitialCapacity(dataReference.size());7178 data.append(dataReference.data(), dataReference.size());7179 7180 callback->performCallbackWithReturnValue(API::SerializedScriptValue::adopt(WTFMove(data)).ptr(), details);7181 7165 } 7182 7166 -
trunk/Source/WebKit/UIProcess/WebPageProxy.h
r267899 r268074 366 366 typedef GenericCallback<uint64_t> UnsignedCallback; 367 367 typedef GenericCallback<const String&> StringCallback; 368 typedef GenericCallback<API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>> ScriptValueCallback;369 368 typedef GenericCallback<const WebCore::FontAttributes&> FontAttributesCallback; 370 369 typedef GenericCallback<const String&, const String&, const String&> SelectionContextCallback; … … 1141 1140 void getSourceForFrame(WebFrameProxy*, WTF::Function<void (const String&, CallbackBase::Error)>&&); 1142 1141 void getWebArchiveOfFrame(WebFrameProxy*, Function<void (API::Data*, CallbackBase::Error)>&&); 1143 void runJavaScriptInMainFrame(WebCore::RunJavaScriptParameters&&, WTF::Function<void (API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&& callbackFunction);1144 void runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters&&, Optional<WebCore::FrameIdentifier>, API::ContentWorld&, Function<void(API::SerializedScriptValue*, Optional<WebCore::ExceptionDetails>, CallbackBase::Error)>&&);1142 void runJavaScriptInMainFrame(WebCore::RunJavaScriptParameters&&, CompletionHandler<void(Expected<RefPtr<API::SerializedScriptValue>, WebCore::ExceptionDetails>&&)>&&); 1143 void runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters&&, Optional<WebCore::FrameIdentifier>, API::ContentWorld&, CompletionHandler<void(Expected<RefPtr<API::SerializedScriptValue>, WebCore::ExceptionDetails>&&)>&&); 1145 1144 void forceRepaint(RefPtr<VoidCallback>&&); 1146 1145 … … 2131 2130 void stringCallback(const String&, CallbackID); 2132 2131 void invalidateStringCallback(CallbackID); 2133 void scriptValueCallback(const IPC::DataReference&, Optional<WebCore::ExceptionDetails>, CallbackID);2134 2132 void computedPagesCallback(const Vector<WebCore::IntRect>&, double totalScaleFactorForPrinting, const WebCore::FloatBoxExtent& computedPageMargin, CallbackID); 2135 2133 void validateCommandCallback(const String&, bool, int, CallbackID); -
trunk/Source/WebKit/UIProcess/WebPageProxy.messages.in
r267885 r268074 168 168 BoolCallback(bool result, WebKit::CallbackID callbackID) 169 169 InvalidateStringCallback(WebKit::CallbackID callbackID) 170 ScriptValueCallback(IPC::DataReference resultData, Optional<WebCore::ExceptionDetails> details, WebKit::CallbackID callbackID)171 170 ComputedPagesCallback(Vector<WebCore::IntRect> pageRects, double totalScaleFactorForPrinting, WebCore::RectEdges<float> computedPageMargin, WebKit::CallbackID callbackID) 172 171 ValidateCommandCallback(String command, bool isEnabled, int32_t state, WebKit::CallbackID callbackID) -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp
r268014 r268074 3464 3464 } 3465 3465 3466 void WebPage::runJavaScript(WebFrame* frame, RunJavaScriptParameters&& parameters, ContentWorldIdentifier worldIdentifier, C allbackID callbackID)3466 void WebPage::runJavaScript(WebFrame* frame, RunJavaScriptParameters&& parameters, ContentWorldIdentifier worldIdentifier, CompletionHandler<void(const IPC::DataReference&, const Optional<WebCore::ExceptionDetails>&)>&& completionHandler) 3467 3467 { 3468 3468 // NOTE: We need to be careful when running scripts that the objects we depend on don't … … 3470 3470 3471 3471 if (!frame || !frame->coreFrame()) { 3472 send(Messages::WebPageProxy::ScriptValueCallback({ }, ExceptionDetails { "Unable to execute JavaScript: Target frame could not be found in the page"_s, 0, 0, ExceptionDetails::Type::InvalidTargetFrame }, callbackID));3472 completionHandler({ }, ExceptionDetails { "Unable to execute JavaScript: Target frame could not be found in the page"_s, 0, 0, ExceptionDetails::Type::InvalidTargetFrame }); 3473 3473 return; 3474 3474 } … … 3476 3476 auto* world = m_userContentController->worldForIdentifier(worldIdentifier); 3477 3477 if (!world) { 3478 send(Messages::WebPageProxy::ScriptValueCallback({ }, ExceptionDetails { "Unable to execute JavaScript: Cannot find specified content world"_s }, callbackID)); 3479 return; 3480 } 3481 3482 auto resolveFunction = [protectedThis = makeRef(*this), this, world = makeRef(*world), frame = makeRef(*frame), callbackID](ValueOrException result) { 3478 completionHandler({ }, ExceptionDetails { "Unable to execute JavaScript: Cannot find specified content world"_s }); 3479 return; 3480 } 3481 3482 #if ENABLE(APP_BOUND_DOMAINS) 3483 if (frame->shouldEnableInAppBrowserPrivacyProtections()) { 3484 completionHandler({ }, ExceptionDetails { "Unable to execute JavaScript in a frame that is not in an app-bound domain"_s, 0, 0, ExceptionDetails::Type::AppBoundDomain }); 3485 if (auto* document = m_page->mainFrame().document()) 3486 document->addConsoleMessage(MessageSource::Security, MessageLevel::Warning, "Ignoring user script injection for non-app bound domain."); 3487 RELEASE_LOG_ERROR_IF_ALLOWED(Loading, "runJavaScript: Ignoring user script injection for non app-bound domain"); 3488 return; 3489 } 3490 #endif 3491 3492 auto resolveFunction = [world = makeRef(*world), frame = makeRef(*frame), completionHandler = WTFMove(completionHandler)] (ValueOrException result) mutable { 3483 3493 RefPtr<SerializedScriptValue> serializedResultValue; 3484 3494 if (result) { … … 3495 3505 details = result.error(); 3496 3506 3497 send(Messages::WebPageProxy::ScriptValueCallback(dataReference, details, callbackID));3507 completionHandler(dataReference, details); 3498 3508 }; 3499 #if ENABLE(APP_BOUND_DOMAINS)3500 if (frame->shouldEnableInAppBrowserPrivacyProtections()) {3501 send(Messages::WebPageProxy::ScriptValueCallback({ }, ExceptionDetails { "Unable to execute JavaScript in a frame that is not in an app-bound domain"_s, 0, 0, ExceptionDetails::Type::AppBoundDomain }, callbackID));3502 if (auto* document = m_page->mainFrame().document())3503 document->addConsoleMessage(MessageSource::Security, MessageLevel::Warning, "Ignoring user script injection for non-app bound domain.");3504 RELEASE_LOG_ERROR_IF_ALLOWED(Loading, "runJavaScript: Ignoring user script injection for non app-bound domain");3505 return;3506 }3507 #endif3508 3509 JSLockHolder lock(commonVM()); 3509 3510 frame->coreFrame()->script().executeAsynchronousUserAgentScriptInWorld(world->coreWorld(), WTFMove(parameters), WTFMove(resolveFunction)); 3510 3511 } 3511 3512 3512 void WebPage::runJavaScriptInFrameInScriptWorld(RunJavaScriptParameters&& parameters, Optional<WebCore::FrameIdentifier> frameID, const std::pair<ContentWorldIdentifier, String>& worldData, C allbackID callbackID)3513 void WebPage::runJavaScriptInFrameInScriptWorld(RunJavaScriptParameters&& parameters, Optional<WebCore::FrameIdentifier> frameID, const std::pair<ContentWorldIdentifier, String>& worldData, CompletionHandler<void(const IPC::DataReference&, const Optional<WebCore::ExceptionDetails>&)>&& completionHandler) 3513 3514 { 3514 3515 auto* webFrame = frameID ? WebProcess::singleton().webFrame(*frameID) : &mainWebFrame(); … … 3520 3521 } 3521 3522 3522 runJavaScript(webFrame, WTFMove(parameters), worldData.first, callbackID);3523 runJavaScript(webFrame, WTFMove(parameters), worldData.first, WTFMove(completionHandler)); 3523 3524 } 3524 3525 -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.h
r268017 r268074 1549 1549 void getSourceForFrame(WebCore::FrameIdentifier, CallbackID); 1550 1550 void getWebArchiveOfFrame(WebCore::FrameIdentifier, CallbackID); 1551 void runJavaScript(WebFrame*, WebCore::RunJavaScriptParameters&&, ContentWorldIdentifier, C allbackID);1552 void runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters&&, Optional<WebCore::FrameIdentifier>, const std::pair<ContentWorldIdentifier, String>& worldData, C allbackID);1551 void runJavaScript(WebFrame*, WebCore::RunJavaScriptParameters&&, ContentWorldIdentifier, CompletionHandler<void(const IPC::DataReference&, const Optional<WebCore::ExceptionDetails>&)>&&); 1552 void runJavaScriptInFrameInScriptWorld(WebCore::RunJavaScriptParameters&&, Optional<WebCore::FrameIdentifier>, const std::pair<ContentWorldIdentifier, String>& worldData, CompletionHandler<void(const IPC::DataReference&, const Optional<WebCore::ExceptionDetails>&)>&&); 1553 1553 void forceRepaint(CallbackID); 1554 1554 void takeSnapshot(WebCore::IntRect snapshotRect, WebCore::IntSize bitmapSize, uint32_t options, CallbackID); -
trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in
r267885 r268074 221 221 GetWebArchiveOfFrame(WebCore::FrameIdentifier frameID, WebKit::CallbackID callbackID) 222 222 223 // FIXME: This should use sendWithAsyncReply instead of callbackIDs 224 RunJavaScriptInFrameInScriptWorld(struct WebCore::RunJavaScriptParameters parameters, Optional<WebCore::FrameIdentifier> frameID, std::pair<WebKit::ContentWorldIdentifier, String> world, WebKit::CallbackID callbackID) 223 RunJavaScriptInFrameInScriptWorld(struct WebCore::RunJavaScriptParameters parameters, Optional<WebCore::FrameIdentifier> frameID, std::pair<WebKit::ContentWorldIdentifier, String> world) -> (IPC::DataReference resultData, Optional<WebCore::ExceptionDetails> details) Async 225 224 226 225 ForceRepaint(WebKit::CallbackID callbackID)
Note: See TracChangeset
for help on using the changeset viewer.