Index: background.js |
=================================================================== |
--- a/background.js |
+++ b/background.js |
@@ -18,6 +18,7 @@ |
with(require("filterClasses")) |
{ |
this.Filter = Filter; |
+ this.ActiveFilter = ActiveFilter; |
this.RegExpFilter = RegExpFilter; |
this.BlockingFilter = BlockingFilter; |
this.WhitelistFilter = WhitelistFilter; |
@@ -40,6 +41,7 @@ |
var Synchronizer = require("synchronizer").Synchronizer; |
var Utils = require("utils").Utils; |
var Notification = require("notification").Notification; |
+var initAntiAdblockNotification = require("antiadblockInit").initAntiAdblockNotification; |
// Some types cannot be distinguished |
RegExpFilter.typeMap.OBJECT_SUBREQUEST = RegExpFilter.typeMap.OBJECT; |
@@ -62,6 +64,8 @@ |
if (!importingOldData) |
addSubscription(prevVersion); |
} |
+ |
+ initAntiAdblockNotification(); |
} |
// update browser actions when whitelisting might have changed, |
@@ -201,6 +205,16 @@ |
addAcceptable = false; |
} |
+ // Add "anti-adblock messages" subscription |
+ var subscription = Subscription.fromURL(Prefs.subscriptions_antiadblockurl); |
+ if (subscription) |
+ { |
+ subscription.disabled = true; |
+ FilterStorage.addSubscription(subscription); |
+ if (subscription instanceof DownloadableSubscription && !subscription.lastDownload) |
+ Synchronizer.execute(subscription); |
+ } |
+ |
if (!addSubscription && !addAcceptable) |
return; |
@@ -295,12 +309,15 @@ |
function prepareNotificationIconAndPopup() |
{ |
+ var animateIcon = (activeNotification.type !== "question"); |
activeNotification.onClicked = function() |
{ |
- iconAnimation.stop(); |
+ if (animateIcon) |
+ iconAnimation.stop(); |
activeNotification = null; |
}; |
- iconAnimation.update(activeNotification.severity); |
+ if (animateIcon) |
+ iconAnimation.update(activeNotification.type); |
} |
function openNotificationLinks() |
@@ -319,7 +336,13 @@ |
function notificationButtonClick(id, index) |
{ |
- if (activeNotification.links && activeNotification.links[index]) |
+ if (activeNotification.type === "question") |
+ { |
+ Notification.triggerQuestionListeners(activeNotification.id, index === 0); |
+ Notification.markAsShown(activeNotification.id); |
+ activeNotification.onClicked(); |
+ } |
+ else if (activeNotification.links && activeNotification.links[index]) |
{ |
ext.windows.getLastFocused(function(win) |
{ |
@@ -330,15 +353,18 @@ |
function showNotification(notification) |
{ |
+ if (activeNotification && activeNotification.id === notification.id) |
+ return; |
+ |
activeNotification = notification; |
- if (activeNotification.severity === "critical") |
+ if (activeNotification.type === "critical" || activeNotification.type === "question") |
{ |
var hasWebkitNotifications = typeof webkitNotifications !== "undefined"; |
if (hasWebkitNotifications && "createHTMLNotification" in webkitNotifications) |
{ |
var notification = webkitNotifications.createHTMLNotification("notification.html"); |
notification.show(); |
- notification.addEventListener("close", prepareNotificationIconAndPopup, false); |
+ prepareNotificationIconAndPopup(); |
return; |
} |
@@ -347,34 +373,43 @@ |
var message = texts.message ? texts.message.replace(/<\/?(a|strong)>/g, "") : ""; |
var iconUrl = ext.getURL("icons/abp-128.png"); |
var hasLinks = activeNotification.links && activeNotification.links.length > 0; |
- if ("browserNotifications" in ext) |
+ |
+ // Chrome on Linux does not fully support chrome.notifications yet |
+ // https://code.google.com/p/chromium/issues/detail?id=291485 |
+ if (chrome && "notifications" in chrome && navigator.platform.indexOf("Linux") === -1) |
{ |
var opts = { |
type: "basic", |
title: title, |
message: message, |
iconUrl: iconUrl, |
- buttons: [] |
+ buttons: [], |
+ priority: 2 // We use the highest priority to prevent the notification from closing automatically |
}; |
- var regex = /<a>(.*?)<\/a>/g; |
- var plainMessage = texts.message || ""; |
- var match; |
- while (match = regex.exec(plainMessage)) |
- opts.buttons.push({title: match[1]}); |
+ 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]}); |
+ } |
- var notification = ext.browserNotifications; |
- notification.create("", opts, function() {}); |
- notification.onClosed.addListener(prepareNotificationIconAndPopup); |
- notification.onButtonClicked.addListener(notificationButtonClick); |
+ chrome.notifications.create("", opts, function() {}); |
+ chrome.notifications.onButtonClicked.addListener(notificationButtonClick); |
} |
- else if (hasWebkitNotifications && "createNotification" in webkitNotifications) |
+ else if (hasWebkitNotifications && "createNotification" in webkitNotifications && activeNotification.type !== "question") |
{ |
if (hasLinks) |
message += " " + ext.i18n.getMessage("notification_without_buttons"); |
var notification = webkitNotifications.createNotification(iconUrl, title, message); |
notification.show(); |
- notification.addEventListener("close", prepareNotificationIconAndPopup, false); |
notification.addEventListener("click", openNotificationLinks, false); |
} |
else |
@@ -383,13 +418,14 @@ |
if (hasLinks) |
message += "\n\n" + ext.i18n.getMessage("notification_with_buttons"); |
- if (confirm(message)) |
+ var approved = confirm(message); |
+ if (activeNotification.type === "question") |
+ notificationButtonClick(null, approved ? 0 : 1); |
+ else if (approved) |
openNotificationLinks(); |
- prepareNotificationIconAndPopup(); |
} |
} |
- else |
- prepareNotificationIconAndPopup(); |
+ prepareNotificationIconAndPopup(); |
} |
ext.onMessage.addListener(function (msg, sender, sendResponse) |