| Index: background.js | 
| =================================================================== | 
| --- a/background.js | 
| +++ b/background.js | 
| @@ -100,25 +100,59 @@ | 
|  | 
| var activeNotification = null; | 
|  | 
| -// Adds or removes browser action icon according to options. | 
| +function getTabStatus(tab) | 
| +{ | 
| +  var icon; | 
| +  var excluded = !/^https?:/.test(tab.url) || isWhitelisted(tab.url); | 
| + | 
| +  if (require("info").platform == "safari") | 
| +    // pick an icon with approtiate size for Safari. However since | 
| +    // toolbar item icons can't use different colors, we don't have | 
| +    // different versions indicating whether adblocking is active. | 
| +    icon = "icons/abp-16" | 
| +  else | 
| +  { | 
| +    // pick an icon with the approtiate size for Chrome/Opera | 
| +    // that indicates whether adblocking is active in the tab | 
| +    if (excluded && iconAnimation.step < 10) | 
| +      icon = "icons/abp-19-whitelisted"; | 
| +    else | 
| +      icon = "icons/abp-19"; | 
| +  } | 
| + | 
| +  // pick the current frame if the icon is currently animating | 
| +  // in order to indicate a pending notification | 
| +  if (iconAnimation.step > 0) | 
| +  { | 
| +    icon += "-notification-" | 
| +    icon += iconAnimation.severity; | 
| + | 
| +    if (iconAnimation.step < 10) | 
| +    { | 
| +      icon += "-" | 
| +      icon += iconAnimation.step; | 
| +    } | 
| +  } | 
| + | 
| +  icon += ".png"; | 
| + | 
| +  return {icon: icon, excluded: excluded}; | 
| +} | 
| + | 
| function refreshIconAndContextMenu(tab) | 
| { | 
| -  var excluded = !/^https?:/.test(tab.url) || isWhitelisted(tab.url); | 
| +  var status = getTabStatus(tab); | 
|  | 
| -  var iconFilename; | 
| -  if (require("info").platform == "safari") | 
| -    // There is no grayscale version of the icon for whitelisted tabs | 
| -    // when using Safari, because icons are grayscale already and icons | 
| -    // aren't per tab in Safari. | 
| -    iconFilename = "icons/abp-16.png" | 
| -  else | 
| -    iconFilename = excluded ? "icons/abp-19-whitelisted.png" : "icons/abp-19.png"; | 
| +  // update icon indicating whether adblocking is active in the tab. | 
| +  // But don't interfere the icon animation if active. In that case | 
| +  // the icon animation takes care to update the icon to its new status | 
| +  // with its next frame. | 
| +  if (!iconAnimation.tabs.has(tab)) | 
| +    tab.browserAction.setIcon(status.icon); | 
|  | 
| -  tab.browserAction.setIcon(iconFilename); | 
| -  iconAnimation.registerTab(tab, iconFilename); | 
| - | 
| -  // Set context menu status according to whether current tab has whitelisted domain | 
| -  if (excluded) | 
| +  // show or hide the context menu entry dependent on whether adblocking | 
| +  // is active in the tab | 
| +  if (status.excluded) | 
| ext.contextMenus.hideMenuItems(); | 
| else | 
| ext.contextMenus.showMenuItems(); | 
|  |