Diff
Modified: trunk/Source/WebKit/ChangeLog (244147 => 244148)
--- trunk/Source/WebKit/ChangeLog 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/ChangeLog 2019-04-10 20:49:23 UTC (rev 244148)
@@ -1,3 +1,33 @@
+2019-04-10 Jiewen Tan <jiewen_...@apple.com>
+
+ Add runJavaScriptInFrame for WebPageProxy/WebPage
+ https://bugs.webkit.org/show_bug.cgi?id=196750
+ <rdar://problem/49755738>
+
+ Reviewed by Youenn Fablet.
+
+ Tests of the new method will be covered by the internal counterpart.
+
+ * UIProcess/WebFrameProxy.cpp:
+ (WebKit::WebFrameProxy::loadData):
+ * UIProcess/WebFrameProxy.h:
+ Add a comment.
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::runJavaScriptInMainFrame):
+ (WebKit::WebPageProxy::runJavaScriptInMainFrameScriptWorld):
+ Merge the above two runJavaScriptInMainFrame*.
+ (WebKit::WebPageProxy::runJavaScriptInFrame):
+ * UIProcess/WebPageProxy.h:
+ * WebProcess/WebPage/WebPage.cpp:
+ (WebKit::WebPage::loadDataInFrame):
+ Add an assertion.
+ (WebKit::WebPage::runJavaScript):
+ (WebKit::WebPage::runJavaScriptInMainFrameScriptWorld):
+ (WebKit::WebPage::runJavaScriptInFrame):
+ (WebKit::WebPage::runJavaScriptInMainFrame): Deleted.
+ * WebProcess/WebPage/WebPage.h:
+ * WebProcess/WebPage/WebPage.messages.in:
+
2019-04-10 Chris Dumez <cdu...@apple.com>
Unable to run system Safari with trunk WebKit
Modified: trunk/Source/WebKit/UIProcess/WebFrameProxy.cpp (244147 => 244148)
--- trunk/Source/WebKit/UIProcess/WebFrameProxy.cpp 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/UIProcess/WebFrameProxy.cpp 2019-04-10 20:49:23 UTC (rev 244148)
@@ -88,6 +88,7 @@
void WebFrameProxy::loadData(const IPC::DataReference& data, const String& MIMEType, const String& encodingName, const URL& baseURL)
{
+ ASSERT(!isMainFrame());
if (!m_page)
return;
Modified: trunk/Source/WebKit/UIProcess/WebFrameProxy.h (244147 => 244148)
--- trunk/Source/WebKit/UIProcess/WebFrameProxy.h 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/UIProcess/WebFrameProxy.h 2019-04-10 20:49:23 UTC (rev 244148)
@@ -81,6 +81,7 @@
FrameLoadState& frameLoadState() { return m_frameLoadState; }
void loadURL(const URL&);
+ // Sub frames only. For main frames, use WebPageProxy::loadData.
void loadData(const IPC::DataReference&, const String& MIMEType, const String& encodingName, const URL& baseURL);
void stopLoading() const;
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.cpp (244147 => 244148)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.cpp 2019-04-10 20:49:23 UTC (rev 244148)
@@ -3550,19 +3550,10 @@
void WebPageProxy::runJavaScriptInMainFrame(const String& script, bool forceUserGesture, WTF::Function<void (API::SerializedScriptValue*, bool hadException, const ExceptionDetails&, CallbackBase::Error)>&& callbackFunction)
{
- // For backward-compatibility support running script in a WebView which has not done any loads yets.
- launchInitialProcessIfNecessary();
-
- if (!hasRunningProcess()) {
- callbackFunction(nullptr, false, { }, CallbackBase::Error::Unknown);
- return;
- }
-
- auto callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process->throttler().backgroundActivityToken());
- m_process->send(Messages::WebPage::RunJavaScriptInMainFrame(script, forceUserGesture, callbackID), m_pageID);
+ runJavaScriptInMainFrameScriptWorld(script, forceUserGesture, WTF::nullopt, WTFMove(callbackFunction));
}
-void WebPageProxy::runJavaScriptInMainFrameScriptWorld(const String& script, bool forceUserGesture, const String& worldName, WTF::Function<void(API::SerializedScriptValue*, bool hadException, const ExceptionDetails&, CallbackBase::Error)>&& callbackFunction)
+void WebPageProxy::runJavaScriptInMainFrameScriptWorld(const String& script, bool forceUserGesture, const Optional<String>& worldName, WTF::Function<void(API::SerializedScriptValue*, bool hadException, const ExceptionDetails&, CallbackBase::Error)>&& callbackFunction)
{
// For backward-compatibility support running script in a WebView which has not done any loads yets.
launchInitialProcessIfNecessary();
@@ -3576,6 +3567,13 @@
m_process->send(Messages::WebPage::RunJavaScriptInMainFrameScriptWorld(script, forceUserGesture, worldName, callbackID), m_pageID);
}
+void WebPageProxy::runJavaScriptInFrame(uint64_t frameID, const String& script, bool forceUserGesture, WTF::Function<void(API::SerializedScriptValue*, bool hadException, const ExceptionDetails&, CallbackBase::Error)>&& callbackFunction)
+{
+ ASSERT(mainFrame()->frameID() != frameID);
+ auto callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process->throttler().backgroundActivityToken());
+ m_process->send(Messages::WebPage::RunJavaScriptInFrame(frameID, script, forceUserGesture, callbackID), m_pageID);
+}
+
void WebPageProxy::getRenderTreeExternalRepresentation(WTF::Function<void (const String&, CallbackBase::Error)>&& callbackFunction)
{
if (!hasRunningProcess()) {
Modified: trunk/Source/WebKit/UIProcess/WebPageProxy.h (244147 => 244148)
--- trunk/Source/WebKit/UIProcess/WebPageProxy.h 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/UIProcess/WebPageProxy.h 2019-04-10 20:49:23 UTC (rev 244148)
@@ -1001,7 +1001,9 @@
void getSourceForFrame(WebFrameProxy*, WTF::Function<void (const String&, CallbackBase::Error)>&&);
void getWebArchiveOfFrame(WebFrameProxy*, Function<void (API::Data*, CallbackBase::Error)>&&);
void runJavaScriptInMainFrame(const String&, bool, WTF::Function<void (API::SerializedScriptValue*, bool hadException, const WebCore::ExceptionDetails&, CallbackBase::Error)>&& callbackFunction);
- void runJavaScriptInMainFrameScriptWorld(const String&, bool, const String& worldName, WTF::Function<void(API::SerializedScriptValue*, bool hadException, const WebCore::ExceptionDetails&, CallbackBase::Error)>&& callbackFunction);
+ void runJavaScriptInMainFrameScriptWorld(const String&, bool, const Optional<String>& worldName, WTF::Function<void(API::SerializedScriptValue*, bool hadException, const WebCore::ExceptionDetails&, CallbackBase::Error)>&& callbackFunction);
+ // For sub frames.
+ void runJavaScriptInFrame(uint64_t frameID, const String& script, bool forceUserGesture, WTF::Function<void(API::SerializedScriptValue*, bool hadException, const WebCore::ExceptionDetails&, CallbackBase::Error)>&& callbackFunction);
void forceRepaint(RefPtr<VoidCallback>&&);
float headerHeight(WebFrameProxy&);
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp (244147 => 244148)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.cpp 2019-04-10 20:49:23 UTC (rev 244148)
@@ -1438,6 +1438,7 @@
WebFrame* frame = WebProcess::singleton().webFrame(frameID);
if (!frame)
return;
+ ASSERT(mainWebFrame() != frame);
auto sharedBuffer = SharedBuffer::create(reinterpret_cast<const char*>(data.data()), data.size());
ResourceResponse response(baseURL, MIMEType, sharedBuffer->size(), encodingName);
@@ -3286,7 +3287,7 @@
return static_cast<KeyboardUIMode>((fullKeyboardAccessEnabled ? KeyboardAccessFull : KeyboardAccessDefault) | (m_tabToLinks ? KeyboardAccessTabsToLinks : 0));
}
-void WebPage::runJavaScript(const String& script, bool forceUserGesture, Optional<String> worldName, CallbackID callbackID)
+void WebPage::runJavaScript(WebFrame* frame, const String& script, bool forceUserGesture, const Optional<String>& worldName, CallbackID callbackID)
{
// NOTE: We need to be careful when running scripts that the objects we depend on don't
// disappear during script execution.
@@ -3296,11 +3297,11 @@
bool hadException = true;
ExceptionDetails details;
auto* world = worldName ? InjectedBundleScriptWorld::find(worldName.value()) : &InjectedBundleScriptWorld::normalWorld();
- if (world) {
- if (JSValue resultValue = m_mainFrame->coreFrame()->script().executeUserAgentScriptInWorld(world->coreWorld(), script, forceUserGesture, &details)) {
+ if (frame && frame->coreFrame() && world) {
+ if (JSValue resultValue = frame->coreFrame()->script().executeUserAgentScriptInWorld(world->coreWorld(), script, forceUserGesture, &details)) {
hadException = false;
- serializedResultValue = SerializedScriptValue::create(m_mainFrame->jsContextForWorld(world),
- toRef(m_mainFrame->coreFrame()->script().globalObject(world->coreWorld())->globalExec(), resultValue), nullptr);
+ serializedResultValue = SerializedScriptValue::create(frame->jsContextForWorld(world),
+ toRef(frame->coreFrame()->script().globalObject(world->coreWorld())->globalExec(), resultValue), nullptr);
}
}
@@ -3310,14 +3311,16 @@
send(Messages::WebPageProxy::ScriptValueCallback(dataReference, hadException, details, callbackID));
}
-void WebPage::runJavaScriptInMainFrame(const String& script, bool forceUserGesture, CallbackID callbackID)
+void WebPage::runJavaScriptInMainFrameScriptWorld(const String& script, bool forceUserGesture, const Optional<String>& worldName, CallbackID callbackID)
{
- runJavaScript(script, forceUserGesture, WTF::nullopt, callbackID);
+ runJavaScript(mainWebFrame(), script, forceUserGesture, worldName, callbackID);
}
-void WebPage::runJavaScriptInMainFrameScriptWorld(const String& script, bool forceUserGesture, const String& worldName, CallbackID callbackID)
+void WebPage::runJavaScriptInFrame(uint64_t frameID, const String& script, bool forceUserGesture, CallbackID callbackID)
{
- runJavaScript(script, forceUserGesture, worldName, callbackID);
+ WebFrame* frame = WebProcess::singleton().webFrame(frameID);
+ ASSERT(mainWebFrame() != frame);
+ runJavaScript(frame, script, forceUserGesture, WTF::nullopt, callbackID);
}
void WebPage::getContentsAsString(CallbackID callbackID)
Modified: trunk/Source/WebKit/WebProcess/WebPage/WebPage.h (244147 => 244148)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.h 2019-04-10 20:49:23 UTC (rev 244148)
@@ -1345,9 +1345,9 @@
void getSelectionAsWebArchiveData(CallbackID);
void getSourceForFrame(uint64_t frameID, CallbackID);
void getWebArchiveOfFrame(uint64_t frameID, CallbackID);
- void runJavaScript(const String&, bool forceUserGesture, Optional<String> worldName, CallbackID);
- void runJavaScriptInMainFrame(const String&, bool forceUserGesture, CallbackID);
- void runJavaScriptInMainFrameScriptWorld(const String&, bool forceUserGesture, const String& worldName, CallbackID);
+ void runJavaScript(WebFrame*, const String&, bool forceUserGesture, const Optional<String>& worldName, CallbackID);
+ void runJavaScriptInMainFrameScriptWorld(const String&, bool forceUserGesture, const Optional<String>& worldName, CallbackID);
+ void runJavaScriptInFrame(uint64_t frameID, const String&, bool forceUserGesture, 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 (244147 => 244148)
--- trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2019-04-10 20:48:38 UTC (rev 244147)
+++ trunk/Source/WebKit/WebProcess/WebPage/WebPage.messages.in 2019-04-10 20:49:23 UTC (rev 244148)
@@ -197,8 +197,8 @@
GetSelectionAsWebArchiveData(WebKit::CallbackID callbackID)
GetSourceForFrame(uint64_t frameID, WebKit::CallbackID callbackID)
GetWebArchiveOfFrame(uint64_t frameID, WebKit::CallbackID callbackID)
- RunJavaScriptInMainFrame(String script, bool forceUserGesture, WebKit::CallbackID callbackID)
- RunJavaScriptInMainFrameScriptWorld(String script, bool forceUserGesture, String worldName, WebKit::CallbackID callbackID)
+ RunJavaScriptInMainFrameScriptWorld(String script, bool forceUserGesture, Optional<String> worldName, WebKit::CallbackID callbackID)
+ RunJavaScriptInFrame(uint64_t frameID, String script, bool forceUserGesture, WebKit::CallbackID callbackID)
ForceRepaint(WebKit::CallbackID callbackID)
#if PLATFORM(COCOA)