browser(firefox): prepare to collect signals during actions (#1772)

This commit is contained in:
Dmitry Gozman 2020-04-15 12:02:08 -07:00 committed by GitHub
parent 8c40b920c9
commit cbad583f8a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 38 additions and 12 deletions

View File

@ -1 +1 @@
1078 1079

View File

@ -138,7 +138,7 @@ index 040c7b124dec6bb254563bbe74fe50012cb077a3..b4e6b8132786af70e8ad0dce88b67c28
const transportProvider = { const transportProvider = {
setListener(upgradeListener) { setListener(upgradeListener) {
diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp diff --git a/docshell/base/nsDocShell.cpp b/docshell/base/nsDocShell.cpp
index 514a4f2890a20558afe0d9c1aec697612fc8e873..8d16217833c15ee3611be913646c77fc440473e5 100644 index 514a4f2890a20558afe0d9c1aec697612fc8e873..908452a13d639146e3c649c61da39923bf90c178 100644
--- a/docshell/base/nsDocShell.cpp --- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp +++ b/docshell/base/nsDocShell.cpp
@@ -15,6 +15,12 @@ @@ -15,6 +15,12 @@
@ -373,7 +373,20 @@ index 514a4f2890a20558afe0d9c1aec697612fc8e873..8d16217833c15ee3611be913646c77fc
NS_IMETHODIMP NS_IMETHODIMP
nsDocShell::GetIsNavigating(bool* aOut) { nsDocShell::GetIsNavigating(bool* aOut) {
*aOut = mIsNavigating; *aOut = mIsNavigating;
@@ -12137,6 +12313,9 @@ class OnLinkClickEvent : public Runnable { @@ -8394,6 +8570,12 @@ nsresult nsDocShell::PerformRetargeting(nsDocShellLoadState* aLoadState,
true, // aForceNoOpener
getter_AddRefs(newBC));
MOZ_ASSERT(!newBC);
+ if (rv == NS_OK) {
+ nsCOMPtr<nsIObserverService> observerService = mozilla::services::GetObserverService();
+ if (observerService) {
+ observerService->NotifyObservers(GetAsSupports(this), "juggler-window-open-in-new-context", nullptr);
+ }
+ }
return rv;
}
@@ -12137,6 +12319,9 @@ class OnLinkClickEvent : public Runnable {
mNoOpenerImplied, nullptr, nullptr, mNoOpenerImplied, nullptr, nullptr,
mIsUserTriggered, mTriggeringPrincipal, mCsp); mIsUserTriggered, mTriggeringPrincipal, mCsp);
} }
@ -383,7 +396,7 @@ index 514a4f2890a20558afe0d9c1aec697612fc8e873..8d16217833c15ee3611be913646c77fc
return NS_OK; return NS_OK;
} }
@@ -12226,6 +12405,9 @@ nsresult nsDocShell::OnLinkClick( @@ -12226,6 +12411,9 @@ nsresult nsDocShell::OnLinkClick(
this, aContent, aURI, target, aFileName, aPostDataStream, this, aContent, aURI, target, aFileName, aPostDataStream,
aHeadersDataStream, noOpenerImplied, aIsUserTriggered, aIsTrusted, aHeadersDataStream, noOpenerImplied, aIsUserTriggered, aIsTrusted,
aTriggeringPrincipal, aCsp); aTriggeringPrincipal, aCsp);
@ -3062,10 +3075,10 @@ index 0000000000000000000000000000000000000000..268fbc361d8053182bb6c27f626e853d
+ +
diff --git a/juggler/content/FrameTree.js b/juggler/content/FrameTree.js diff --git a/juggler/content/FrameTree.js b/juggler/content/FrameTree.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..8a87dabd37e83cba0f1dfac07d8fd18875c042ef index 0000000000000000000000000000000000000000..224de0f9514d4af3327d7b59dd5719607bd9c0ed
--- /dev/null --- /dev/null
+++ b/juggler/content/FrameTree.js +++ b/juggler/content/FrameTree.js
@@ -0,0 +1,471 @@ @@ -0,0 +1,473 @@
+"use strict"; +"use strict";
+const Ci = Components.interfaces; +const Ci = Components.interfaces;
+const Cr = Components.results; +const Cr = Components.results;
@ -3290,6 +3303,8 @@ index 0000000000000000000000000000000000000000..8a87dabd37e83cba0f1dfac07d8fd188
+ // Always report download navigation as failure to match other browsers. + // Always report download navigation as failure to match other browsers.
+ const errorText = isDownload ? 'Will download to file' : helper.getNetworkErrorStatusText(status); + const errorText = isDownload ? 'Will download to file' : helper.getNetworkErrorStatusText(status);
+ this.emit(FrameTree.Events.NavigationAborted, frame, navigationId, errorText); + this.emit(FrameTree.Events.NavigationAborted, frame, navigationId, errorText);
+ if (frame === this._mainFrame && status !== Cr.NS_BINDING_ABORTED)
+ this.forcePageReady();
+ } + }
+ } + }
+ +
@ -3593,10 +3608,10 @@ index 0000000000000000000000000000000000000000..155d0770ddf704728829272a41a31ce8
+ +
diff --git a/juggler/content/PageAgent.js b/juggler/content/PageAgent.js diff --git a/juggler/content/PageAgent.js b/juggler/content/PageAgent.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..c3f3f86b9fbba170a25abb681b372d0ed5492155 index 0000000000000000000000000000000000000000..63754937b3464794227fe894b3d6057fbf0ae582
--- /dev/null --- /dev/null
+++ b/juggler/content/PageAgent.js +++ b/juggler/content/PageAgent.js
@@ -0,0 +1,905 @@ @@ -0,0 +1,914 @@
+"use strict"; +"use strict";
+const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm"); +const {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");
+const Ci = Components.interfaces; +const Ci = Components.interfaces;
@ -3836,6 +3851,7 @@ index 0000000000000000000000000000000000000000..c3f3f86b9fbba170a25abb681b372d0e
+ this._eventListeners.push(...[ + this._eventListeners.push(...[
+ helper.addObserver(this._linkClicked.bind(this, false), 'juggler-link-click'), + helper.addObserver(this._linkClicked.bind(this, false), 'juggler-link-click'),
+ helper.addObserver(this._linkClicked.bind(this, true), 'juggler-link-click-sync'), + helper.addObserver(this._linkClicked.bind(this, true), 'juggler-link-click-sync'),
+ helper.addObserver(this._onWindowOpenInNewContext.bind(this), 'juggler-window-open-in-new-context'),
+ helper.addObserver(this._filePickerShown.bind(this), 'juggler-file-picker-shown'), + helper.addObserver(this._filePickerShown.bind(this), 'juggler-file-picker-shown'),
+ helper.addEventListener(this._messageManager, 'DOMContentLoaded', this._onDOMContentLoaded.bind(this)), + helper.addEventListener(this._messageManager, 'DOMContentLoaded', this._onDOMContentLoaded.bind(this)),
+ helper.addEventListener(this._messageManager, 'pageshow', this._onLoad.bind(this)), + helper.addEventListener(this._messageManager, 'pageshow', this._onLoad.bind(this)),
@ -3936,6 +3952,14 @@ index 0000000000000000000000000000000000000000..c3f3f86b9fbba170a25abb681b372d0e
+ this._browserPage.emit('pageLinkClicked', { phase: sync ? 'after' : 'before' }); + this._browserPage.emit('pageLinkClicked', { phase: sync ? 'after' : 'before' });
+ } + }
+ +
+ _onWindowOpenInNewContext(docShell) {
+ // TODO: unify this with _onWindowOpen if possible.
+ const frame = this._frameTree.frameForDocShell(docShell);
+ if (!frame)
+ return;
+ this._browserPage.emit('pageWillOpenNewWindowAsynchronously');
+ }
+
+ _filePickerShown(inputElement) { + _filePickerShown(inputElement) {
+ if (inputElement.ownerGlobal.docShell !== this._docShell) + if (inputElement.ownerGlobal.docShell !== this._docShell)
+ return; + return;
@ -6054,10 +6078,10 @@ index 0000000000000000000000000000000000000000..10ce1e9eb24879426ca11a21ffeb89f3
+this.NetworkHandler = NetworkHandler; +this.NetworkHandler = NetworkHandler;
diff --git a/juggler/protocol/PageHandler.js b/juggler/protocol/PageHandler.js diff --git a/juggler/protocol/PageHandler.js b/juggler/protocol/PageHandler.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..73c53475214ac8cbb54cb5a15e26d2b3b65b9755 index 0000000000000000000000000000000000000000..95481cd1194918d0b539dc1872906070ef75b1be
--- /dev/null --- /dev/null
+++ b/juggler/protocol/PageHandler.js +++ b/juggler/protocol/PageHandler.js
@@ -0,0 +1,344 @@ @@ -0,0 +1,345 @@
+"use strict"; +"use strict";
+ +
+const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js'); +const {Helper} = ChromeUtils.import('chrome://juggler/content/Helper.js');
@ -6130,6 +6154,7 @@ index 0000000000000000000000000000000000000000..73c53475214ac8cbb54cb5a15e26d2b3
+ pageFrameAttached: emitProtocolEvent('Page.frameAttached'), + pageFrameAttached: emitProtocolEvent('Page.frameAttached'),
+ pageFrameDetached: emitProtocolEvent('Page.frameDetached'), + pageFrameDetached: emitProtocolEvent('Page.frameDetached'),
+ pageLinkClicked: emitProtocolEvent('Page.linkClicked'), + pageLinkClicked: emitProtocolEvent('Page.linkClicked'),
+ pageWillOpenNewWindowAsynchronously: emitProtocolEvent('Page.willOpenNewWindowAsynchronously'),
+ pageNavigationAborted: emitProtocolEvent('Page.navigationAborted'), + pageNavigationAborted: emitProtocolEvent('Page.navigationAborted'),
+ pageNavigationCommitted: emitProtocolEvent('Page.navigationCommitted'), + pageNavigationCommitted: emitProtocolEvent('Page.navigationCommitted'),
+ pageNavigationStarted: emitProtocolEvent('Page.navigationStarted'), + pageNavigationStarted: emitProtocolEvent('Page.navigationStarted'),
@ -6553,10 +6578,10 @@ index 0000000000000000000000000000000000000000..78b6601b91d0b7fcda61114e6846aa07
+this.EXPORTED_SYMBOLS = ['t', 'checkScheme']; +this.EXPORTED_SYMBOLS = ['t', 'checkScheme'];
diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js diff --git a/juggler/protocol/Protocol.js b/juggler/protocol/Protocol.js
new file mode 100644 new file mode 100644
index 0000000000000000000000000000000000000000..ae13d7ad1ce2a9776121ffcfcf7e68c5118e6e5c index 0000000000000000000000000000000000000000..76445a317969f569f080bbec116c59a37587ef84
--- /dev/null --- /dev/null
+++ b/juggler/protocol/Protocol.js +++ b/juggler/protocol/Protocol.js
@@ -0,0 +1,800 @@ @@ -0,0 +1,801 @@
+const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js'); +const {t, checkScheme} = ChromeUtils.import('chrome://juggler/content/protocol/PrimitiveTypes.js');
+ +
+// Protocol-specific types. +// Protocol-specific types.
@ -7113,6 +7138,7 @@ index 0000000000000000000000000000000000000000..ae13d7ad1ce2a9776121ffcfcf7e68c5
+ 'linkClicked': { + 'linkClicked': {
+ phase: t.Enum(['before', 'after']), + phase: t.Enum(['before', 'after']),
+ }, + },
+ 'willOpenNewWindowAsynchronously': {},
+ 'fileChooserOpened': { + 'fileChooserOpened': {
+ executionContextId: t.String, + executionContextId: t.String,
+ element: runtimeTypes.RemoteObject + element: runtimeTypes.RemoteObject