Index: background.js |
=================================================================== |
--- a/background.js |
+++ b/background.js |
@@ -40,12 +40,6 @@ |
this.isThirdParty = isThirdParty; |
this.extractHostFromFrame = extractHostFromFrame; |
} |
-with(require("icon")) |
-{ |
- this.updateIcon = updateIcon; |
- this.startIconAnimation = startIconAnimation; |
- this.stopIconAnimation = stopIconAnimation; |
-} |
var FilterStorage = require("filterStorage").FilterStorage; |
var FilterNotifier = require("filterNotifier").FilterNotifier; |
var ElemHide = require("elemHide").ElemHide; |
@@ -53,25 +47,10 @@ |
var Prefs = require("prefs").Prefs; |
var Synchronizer = require("synchronizer").Synchronizer; |
var Utils = require("utils").Utils; |
-var NotificationStorage = require("notification").Notification; |
-var initAntiAdblockNotification = require("antiadblockInit").initAntiAdblockNotification; |
var parseFilters = require("filterValidation").parseFilters; |
var composeFilters = require("filterComposer").composeFilters; |
- |
-// Chrome on Linux does not fully support chrome.notifications until version 35 |
-// https://code.google.com/p/chromium/issues/detail?id=291485 |
-var canUseChromeNotifications = (function() |
-{ |
- var info = require("info"); |
- if (info.platform == "chromium" && "notifications" in chrome) |
- { |
- if (navigator.platform.indexOf("Linux") == -1) |
- return true; |
- if (Services.vc.compare(info.applicationVersion, "35") >= 0) |
- return true; |
- } |
- return false; |
-})(); |
+var updateIcon = require("icon").updateIcon; |
+var initNotifications = require("notificationHelper").initNotifications; |
var seenDataCorruption = false; |
var filterlistsReinitialized = false; |
@@ -108,9 +87,7 @@ |
if (previousVersion && Services.vc.compare(previousVersion, "1.8.8.1285") < 0) |
Prefs.hidePlaceholders = true; |
- if (canUseChromeNotifications) |
- initChromeNotifications(); |
- initAntiAdblockNotification(); |
+ initNotifications(); |
// Update browser actions and context menus when whitelisting might have |
// changed. That is now when initally loading the filters and later when |
@@ -150,7 +127,6 @@ |
var noStyleRulesHosts = ["mail.google.com", "mail.yahoo.com", "www.google.com"]; |
var htmlPages = new ext.PageMap(); |
-var activeNotification = null; |
var contextMenuItem = { |
title: ext.i18n.getMessage("block_element"), |
@@ -290,175 +266,6 @@ |
refreshIconAndContextMenuForAllPages(); |
}); |
-function prepareNotificationIconAndPopup() |
-{ |
- var animateIcon = (activeNotification.type !== "question"); |
- activeNotification.onClicked = function() |
- { |
- if (animateIcon) |
- stopIconAnimation(); |
- notificationClosed(); |
- }; |
- if (animateIcon) |
- startIconAnimation(activeNotification.type); |
-} |
- |
-function openNotificationLinks() |
-{ |
- if (activeNotification.links) |
- { |
- activeNotification.links.forEach(function(link) |
- { |
- ext.windows.getLastFocused(function(win) |
- { |
- win.openTab(Utils.getDocLink(link)); |
- }); |
- }); |
- } |
-} |
- |
-function notificationButtonClick(buttonIndex) |
-{ |
- if (activeNotification.type === "question") |
- { |
- NotificationStorage.triggerQuestionListeners(activeNotification.id, buttonIndex === 0); |
- NotificationStorage.markAsShown(activeNotification.id); |
- activeNotification.onClicked(); |
- } |
- else if (activeNotification.links && activeNotification.links[buttonIndex]) |
- { |
- ext.windows.getLastFocused(function(win) |
- { |
- win.openTab(Utils.getDocLink(activeNotification.links[buttonIndex])); |
- }); |
- } |
-} |
- |
-function notificationClosed() |
-{ |
- activeNotification = null; |
-} |
- |
-function imgToBase64(url, callback) |
-{ |
- var canvas = document.createElement("canvas"), |
- ctx = canvas.getContext("2d"), |
- img = new Image; |
- img.src = url; |
- img.onload = function() |
- { |
- canvas.height = img.height; |
- canvas.width = img.width; |
- ctx.drawImage(img, 0, 0); |
- callback(canvas.toDataURL("image/png")); |
- canvas = null; |
- }; |
-} |
- |
-function initChromeNotifications() |
-{ |
- // Chrome hides notifications in notification center when clicked so we need to clear them |
- function clearActiveNotification(notificationId) |
- { |
- if (activeNotification && activeNotification.type != "question" && !("links" in activeNotification)) |
- return; |
- |
- chrome.notifications.clear(notificationId, function(wasCleared) |
- { |
- if (wasCleared) |
- notificationClosed(); |
- }); |
- } |
- |
- chrome.notifications.onButtonClicked.addListener(function(notificationId, buttonIndex) |
- { |
- notificationButtonClick(buttonIndex); |
- clearActiveNotification(notificationId); |
- }); |
- chrome.notifications.onClicked.addListener(clearActiveNotification); |
- chrome.notifications.onClosed.addListener(notificationClosed); |
-} |
- |
-function showNotification(notification) |
-{ |
- if (activeNotification && activeNotification.id === notification.id) |
- return; |
- |
- activeNotification = notification; |
- if (activeNotification.type === "critical" || activeNotification.type === "question") |
- { |
- var texts = NotificationStorage.getLocalizedTexts(notification); |
- var title = texts.title || ""; |
- var message = texts.message ? texts.message.replace(/<\/?(a|strong)>/g, "") : ""; |
- var iconUrl = ext.getURL("icons/detailed/abp-128.png"); |
- var hasLinks = activeNotification.links && activeNotification.links.length > 0; |
- |
- if (canUseChromeNotifications) |
- { |
- var opts = { |
- type: "basic", |
- title: title, |
- message: message, |
- buttons: [], |
- priority: 2 // We use the highest priority to prevent the notification from closing automatically |
- }; |
- if (activeNotification.type === "question") |
- { |
- opts.buttons.push({title: ext.i18n.getMessage("overlay_notification_button_yes")}); |
- opts.buttons.push({title: ext.i18n.getMessage("overlay_notification_button_no")}); |
- } |
- else |
- { |
- var regex = /<a>(.*?)<\/a>/g; |
- var plainMessage = texts.message || ""; |
- var match; |
- while (match = regex.exec(plainMessage)) |
- opts.buttons.push({title: match[1]}); |
- } |
- |
- imgToBase64(iconUrl, function(iconData) |
- { |
- opts["iconUrl"] = iconData; |
- chrome.notifications.create("", opts, function() {}); |
- }); |
- } |
- else if ("Notification" in window && activeNotification.type !== "question") |
- { |
- if (hasLinks) |
- message += " " + ext.i18n.getMessage("notification_without_buttons"); |
- |
- imgToBase64(iconUrl, function(iconData) |
- { |
- var notification = new Notification( |
- title, |
- { |
- lang: Utils.appLocale, |
- dir: ext.i18n.getMessage("@@bidi_dir"), |
- body: message, |
- icon: iconData |
- } |
- ); |
- |
- notification.addEventListener("click", openNotificationLinks); |
- notification.addEventListener("close", notificationClosed); |
- }); |
- } |
- else |
- { |
- var message = title + "\n" + message; |
- if (hasLinks) |
- message += "\n\n" + ext.i18n.getMessage("notification_with_buttons"); |
- |
- var approved = confirm(message); |
- if (activeNotification.type === "question") |
- notificationButtonClick(approved ? 0 : 1); |
- else if (approved) |
- openNotificationLinks(); |
- } |
- } |
- prepareNotificationIconAndPopup(); |
-} |
- |
// This is a hack to speedup loading of the options page on Safari. |
// Once we replaced the background page proxy with message passing |
// this global function should removed. |
@@ -617,10 +424,3 @@ |
page.sendMessage({type: "clickhide-deactivate"}); |
refreshIconAndContextMenu(page); |
}); |
- |
-setTimeout(function() |
-{ |
- var notificationToShow = NotificationStorage.getNextToShow(); |
- if (notificationToShow) |
- showNotification(notificationToShow); |
-}, 3 * 60 * 1000); |