| Index: background.js |
| =================================================================== |
| --- a/background.js |
| +++ b/background.js |
| @@ -18,7 +18,6 @@ |
| with(require("filterClasses")) |
| { |
| this.Filter = Filter; |
| - this.ActiveFilter = ActiveFilter; |
| this.RegExpFilter = RegExpFilter; |
| this.BlockingFilter = BlockingFilter; |
| this.WhitelistFilter = WhitelistFilter; |
| @@ -47,6 +46,12 @@ |
| RegExpFilter.typeMap.OBJECT_SUBREQUEST = RegExpFilter.typeMap.OBJECT; |
| RegExpFilter.typeMap.MEDIA = RegExpFilter.typeMap.FONT = RegExpFilter.typeMap.OTHER; |
| +// Chrome on Linux does not fully support chrome.notifications until version 35 |
| +// https://code.google.com/p/chromium/issues/detail?id=291485 |
| +var canUseChromeNotifications = require("info").platform == "chromium" |
| + && "notifications" in chrome |
| + && (navigator.platform.indexOf("Linux") == -1 || parseInt(require("info").applicationVersion) > 34); |
| + |
| var isFirstRun = false; |
| var seenDataCorruption = false; |
| require("filterNotifier").FilterNotifier.addListener(function(action) |
| @@ -65,6 +70,8 @@ |
| addSubscription(prevVersion); |
| } |
| + if (canUseChromeNotifications) |
| + initChromeNotifications(); |
| initAntiAdblockNotification(); |
| } |
| @@ -314,7 +321,7 @@ |
| { |
| if (animateIcon) |
| iconAnimation.stop(); |
| - activeNotification = null; |
| + notificationClosed(); |
| }; |
| if (animateIcon) |
| iconAnimation.update(activeNotification.type); |
| @@ -334,23 +341,52 @@ |
| } |
| } |
| -function notificationButtonClick(id, index) |
| +function notificationButtonClick(buttonIndex) |
| { |
| if (activeNotification.type === "question") |
| { |
| - Notification.triggerQuestionListeners(activeNotification.id, index === 0); |
| + Notification.triggerQuestionListeners(activeNotification.id, buttonIndex === 0); |
| Notification.markAsShown(activeNotification.id); |
| activeNotification.onClicked(); |
| } |
| - else if (activeNotification.links && activeNotification.links[index]) |
| + else if (activeNotification.links && activeNotification.links[buttonIndex]) |
| { |
| ext.windows.getLastFocused(function(win) |
| { |
| - win.openTab(Utils.getDocLink(activeNotification.links[index])); |
| + win.openTab(Utils.getDocLink(activeNotification.links[buttonIndex])); |
| }); |
| } |
| } |
| +function notificationClosed() |
| +{ |
| + activeNotification = null; |
| +} |
| + |
| +function initChromeNotifications() |
| +{ |
| + // Chrome hides notifications in notification center when clicked so we need to close them |
| + function clearActiveNotification(notificationId) |
| + { |
| + if (activeNotification && activeNotification.type != "question") |
|
Felix Dahlke
2014/03/28 16:16:39
Why check for the notification type here? Seems to
Thomas Greiner
2014/03/28 17:26:51
What this function does is remove the notification
Felix Dahlke
2014/03/28 17:33:46
Ah, no I get it. No it's fine let's go with 2 if y
Thomas Greiner
2014/03/28 18:23:17
For completeness' sake, what I meant for (2) was:
|
| + return; |
| + |
| + chrome.notifications.clear(notificationId, function(wasCleared) |
| + { |
| + if (wasCleared) |
| + notificationClosed(); |
| + }); |
| + } |
| + |
| + chrome.notifications.onButtonClicked.addListener(function(notificationId, buttonIndex) |
| + { |
| + notificationButtonClick(buttonIndex); |
| + clearActiveNotification(notificationId); |
|
Thomas Greiner
2014/03/28 15:57:08
I noticed that even notifications that were dismis
|
| + }); |
| + chrome.notifications.onClicked.addListener(clearActiveNotification); |
| + chrome.notifications.onClosed.addListener(notificationClosed); |
| +} |
| + |
| function showNotification(notification) |
| { |
| if (activeNotification && activeNotification.id === notification.id) |
| @@ -374,9 +410,7 @@ |
| var iconUrl = ext.getURL("icons/abp-128.png"); |
| var hasLinks = activeNotification.links && activeNotification.links.length > 0; |
| - // Chrome on Linux does not fully support chrome.notifications yet |
| - // https://code.google.com/p/chromium/issues/detail?id=291485 |
| - if (require("info").platform == "chromium" && "notifications" in chrome && navigator.platform.indexOf("Linux") == -1) |
| + if (canUseChromeNotifications) |
| { |
| var opts = { |
| type: "basic", |
| @@ -401,7 +435,6 @@ |
| } |
| chrome.notifications.create("", opts, function() {}); |
| - chrome.notifications.onButtonClicked.addListener(notificationButtonClick); |
| } |
| else if (hasWebkitNotifications && "createNotification" in webkitNotifications && activeNotification.type !== "question") |
| { |
| @@ -411,6 +444,7 @@ |
| var notification = webkitNotifications.createNotification(iconUrl, title, message); |
| notification.show(); |
| notification.addEventListener("click", openNotificationLinks, false); |
| + notification.addEventListener("close", notificationClosed, false); |
| } |
| else |
| { |