Skip to content

Commit c9f9766

Browse files
committed
Enhance ZenGlanceManager to conditionally open tabs based on domain differences and refactor tab open handling
1 parent d618181 commit c9f9766

File tree

2 files changed

+48
-13
lines changed

2 files changed

+48
-13
lines changed

src/browser/base/content/browser-js.patch

+24-4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
2-
index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4dff08adb 100644
2+
index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de01bf8b8c 100644
33
--- a/browser/base/content/browser.js
44
+++ b/browser/base/content/browser.js
55
@@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, {
@@ -10,7 +10,7 @@ index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4
1010
DevToolsSocketStatus:
1111
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
1212
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
13-
@@ -632,6 +633,15 @@ XPCOMUtils.defineLazyPreferenceGetter(
13+
@@ -630,6 +631,15 @@ XPCOMUtils.defineLazyPreferenceGetter(
1414
false
1515
);
1616

@@ -26,7 +26,7 @@ index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4
2626
customElements.setElementCreationCallback("screenshots-buttons", () => {
2727
Services.scriptloader.loadSubScript(
2828
"chrome://browser/content/screenshots/screenshots-buttons.js",
29-
@@ -3438,6 +3448,11 @@ var XULBrowserWindow = {
29+
@@ -3440,6 +3450,11 @@ var XULBrowserWindow = {
3030
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
3131
TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
3232

@@ -38,7 +38,27 @@ index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4
3838
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
3939

4040
if (!gMultiProcessBrowser) {
41-
@@ -7289,6 +7304,12 @@ var gDialogBox = {
41+
@@ -4435,7 +4450,7 @@ nsBrowserAccess.prototype = {
42+
// Passing a null-URI to only create the content window,
43+
// and pass true for aSkipLoad to prevent loading of
44+
// about:blank
45+
- return this.getContentWindowOrOpenURIInFrame(
46+
+ let res = this.getContentWindowOrOpenURIInFrame(
47+
null,
48+
aParams,
49+
aWhere,
50+
@@ -4443,6 +4458,10 @@ nsBrowserAccess.prototype = {
51+
aName,
52+
true
53+
);
54+
+ if (typeof window.gZenGlanceManager !== "undefined" && window.toolbar.visible) {
55+
+ window.gZenGlanceManager.onTabOpen(res, aURI);
56+
+ }
57+
+ return res;
58+
},
59+
60+
openURIInFrame: function browser_openURIInFrame(
61+
@@ -7281,6 +7300,12 @@ var gDialogBox = {
4262
parentElement.showModal();
4363
this._didOpenHTMLDialog = true;
4464

src/browser/base/zen-components/ZenGlanceManager.mjs

+24-9
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
init() {
1010
window.addEventListener('keydown', this.onKeyDown.bind(this));
1111
window.addEventListener('TabClose', this.onTabClose.bind(this));
12-
window.addEventListener('TabOpen', this.onTabOpen.bind(this));
1312

1413
XPCOMUtils.defineLazyPreferenceGetter(
1514
this._lazyPref,
@@ -77,7 +76,7 @@
7776
return this.#currentBrowser;
7877
}
7978

80-
openGlance(data, existingTab = null) {
79+
openGlance(data, existingTab = null, ownerTab = null) {
8180
if (this.#currentBrowser) {
8281
return;
8382
}
@@ -94,7 +93,7 @@
9493
this.browserWrapper?.removeAttribute('has-finished-animation');
9594
this.overlay?.removeAttribute('post-fade-out');
9695

97-
const currentTab = gBrowser.selectedTab;
96+
const currentTab = ownerTab ?? gBrowser.selectedTab;
9897

9998
this.animatingOpen = true;
10099
this._animating = true;
@@ -308,21 +307,37 @@
308307
}
309308
}
310309

311-
shouldOpenTabInGlance(tab) {
310+
tabDomainsDiffer(tab1, url2) {
311+
try {
312+
if (!tab1) {
313+
return true;
314+
}
315+
let url1 = tab1.linkedBrowser.currentURI.spec;
316+
if (url1.startsWith('about:')) {
317+
return true;
318+
}
319+
return Services.io.newURI(url1).host !== url2.host;
320+
} catch (e) {
321+
return true;
322+
}
323+
}
324+
325+
shouldOpenTabInGlance(tab, uri) {
312326
let owner = tab.owner;
313327
return (
314328
owner &&
315329
owner.getAttribute('zen-essential') === 'true' &&
316330
this._lazyPref.SHOULD_OPEN_EXTERNAL_TABS_IN_GLANCE &&
317331
owner.linkedBrowser?.docShellIsActive &&
318-
owner.linkedBrowser?.browsingContext?.isAppTab
332+
owner.linkedBrowser?.browsingContext?.isAppTab &&
333+
this.tabDomainsDiffer(owner, uri)
319334
);
320335
}
321336

322-
onTabOpen(event) {
323-
let tab = event.target;
324-
if (this.shouldOpenTabInGlance(tab)) {
325-
this.openGlance({ url: undefined, x: 0, y: 0, width: 0, height: 0 }, tab);
337+
onTabOpen(browser, uri) {
338+
let tab = gBrowser.getTabForBrowser(browser);
339+
if (this.shouldOpenTabInGlance(tab, uri)) {
340+
this.openGlance({ url: undefined, x: 0, y: 0, width: 0, height: 0 }, tab, tab.owner);
326341
}
327342
}
328343

0 commit comments

Comments
 (0)