feat(webkit): Dialog.pageOpened

This commit is contained in:
Joel Einbinder 2019-12-06 14:52:27 -08:00
parent 14f078308d
commit 5814d5264c
2 changed files with 120 additions and 31 deletions

View file

@ -1 +1 @@
1015
1016

View file

@ -1,7 +1,7 @@
From ce5a6f85786584191480f777a95958c0ab151484 Mon Sep 17 00:00:00 2001
From: Pavel Feldman <pavel.feldman@gmail.com>
Date: Thu, 5 Dec 2019 17:54:56 -0800
Subject: [PATCH] chore: bootstrap
From 6923883815bdcda2f0ded5e4e24b2a014b07bfef Mon Sep 17 00:00:00 2001
From: Joel Einbinder <joel.einbinder@gmail.com>
Date: Fri, 6 Dec 2019 14:52:16 -0800
Subject: [PATCH xserver] chore: bootstrap
---
Source/JavaScriptCore/CMakeLists.txt | 4 +
@ -13,7 +13,7 @@ Subject: [PATCH] chore: bootstrap
.../inspector/agents/InspectorTargetAgent.h | 6 +-
.../inspector/protocol/Browser.json | 106 ++++
.../inspector/protocol/DOM.json | 39 ++
.../inspector/protocol/Dialog.json | 36 ++
.../inspector/protocol/Dialog.json | 43 ++
.../inspector/protocol/Emulation.json | 22 +
.../inspector/protocol/Input.json | 160 ++++++
.../inspector/protocol/Page.json | 97 +++-
@ -78,8 +78,8 @@ Subject: [PATCH] chore: bootstrap
.../UIProcess/InspectorBrowserAgent.cpp | 255 +++++++++
.../WebKit/UIProcess/InspectorBrowserAgent.h | 63 +++
.../UIProcess/InspectorBrowserAgentClient.h | 33 ++
.../WebKit/UIProcess/InspectorDialogAgent.cpp | 64 +++
.../WebKit/UIProcess/InspectorDialogAgent.h | 48 ++
.../WebKit/UIProcess/InspectorDialogAgent.cpp | 79 +++
.../WebKit/UIProcess/InspectorDialogAgent.h | 49 ++
.../WebKit/UIProcess/InspectorTargetProxy.cpp | 18 +-
.../WebKit/UIProcess/InspectorTargetProxy.h | 11 +-
.../WebKit/UIProcess/RemoteInspectorPipe.cpp | 132 +++++
@ -94,8 +94,8 @@ Subject: [PATCH] chore: bootstrap
.../UIProcess/WebPageInspectorInputAgent.h | 54 ++
.../UIProcess/WebPageInspectorTargetProxy.cpp | 109 ++++
.../UIProcess/WebPageInspectorTargetProxy.h | 45 ++
Source/WebKit/UIProcess/WebPageProxy.cpp | 20 +-
Source/WebKit/UIProcess/WebPageProxy.h | 13 +
Source/WebKit/UIProcess/WebPageProxy.cpp | 47 +-
Source/WebKit/UIProcess/WebPageProxy.h | 16 +
.../glib/InspectorBrowserAgentClientGLib.cpp | 103 ++++
.../glib/InspectorBrowserAgentClientGLib.h | 36 ++
.../gtk/WebPageInspectorEmulationAgentGtk.cpp | 35 ++
@ -123,7 +123,7 @@ Subject: [PATCH] chore: bootstrap
.../mac/WK2BrowserWindowController.h | 3 +
.../mac/WK2BrowserWindowController.m | 37 +-
Tools/MiniBrowser/wpe/main.cpp | 37 ++
119 files changed, 4715 insertions(+), 77 deletions(-)
119 files changed, 4767 insertions(+), 78 deletions(-)
create mode 100644 Source/JavaScriptCore/inspector/protocol/Browser.json
create mode 100644 Source/JavaScriptCore/inspector/protocol/Dialog.json
create mode 100644 Source/JavaScriptCore/inspector/protocol/Emulation.json
@ -654,10 +654,10 @@ index 38cb48bedf2..c8da2a4f10f 100644
"events": [
diff --git a/Source/JavaScriptCore/inspector/protocol/Dialog.json b/Source/JavaScriptCore/inspector/protocol/Dialog.json
new file mode 100644
index 00000000000..79edea03fed
index 00000000000..56ba4b7b214
--- /dev/null
+++ b/Source/JavaScriptCore/inspector/protocol/Dialog.json
@@ -0,0 +1,36 @@
@@ -0,0 +1,43 @@
+{
+ "domain": "Dialog",
+ "description": "Actions and events related to alert boxes.",
@ -691,6 +691,13 @@ index 00000000000..79edea03fed
+ { "name": "message", "type": "string", "description": "Message that will be displayed by the dialog."},
+ { "name": "defaultPrompt", "optional": true, "type": "string", "description": "Default dialog prompt."}
+ ]
+ },
+ {
+ "name": "pageOpened",
+ "description": "Fired when the page causes a new page to be opened.",
+ "parameters": [
+ { "name": "targetId", "type": "string", "description": "ID of the page that was opened."}
+ ]
+ }
+ ]
+}
@ -4396,10 +4403,10 @@ index 00000000000..866db590d59
+#endif // ENABLE(REMOTE_INSPECTOR)
diff --git a/Source/WebKit/UIProcess/InspectorDialogAgent.cpp b/Source/WebKit/UIProcess/InspectorDialogAgent.cpp
new file mode 100644
index 00000000000..121b5969d4a
index 00000000000..d9b25e10843
--- /dev/null
+++ b/Source/WebKit/UIProcess/InspectorDialogAgent.cpp
@@ -0,0 +1,64 @@
@@ -0,0 +1,79 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+
@ -4409,6 +4416,7 @@ index 00000000000..121b5969d4a
+#include "APINavigation.h"
+#include "APIUIClient.h"
+#include "WebPageProxy.h"
+#include "WebProcessPool.h"
+#include <JavaScriptCore/InspectorFrontendRouter.h>
+
+
@ -4445,6 +4453,14 @@ index 00000000000..121b5969d4a
+ return;
+ }
+ m_page.setInspectorDialogAgent(this);
+ for (auto* pool : WebProcessPool::allProcessPools()) {
+ for (auto& process : pool->processes()) {
+ for (auto* page : process->pages()) {
+ if (page->openerPageID() == m_page.webPageID())
+ pageOpened(page);
+ }
+ }
+ }
+}
+
+void InspectorDialogAgent::disable(Inspector::ErrorString&)
@ -4463,13 +4479,19 @@ index 00000000000..121b5969d4a
+ m_frontendDispatcher->javascriptDialogOpening(type, message, defaultValue);
+}
+
+void InspectorDialogAgent::pageOpened(WebPageProxy* page) {
+ WebCore::PageIdentifier identifier = page->webPageID();
+ String targetId = WebPageInspectorTarget::toTargetID(identifier);
+ m_frontendDispatcher->pageOpened(targetId);
+}
+
+} // namespace WebKit
diff --git a/Source/WebKit/UIProcess/InspectorDialogAgent.h b/Source/WebKit/UIProcess/InspectorDialogAgent.h
new file mode 100644
index 00000000000..203c203a0e2
index 00000000000..0214cb0c9c2
--- /dev/null
+++ b/Source/WebKit/UIProcess/InspectorDialogAgent.h
@@ -0,0 +1,48 @@
@@ -0,0 +1,49 @@
+// Copyright (c) Microsoft Corporation.
+// Licensed under the MIT license.
+
@ -4509,6 +4531,7 @@ index 00000000000..203c203a0e2
+ void handleJavaScriptDialog(Inspector::ErrorString& errorString, bool accept, const String* promptText) override;
+
+ void javascriptDialogOpening(const String& type, const String& message, const String* defaultValue = nullptr);
+ void pageOpened(WebPageProxy* page);
+
+private:
+ void platformHandleJavaScriptDialog(bool accept, const String* promptText);
@ -5536,7 +5559,7 @@ index 00000000000..0655b5ea376
+
+} // namespace WebKit
diff --git a/Source/WebKit/UIProcess/WebPageProxy.cpp b/Source/WebKit/UIProcess/WebPageProxy.cpp
index 35cd3ac33fc..05f3cc29314 100644
index 35cd3ac33fc..8c207045a18 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.cpp
+++ b/Source/WebKit/UIProcess/WebPageProxy.cpp
@@ -868,6 +868,7 @@ void WebPageProxy::finishAttachingToWebProcess(ProcessLaunchReason reason)
@ -5547,7 +5570,37 @@ index 35cd3ac33fc..05f3cc29314 100644
}
void WebPageProxy::didAttachToRunningProcess()
@@ -1623,6 +1624,11 @@ void WebPageProxy::setControlledByAutomation(bool controlled)
@@ -1086,6 +1087,29 @@ bool WebPageProxy::tryClose()
return false;
}
+WebPageProxy* webPageForId(WebCore::PageIdentifier pageId) {
+ for (auto* pool : WebProcessPool::allProcessPools()) {
+ for (auto& process : pool->processes()) {
+ for (auto* page : process->pages()) {
+ if (page->webPageID() == pageId)
+ return page;
+ }
+ }
+ }
+ return nullptr;
+}
+
+void WebPageProxy::setOpenerPageID(Optional<WebCore::PageIdentifier> pageId) {
+ m_openerPageID = pageId;
+ if (!pageId)
+ return;
+ WebPageProxy* opener = webPageForId(*pageId);
+ if (!opener || !opener->m_inspectorDialogAgent)
+ return;
+ if (opener->m_inspectorDialogAgent)
+ opener->m_inspectorDialogAgent->pageOpened(this);
+}
+
void WebPageProxy::maybeInitializeSandboxExtensionHandle(WebProcessProxy& process, const URL& url, const URL& resourceDirectoryURL, SandboxExtension::Handle& sandboxExtensionHandle, bool checkAssumedReadAccessToResourceURL)
{
if (!url.isLocalFile())
@@ -1623,6 +1647,11 @@ void WebPageProxy::setControlledByAutomation(bool controlled)
m_process->processPool().sendToNetworkingProcess(Messages::NetworkProcess::SetSessionIsControlledByAutomation(m_websiteDataStore->sessionID(), m_controlledByAutomation));
}
@ -5559,7 +5612,26 @@ index 35cd3ac33fc..05f3cc29314 100644
void WebPageProxy::createInspectorTarget(const String& targetId, Inspector::InspectorTargetType type)
{
m_inspectorController->createInspectorTarget(targetId, type);
@@ -5339,6 +5345,8 @@ void WebPageProxy::runJavaScriptAlert(FrameIdentifier frameID, SecurityOriginDat
@@ -5253,15 +5282,17 @@ void WebPageProxy::createNewPage(FrameInfoData&& originatingFrameInfoData, Optio
MESSAGE_CHECK(m_process, m_process->webFrame(*originatingFrameInfoData.frameID));
auto* originatingPage = m_process->webPage(*originatingPageID);
+ auto openerId = originatingPage->webPageID();
auto originatingFrameInfo = API::FrameInfo::create(WTFMove(originatingFrameInfoData), originatingPage);
auto mainFrameURL = m_mainFrame ? m_mainFrame->url() : URL();
- auto completionHandler = [this, protectedThis = makeRef(*this), mainFrameURL, request, reply = WTFMove(reply)] (RefPtr<WebPageProxy> newPage) mutable {
+ auto completionHandler = [this, protectedThis = makeRef(*this), mainFrameURL, request, reply = WTFMove(reply), openerId] (RefPtr<WebPageProxy> newPage) mutable {
if (!newPage) {
reply(WTF::nullopt, WTF::nullopt);
return;
}
newPage->setOpenedByDOM();
+ newPage->setOpenerPageID(openerId);
reply(newPage->webPageID(), newPage->creationParameters(m_process, *newPage->drawingArea()));
@@ -5339,6 +5370,8 @@ void WebPageProxy::runJavaScriptAlert(FrameIdentifier frameID, SecurityOriginDat
if (auto* automationSession = process().processPool().automationSession())
automationSession->willShowJavaScriptDialog(*this);
}
@ -5568,7 +5640,7 @@ index 35cd3ac33fc..05f3cc29314 100644
m_uiClient->runJavaScriptAlert(*this, message, frame, WTFMove(securityOrigin), WTFMove(reply));
}
@@ -5358,6 +5366,8 @@ void WebPageProxy::runJavaScriptConfirm(FrameIdentifier frameID, SecurityOriginD
@@ -5358,6 +5391,8 @@ void WebPageProxy::runJavaScriptConfirm(FrameIdentifier frameID, SecurityOriginD
if (auto* automationSession = process().processPool().automationSession())
automationSession->willShowJavaScriptDialog(*this);
}
@ -5577,7 +5649,7 @@ index 35cd3ac33fc..05f3cc29314 100644
m_uiClient->runJavaScriptConfirm(*this, message, frame, WTFMove(securityOrigin), WTFMove(reply));
}
@@ -5377,6 +5387,8 @@ void WebPageProxy::runJavaScriptPrompt(FrameIdentifier frameID, SecurityOriginDa
@@ -5377,6 +5412,8 @@ void WebPageProxy::runJavaScriptPrompt(FrameIdentifier frameID, SecurityOriginDa
if (auto* automationSession = process().processPool().automationSession())
automationSession->willShowJavaScriptDialog(*this);
}
@ -5586,7 +5658,7 @@ index 35cd3ac33fc..05f3cc29314 100644
m_uiClient->runJavaScriptPrompt(*this, message, defaultValue, frame, WTFMove(securityOrigin), WTFMove(reply));
}
@@ -5536,6 +5548,8 @@ void WebPageProxy::runBeforeUnloadConfirmPanel(FrameIdentifier frameID, Security
@@ -5536,6 +5573,8 @@ void WebPageProxy::runBeforeUnloadConfirmPanel(FrameIdentifier frameID, Security
return;
}
}
@ -5595,7 +5667,7 @@ index 35cd3ac33fc..05f3cc29314 100644
// Since runBeforeUnloadConfirmPanel() can spin a nested run loop we need to turn off the responsiveness timer.
m_process->responsivenessTimer().stop();
@@ -6558,6 +6572,8 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
@@ -6558,6 +6597,8 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
if (auto* automationSession = process().processPool().automationSession())
automationSession->mouseEventsFlushedForPage(*this);
pageClient().didFinishProcessingAllPendingMouseEvents();
@ -5604,7 +5676,7 @@ index 35cd3ac33fc..05f3cc29314 100644
}
break;
@@ -6584,7 +6600,6 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
@@ -6584,7 +6625,6 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
case WebEvent::RawKeyDown:
case WebEvent::Char: {
LOG(KeyHandling, "WebPageProxy::didReceiveEvent: %s (queue empty %d)", webKeyboardEventTypeString(type), m_keyEventQueue.isEmpty());
@ -5612,7 +5684,7 @@ index 35cd3ac33fc..05f3cc29314 100644
MESSAGE_CHECK(m_process, !m_keyEventQueue.isEmpty());
NativeWebKeyboardEvent event = m_keyEventQueue.takeFirst();
@@ -6604,7 +6619,6 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
@@ -6604,7 +6644,6 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
// The call to doneWithKeyEvent may close this WebPage.
// Protect against this being destroyed.
Ref<WebPageProxy> protect(*this);
@ -5620,7 +5692,7 @@ index 35cd3ac33fc..05f3cc29314 100644
pageClient().doneWithKeyEvent(event, handled);
if (!handled)
m_uiClient->didNotHandleKeyEvent(this, event);
@@ -6613,6 +6627,8 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
@@ -6613,6 +6652,8 @@ void WebPageProxy::didReceiveEvent(uint32_t opaqueType, bool handled)
if (!canProcessMoreKeyEvents) {
if (auto* automationSession = process().processPool().automationSession())
automationSession->keyboardEventsFlushedForPage(*this);
@ -5630,7 +5702,7 @@ index 35cd3ac33fc..05f3cc29314 100644
break;
}
diff --git a/Source/WebKit/UIProcess/WebPageProxy.h b/Source/WebKit/UIProcess/WebPageProxy.h
index 10947ff0dbb..c1a42229051 100644
index 10947ff0dbb..96f5af09d1b 100644
--- a/Source/WebKit/UIProcess/WebPageProxy.h
+++ b/Source/WebKit/UIProcess/WebPageProxy.h
@@ -35,6 +35,7 @@
@ -5665,7 +5737,24 @@ index 10947ff0dbb..c1a42229051 100644
void initializeWebPage();
void setDrawingArea(std::unique_ptr<DrawingAreaProxy>&&);
@@ -2234,6 +2245,7 @@ private:
@@ -546,6 +557,8 @@ public:
void setOpenedByDOM() { m_openedByDOM = true; }
bool openedByDOM() const { return m_openedByDOM; }
+ void setOpenerPageID(Optional<WebCore::PageIdentifier> pageId);
+ Optional<WebCore::PageIdentifier> openerPageID() { return m_openerPageID; }
bool hasCommittedAnyProvisionalLoads() const { return m_hasCommittedAnyProvisionalLoads; }
@@ -2181,6 +2194,7 @@ private:
const Identifier m_identifier;
WebCore::PageIdentifier m_webPageID;
+ Optional<WebCore::PageIdentifier> m_openerPageID;
WeakPtr<PageClient> m_pageClient;
Ref<API::PageConfiguration> m_configuration;
@@ -2234,6 +2248,7 @@ private:
bool m_treatsSHA1CertificatesAsInsecure { true };
RefPtr<WebInspectorProxy> m_inspector;
@ -5673,7 +5762,7 @@ index 10947ff0dbb..c1a42229051 100644
#if ENABLE(FULLSCREEN_API)
std::unique_ptr<WebFullScreenManagerProxy> m_fullScreenManager;
@@ -2582,6 +2594,7 @@ private:
@@ -2582,6 +2597,7 @@ private:
#if ENABLE(REMOTE_INSPECTOR)
std::unique_ptr<WebPageDebuggable> m_inspectorDebuggable;
#endif
@ -7173,5 +7262,5 @@ index 2d183d39412..d94d4f06fc5 100644
webkit_web_context_set_tls_errors_policy(webContext, WEBKIT_TLS_ERRORS_POLICY_IGNORE);
--
2.24.0
2.17.1