diff options
| author | Stephen Blott | 2016-03-15 15:04:10 +0000 | 
|---|---|---|
| committer | Stephen Blott | 2016-03-17 11:17:03 +0000 | 
| commit | f504fd305e5b2c16b2053a76090ea2618ab42332 (patch) | |
| tree | 67f91c28adaa672e61e904f795802719a32466aa | |
| parent | 8912215c01504b459ff1c6aa17309a86037f6af8 (diff) | |
| download | vimium-f504fd305e5b2c16b2053a76090ea2618ab42332.tar.bz2 | |
Move isEnabledForUrl to Frame.port.
| -rw-r--r-- | background_scripts/main.coffee | 32 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 25 | ||||
| -rw-r--r-- | tests/unit_tests/exclusion_test.coffee | 2 | 
3 files changed, 33 insertions, 26 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index f6e70d3a..5135a158 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -102,20 +102,6 @@ logMessage = do ->  #  getCurrentTabUrl = (request, sender) -> sender.tab.url -# -# Checks the user's preferences in local storage to determine if Vimium is enabled for the given URL, and -# whether any keys should be passed through to the underlying page. -# The source frame also informs us whether or not it has the focus, which allows us to track the URL of the -# active frame. -# -root.isEnabledForUrl = isEnabledForUrl = (request, sender) -> -  urlForTab[sender.tab.id] = request.url if request.frameIsFocused -  rule = Exclusions.getRule(request.url) -  { -    isEnabledForUrl: not rule or rule.passKeys -    passKeys: rule?.passKeys or "" -  } -  onURLChange = (details) ->    chrome.tabs.sendMessage details.tabId, name: "checkEnabledAfterURLChange" @@ -384,7 +370,7 @@ Frames =      frameIdsForTab[tabId]?      frameIdsForTab[tabId] ?= [0]      frameIdsForTab[tabId].push frameId unless frameId == 0 -    port.postMessage name: "registerFrameId", chromeFrameId: frameId +    port.postMessage handler: "registerFrameId", chromeFrameId: frameId      port.onDisconnect.addListener listener = ->        # Unregister the frame.  However, we never unregister the main/top frame.  If the tab is navigating to @@ -394,7 +380,19 @@ Frames =        # registering before the old one is deregistered).        if tabId of frameIdsForTab and frameId != 0          frameIdsForTab[tabId] = frameIdsForTab[tabId].filter (fId) -> fId != frameId -      port.onDisconnect.removeListener listener + +    # Return our onMessage handler for this port. +    (request, port) => +      response = this[request.handler] {request, tabId, frameId, port} +      port.postMessage response if response != false + +  isEnabledForUrl: ({request, tabId}) -> +    urlForTab[tabId] = request.url if request.frameIsFocused +    rule = Exclusions.getRule request.url +    # Send a response... +    extend request, +      isEnabledForUrl: not rule or 0 < rule.passKeys.length +      passKeys: rule?.passKeys ? ""  handleFrameFocused = (request, sender) ->    [tabId, frameId] = [sender.tab.id, sender.frameId] @@ -437,7 +435,6 @@ sendRequestHandlers =    nextFrame: (request) -> BackgroundCommands.nextFrame 1, request.frameId    copyToClipboard: copyToClipboard    pasteFromClipboard: pasteFromClipboard -  isEnabledForUrl: isEnabledForUrl    selectSpecificTab: selectSpecificTab    createMark: Marks.create.bind(Marks)    gotoMark: Marks.goto.bind(Marks) @@ -502,3 +499,4 @@ chrome.runtime.onInstalled.addListener ({reason}) ->  root.TabOperations = TabOperations  root.logMessage = logMessage +root.Frames = Frames diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 4b461847..49187e4a 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -218,12 +218,18 @@ DomUtils.documentReady ->  Frame =    port: null +  listeners: {} -  init: -> +  addEventListener: (handler, callback) -> (@listeners[handler] ?= []).push callback +  postMessage: (handler, request = {}) -> @port.postMessage extend request, {handler} +  registerFrameId: ({chromeFrameId}) -> frameId = window.frameId = chromeFrameId + +  init: (callback) ->      @port = chrome.runtime.connect name: "frames" -    @port.onMessage.addListener (request) => this[request.name] request +    @port.onMessage.addListener (request) => +      handler request for handler in @listeners[request.handler] -  registerFrameId: ({chromeFrameId}) -> frameId = window.frameId = chromeFrameId +    @addEventListener "registerFrameId", Frame.registerFrameId  handleShowHUDforDuration = ({ text, duration }) ->    if DomUtils.isTopFrame() @@ -442,10 +448,9 @@ initializeTopFrame = (request = null) ->  # Checks if Vimium should be enabled or not in this frame.  As a side effect, it also informs the background  # page whether this frame has the focus, allowing the background page to track the active frame's URL. -checkIfEnabledForUrl = (frameIsFocused = windowIsFocused()) -> -  url = window.location.toString() -  chrome.runtime.sendMessage { handler: "isEnabledForUrl", url: url, frameIsFocused: frameIsFocused }, (response) -> -    { isEnabledForUrl, passKeys } = response +checkIfEnabledForUrl = do -> +  Frame.addEventListener "isEnabledForUrl", (response) -> +    {isEnabledForUrl, passKeys, frameIsFocused} = response      installListeners() # But only if they have not been installed already.      # Initialize UI components. We only initialize these once we know that Vimium is enabled; see #1838.      if isEnabledForUrl @@ -456,14 +461,16 @@ checkIfEnabledForUrl = (frameIsFocused = windowIsFocused()) ->        HUD.hide()      normalMode?.setPassKeys passKeys      # Update the page icon, if necessary. -    if windowIsFocused() +    if frameIsFocused        chrome.runtime.sendMessage          handler: "setIcon"          icon:            if isEnabledForUrl and not passKeys then "enabled"            else if isEnabledForUrl then "partial"            else "disabled" -    null + +  (frameIsFocused = windowIsFocused()) -> +    Frame.postMessage "isEnabledForUrl", {frameIsFocused, url: window.location.toString()}  # When we're informed by the background page that a URL in this tab has changed, we check if we have the  # correct enabled state (but only if this frame has the focus). diff --git a/tests/unit_tests/exclusion_test.coffee b/tests/unit_tests/exclusion_test.coffee index 0e4b87bc..e6a47779 100644 --- a/tests/unit_tests/exclusion_test.coffee +++ b/tests/unit_tests/exclusion_test.coffee @@ -19,6 +19,8 @@ extend(global, require "../../background_scripts/exclusions.js")  extend(global, require "../../background_scripts/commands.js")  extend(global, require "../../background_scripts/main.js") +isEnabledForUrl = (request) -> Frames.isEnabledForUrl {request, tabId: 0} +  # These tests cover only the most basic aspects of excluded URLs and passKeys.  #  context "Excluded URLs and pass keys",  | 
