aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts/main.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'background_scripts/main.coffee')
-rw-r--r--background_scripts/main.coffee33
1 files changed, 13 insertions, 20 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee
index 1a67f2b2..0d82e61c 100644
--- a/background_scripts/main.coffee
+++ b/background_scripts/main.coffee
@@ -311,24 +311,6 @@ selectTab = (direction, count = 1) ->
Math.max 0, tabs.length - count
chrome.tabs.update tabs[toSelect].id, selected: true
-# Here's how we set the page icon. The default is "disabled", so if we do nothing else, then we get the
-# grey-out disabled icon. Thereafter, we only set tab-specific icons, so there's no need to update the icon
-# when we visit a tab on which Vimium isn't running.
-#
-# For active tabs, when a frame starts, it requests its active state via isEnabledForUrl. We also check the
-# state every time a frame gets the focus. In both cases, the frame then updates the tab's icon accordingly.
-#
-# Exclusion rule changes (from either the options page or the page popup) propagate via the subsequent focus
-# change. In particular, whenever a frame next gets the focus, it requests its new state and sets the icon
-# accordingly.
-#
-setIcon = (request, sender) ->
- path = switch request.icon
- when "enabled" then "icons/browser_action_enabled.png"
- when "partial" then "icons/browser_action_partial.png"
- when "disabled" then "icons/browser_action_disabled.png"
- chrome.browserAction.setIcon tabId: sender.tab.id, path: path
-
chrome.tabs.onUpdated.addListener (tabId, changeInfo, tab) ->
return unless changeInfo.status == "loading" # only do this once per URL change
cssConf =
@@ -373,10 +355,22 @@ Frames =
isEnabledForUrl: ({request, tabId, port}) ->
urlForTab[tabId] = request.url if request.frameIsFocused
rule = Exclusions.getRule request.url
- port.postMessage extend request,
+ enabledState =
isEnabledForUrl: not rule or 0 < rule.passKeys.length
passKeys: rule?.passKeys ? ""
+ if request.frameIsFocused
+ chrome.browserAction.setIcon tabId: tabId, path:
+ if not enabledState.isEnabledForUrl
+ "icons/browser_action_disabled.png"
+ else if 0 < enabledState.passKeys.length
+ "icons/browser_action_partial.png"
+ else
+ "icons/browser_action_enabled.png"
+
+ # Send the response. The tests require this to be last.
+ port.postMessage extend request, enabledState
+
domReady: ({tabId, frameId}) ->
if frameId == 0
tabLoadedHandlers[tabId]?()
@@ -423,7 +417,6 @@ sendRequestHandlers =
selectSpecificTab: selectSpecificTab
createMark: Marks.create.bind(Marks)
gotoMark: Marks.goto.bind(Marks)
- setIcon: setIcon
sendMessageToFrames: sendMessageToFrames
log: bgLog
fetchFileContents: (request, sender) -> fetchFileContents request.fileName