1
0
Fork 1
mirror of https://github.com/zen-browser/desktop.git synced 2025-07-10 18:15:30 +02:00

Enhance ZenGlanceManager to conditionally open tabs based on domain differences and refactor tab open handling

This commit is contained in:
mr. M 2025-01-22 07:49:09 +01:00
parent d618181dc7
commit c9f97665be
No known key found for this signature in database
GPG key ID: CBD57A2AEDBDA1FB
2 changed files with 48 additions and 13 deletions

View file

@ -1,5 +1,5 @@
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4dff08adb 100644 index 9a65dcc7ad41ab961907c95338e023b173d4f474..9477e0c115ed3c4a670f1ac63846b6de01bf8b8c 100644
--- a/browser/base/content/browser.js --- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js +++ b/browser/base/content/browser.js
@@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, { @@ -32,6 +32,7 @@ ChromeUtils.defineESModuleGetters(this, {
@ -10,7 +10,7 @@ index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4
DevToolsSocketStatus: DevToolsSocketStatus:
"resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs", "resource://devtools/shared/security/DevToolsSocketStatus.sys.mjs",
DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs", DownloadUtils: "resource://gre/modules/DownloadUtils.sys.mjs",
@@ -632,6 +633,15 @@ XPCOMUtils.defineLazyPreferenceGetter( @@ -630,6 +631,15 @@ XPCOMUtils.defineLazyPreferenceGetter(
false false
); );
@ -26,7 +26,7 @@ index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4
customElements.setElementCreationCallback("screenshots-buttons", () => { customElements.setElementCreationCallback("screenshots-buttons", () => {
Services.scriptloader.loadSubScript( Services.scriptloader.loadSubScript(
"chrome://browser/content/screenshots/screenshots-buttons.js", "chrome://browser/content/screenshots/screenshots-buttons.js",
@@ -3438,6 +3448,11 @@ var XULBrowserWindow = { @@ -3440,6 +3450,11 @@ var XULBrowserWindow = {
AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser); AboutReaderParent.updateReaderButton(gBrowser.selectedBrowser);
TranslationsParent.onLocationChange(gBrowser.selectedBrowser); TranslationsParent.onLocationChange(gBrowser.selectedBrowser);
@ -38,7 +38,27 @@ index ccd83c15d0d73a1e53bdbfdfbe6fed43a26c961d..f18a6abf7debb97539a4cdf8422315b4
PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser); PictureInPicture.updateUrlbarToggle(gBrowser.selectedBrowser);
if (!gMultiProcessBrowser) { if (!gMultiProcessBrowser) {
@@ -7289,6 +7304,12 @@ var gDialogBox = { @@ -4435,7 +4450,7 @@ nsBrowserAccess.prototype = {
// Passing a null-URI to only create the content window,
// and pass true for aSkipLoad to prevent loading of
// about:blank
- return this.getContentWindowOrOpenURIInFrame(
+ let res = this.getContentWindowOrOpenURIInFrame(
null,
aParams,
aWhere,
@@ -4443,6 +4458,10 @@ nsBrowserAccess.prototype = {
aName,
true
);
+ if (typeof window.gZenGlanceManager !== "undefined" && window.toolbar.visible) {
+ window.gZenGlanceManager.onTabOpen(res, aURI);
+ }
+ return res;
},
openURIInFrame: function browser_openURIInFrame(
@@ -7281,6 +7300,12 @@ var gDialogBox = {
parentElement.showModal(); parentElement.showModal();
this._didOpenHTMLDialog = true; this._didOpenHTMLDialog = true;

View file

@ -9,7 +9,6 @@
init() { init() {
window.addEventListener('keydown', this.onKeyDown.bind(this)); window.addEventListener('keydown', this.onKeyDown.bind(this));
window.addEventListener('TabClose', this.onTabClose.bind(this)); window.addEventListener('TabClose', this.onTabClose.bind(this));
window.addEventListener('TabOpen', this.onTabOpen.bind(this));
XPCOMUtils.defineLazyPreferenceGetter( XPCOMUtils.defineLazyPreferenceGetter(
this._lazyPref, this._lazyPref,
@ -77,7 +76,7 @@
return this.#currentBrowser; return this.#currentBrowser;
} }
openGlance(data, existingTab = null) { openGlance(data, existingTab = null, ownerTab = null) {
if (this.#currentBrowser) { if (this.#currentBrowser) {
return; return;
} }
@ -94,7 +93,7 @@
this.browserWrapper?.removeAttribute('has-finished-animation'); this.browserWrapper?.removeAttribute('has-finished-animation');
this.overlay?.removeAttribute('post-fade-out'); this.overlay?.removeAttribute('post-fade-out');
const currentTab = gBrowser.selectedTab; const currentTab = ownerTab ?? gBrowser.selectedTab;
this.animatingOpen = true; this.animatingOpen = true;
this._animating = true; this._animating = true;
@ -308,21 +307,37 @@
} }
} }
shouldOpenTabInGlance(tab) { tabDomainsDiffer(tab1, url2) {
try {
if (!tab1) {
return true;
}
let url1 = tab1.linkedBrowser.currentURI.spec;
if (url1.startsWith('about:')) {
return true;
}
return Services.io.newURI(url1).host !== url2.host;
} catch (e) {
return true;
}
}
shouldOpenTabInGlance(tab, uri) {
let owner = tab.owner; let owner = tab.owner;
return ( return (
owner && owner &&
owner.getAttribute('zen-essential') === 'true' && owner.getAttribute('zen-essential') === 'true' &&
this._lazyPref.SHOULD_OPEN_EXTERNAL_TABS_IN_GLANCE && this._lazyPref.SHOULD_OPEN_EXTERNAL_TABS_IN_GLANCE &&
owner.linkedBrowser?.docShellIsActive && owner.linkedBrowser?.docShellIsActive &&
owner.linkedBrowser?.browsingContext?.isAppTab owner.linkedBrowser?.browsingContext?.isAppTab &&
this.tabDomainsDiffer(owner, uri)
); );
} }
onTabOpen(event) { onTabOpen(browser, uri) {
let tab = event.target; let tab = gBrowser.getTabForBrowser(browser);
if (this.shouldOpenTabInGlance(tab)) { if (this.shouldOpenTabInGlance(tab, uri)) {
this.openGlance({ url: undefined, x: 0, y: 0, width: 0, height: 0 }, tab); this.openGlance({ url: undefined, x: 0, y: 0, width: 0, height: 0 }, tab, tab.owner);
} }
} }