| 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); | 
|  |