Bug 1338497 - Moved the Safe Browsing notification banner into its own object, made it aware of the current base domain, and added a function that's called when the location changes to determine if it should dismiss or not.
draft
Bug 1338497 - Moved the Safe Browsing notification banner into its own object, made it aware of the current base domain, and added a function that's called when the location changes to determine if it should dismiss or not.
MozReview-Commit-ID: 31JQ4dUyFb4
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -3144,34 +3144,17 @@ var BrowserOnClick = {
// There is no button for reporting errors since Google doesn't currently
// provide a URL endpoint for these reports.
} else if (reason === "harmful") {
title = gNavigatorBundle.getString("safebrowsing.reportedHarmfulSite");
// There is no button for reporting errors since Google doesn't currently
// provide a URL endpoint for these reports.
}
- let notificationBox = gBrowser.getNotificationBox();
- let value = "blocked-badware-page";
-
- let previousNotification = notificationBox.getNotificationWithValue(value);
- if (previousNotification) {
- notificationBox.removeNotification(previousNotification);
- }
-
- let notification = notificationBox.appendNotification(
- title,
- value,
- "chrome://global/skin/icons/blacklist_favicon.png",
- notificationBox.PRIORITY_CRITICAL_HIGH,
- buttons
- );
- // Persist the notification until the user removes so it
- // doesn't get removed on redirects.
- notification.persistence = -1;
+ SafeBrowsingNotificationBox.show(title, buttons);
},
};
/**
* Re-direct the browser to a known-safe page. This function is
* used when, for example, the user browses to a known malware page
* and is presented with about:blocked. The "Get me out of here!"
* button should take the user to the default start page so that even
@@ -4583,16 +4566,18 @@ var XULBrowserWindow = {
URLBarSetURI(aLocationURI);
BookmarkingUI.onLocationChange();
gIdentityHandler.onLocationChange();
BrowserPageActions.onLocationChange();
+ SafeBrowsingNotificationBox.onLocationChange(aLocationURI);
+
gTabletModePageCounter.inc();
// Utility functions for disabling find
var shouldDisableFind = function(aDocument) {
let docElt = aDocument.documentElement;
return docElt && docElt.getAttribute("disablefastfind") == "true";
};
@@ -8906,16 +8891,68 @@ var AboutPrivateBrowsingListener = {
window.messageManager.addMessageListener(
"AboutPrivateBrowsing:DontShowIntroPanelAgain",
msg => {
TrackingProtection.dontShowIntroPanelAgain();
});
}
};
+const SafeBrowsingNotificationBox = {
+ _currentURIBaseDomain: null,
+ show(title, buttons) {
+ let uri = gBrowser.currentURI;
+
+ var eTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"]
+ .createInstance(Components.interfaces.nsIEffectiveTLDService);
+
+ //start tracking host so that we know when we leave the domain
+ this._currentURIBaseDomain = eTLDService.getBaseDomain(uri);
+
+ let notificationBox = gBrowser.getNotificationBox();
+ let value = "blocked-badware-page";
+
+ let previousNotification = notificationBox.getNotificationWithValue(value);
+ if (previousNotification) {
+ notificationBox.removeNotification(previousNotification);
+ }
+
+ let notification = notificationBox.appendNotification(
+ title,
+ value,
+ "chrome://global/skin/icons/blacklist_favicon.png",
+ notificationBox.PRIORITY_CRITICAL_HIGH,
+ buttons
+ );
+ // Persist the notification until the user removes so it
+ // doesn't get removed on redirects.
+ notification.persistence = -1;
+ },
+ onLocationChange(aLocationURI) {
+ //take this to represent that you haven't visited a bad place
+ if (!this._currentURIBaseDomain) {
+ return;
+ }
+
+ let eTLDService = Components.classes["@mozilla.org/network/effective-tld-service;1"]
+ .createInstance(Components.interfaces.nsIEffectiveTLDService);
+ let newURIBaseDomain = eTLDService.getBaseDomain(aLocationURI);
+
+ if (newURIBaseDomain !== this._currentURIBaseDomain) {
+ let notificationBox = gBrowser.getNotificationBox();
+ let notification = notificationBox.getNotificationWithValue("blocked-badware-page");
+ if (notification) {
+ notificationBox.removeNotification(notification, false);
+ }
+
+ this._currentURIBaseDomain = null;
+ }
+ }
+};
+
function TabModalPromptBox(browser) {
this._weakBrowserRef = Cu.getWeakReference(browser);
}
TabModalPromptBox.prototype = {
_promptCloseCallback(onCloseCallback, principalToAllowFocusFor, allowFocusCheckbox, ...args) {
if (principalToAllowFocusFor && allowFocusCheckbox &&
allowFocusCheckbox.checked) {