150 lines
4.1 KiB
JavaScript
150 lines
4.1 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
// This file is loaded into the browser window scope.
|
|
/* eslint-env mozilla/browser-window */
|
|
|
|
XPCOMUtils.defineLazyModuleGetters(this, {
|
|
AboutNewTab: "resource:///modules/AboutNewTab.jsm",
|
|
});
|
|
|
|
var DefaultBrowserNotificationOnNewTabPage = {
|
|
_eventListenerAdded: false,
|
|
async init() {
|
|
// The guards in this function are present to allow
|
|
// tests to re-init between test runs.
|
|
|
|
let willPrompt = await this.willCheckDefaultBrowser();
|
|
if (!willPrompt) {
|
|
return;
|
|
}
|
|
if (!this._eventListenerAdded) {
|
|
window.addEventListener("TabSelect", this);
|
|
this._eventListenerAdded = true;
|
|
}
|
|
},
|
|
|
|
closePrompt(aNode) {
|
|
if (this._notification) {
|
|
this._notification.close();
|
|
}
|
|
},
|
|
|
|
handleEvent(event) {
|
|
if (
|
|
event.type == "TabSelect" &&
|
|
event.target?.linkedBrowser?.currentURI?.spec == AboutNewTab.newTabURL
|
|
) {
|
|
DefaultBrowserNotificationOnNewTabPage.prompt(event.target.linkedBrowser);
|
|
window.removeEventListener("TabSelect", this);
|
|
this._eventListenerAdded = false;
|
|
}
|
|
},
|
|
|
|
prompt(browser) {
|
|
let win = browser.ownerGlobal;
|
|
let { gBrowser } = win;
|
|
|
|
let { MozXULElement } = win;
|
|
MozXULElement.insertFTLIfNeeded("browser/defaultBrowserNotification.ftl");
|
|
let doc = browser.ownerDocument;
|
|
let messageFragment = doc.createDocumentFragment();
|
|
let message = doc.createElement("span");
|
|
doc.l10n.setAttributes(message, "default-browser-notification-message");
|
|
messageFragment.appendChild(message);
|
|
|
|
let buttons = [
|
|
{
|
|
"l10n-id": "default-browser-notification-button",
|
|
primary: true,
|
|
callback: () => {
|
|
window.getShellService().setAsDefault();
|
|
this.closePrompt();
|
|
},
|
|
},
|
|
];
|
|
|
|
let iconPixels = win.devicePixelRatio > 1 ? "64" : "32";
|
|
let iconURL = "chrome://branding/content/icon" + iconPixels + ".png";
|
|
const priority = win.gNotificationBox.PRIORITY_INFO_MEDIUM;
|
|
let callback = this._onNotificationEvent.bind(this);
|
|
this._notification = gBrowser
|
|
.getNotificationBox(browser)
|
|
.appendNotification(
|
|
messageFragment,
|
|
"default-browser",
|
|
iconURL,
|
|
priority,
|
|
buttons,
|
|
callback
|
|
);
|
|
},
|
|
|
|
_onNotificationEvent(eventType) {
|
|
if (eventType == "removed") {
|
|
delete this._notification;
|
|
} else if (eventType == "dismissed") {
|
|
Services.prefs.setBoolPref("browser.shell.checkDefaultBrowser", false);
|
|
Services.prefs.setBoolPref(
|
|
"browser.shell.checkDefaultBrowser.disabledByDismissingNotification",
|
|
true
|
|
);
|
|
}
|
|
},
|
|
|
|
/**
|
|
* Checks if the default browser check prompt will be shown.
|
|
* @returns {boolean} True if the default browser check prompt will be shown.
|
|
*/
|
|
async willCheckDefaultBrowser() {
|
|
// Perform default browser checking.
|
|
const shellService = window.getShellService();
|
|
if (
|
|
!this.enabled ||
|
|
!Services.prefs.getBoolPref("browser.shell.checkDefaultBrowser", false) ||
|
|
AppConstants.DEBUG ||
|
|
!shellService ||
|
|
shellService.isDefaultBrowserOptOut()
|
|
) {
|
|
return false;
|
|
}
|
|
|
|
// Don't show the prompt if we're already the default browser.
|
|
let isDefault = false;
|
|
try {
|
|
isDefault = window.getShellService().isDefaultBrowser(false, false);
|
|
} catch (ex) {}
|
|
|
|
if (!isDefault) {
|
|
let promptCount = Services.prefs.getIntPref(
|
|
"browser.defaultbrowser.notificationbar.checkcount",
|
|
0
|
|
);
|
|
|
|
promptCount++;
|
|
Services.prefs.setIntPref(
|
|
"browser.defaultbrowser.notificationbar.checkcount",
|
|
promptCount
|
|
);
|
|
if (
|
|
promptCount >
|
|
Services.prefs.getIntPref(
|
|
"browser.defaultbrowser.notificationbar.checklimit"
|
|
)
|
|
) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
return !isDefault;
|
|
},
|
|
};
|
|
|
|
XPCOMUtils.defineLazyPreferenceGetter(
|
|
DefaultBrowserNotificationOnNewTabPage,
|
|
"enabled",
|
|
"browser.defaultbrowser.notificationbar",
|
|
false
|
|
);
|