aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--background_scripts/main.coffee20
-rw-r--r--content_scripts/link_hints.coffee2
-rw-r--r--content_scripts/vimium_frontend.coffee1
3 files changed, 9 insertions, 14 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee
index 107edc45..c1ac6819 100644
--- a/background_scripts/main.coffee
+++ b/background_scripts/main.coffee
@@ -336,7 +336,7 @@ Frames =
portsForTab[tabId][0]?.postMessage handler: "initializeTopFrameUIComponents"
linkHintsMessage: ({request, tabId, frameId}) ->
- HintCoordinator.onMessage extend(request, {frameId}), tab: id: tabId
+ HintCoordinator.onMessage tabId, frameId, request
handleFrameFocused = ({tabId, frameId}) ->
frameIdsForTab[tabId] ?= []
@@ -354,26 +354,23 @@ cycleToFrame = (frames, frameId, count = 0) ->
HintCoordinator =
tabState: {}
- # These messages can be received via sendRequestHandlers or via a Frames port. The Frames port seems to be
- # considerably faster (about a factor of 5), so we use that whenever possible. However, when sending
- # messages, we use chrome.tabs.sendMessage because, in tabs with many frames, broadcasting seems (?) likely
- # to be faster.
- onMessage: (request, {tab: {id: tabId}}) ->
+ onMessage: (tabId, frameId, request) ->
if request.messageType of this
- this[request.messageType] tabId, request
+ this[request.messageType] tabId, frameId, request
else
- # If there's no handler here, then the message is bounced to all frames in the sender's tab.
+ # If there's no handler here, then the message is forwarded to all frames in the sender's tab.
@sendMessage request.messageType, tabId, request
sendMessage: (messageType, tabId, request = {}) ->
- chrome.tabs.sendMessage tabId, extend request, {name: "linkHintsMessage", messageType}
+ extend request, {handler: "linkHintsMessage", messageType}
+ port.postMessage request for own frameId, port of portsForTab[tabId]
- prepareToActivateMode: (tabId, {frameId: originatingFrameId, modeIndex}) ->
+ prepareToActivateMode: (tabId, originatingFrameId, {modeIndex}) ->
@tabState[tabId] = {frameIds: frameIdsForTab[tabId], hintDescriptors: [], originatingFrameId, modeIndex}
@sendMessage "getHintDescriptors", tabId
# Receive hint descriptors from all frames and activate link-hints mode when we have them all.
- postHintDescriptors: (tabId, {frameId, hintDescriptors}) ->
+ postHintDescriptors: (tabId, frameId, {hintDescriptors}) ->
@tabState[tabId].hintDescriptors.push hintDescriptors...
@tabState[tabId].frameIds = @tabState[tabId].frameIds.filter (fId) -> fId != frameId
if @tabState[tabId].frameIds.length == 0
@@ -405,7 +402,6 @@ sendRequestHandlers =
# Send a message to all frames in the current tab.
sendMessageToFrames: (request, sender) -> chrome.tabs.sendMessage sender.tab.id, request.message
fetchFileContents: (request, sender) -> fetchFileContents request.fileName
- linkHintsMessage: HintCoordinator.onMessage.bind HintCoordinator
# For debugging only. This allows content scripts to log messages to the extension's logging page.
log: ({frameId, message}, sender) -> BgUtils.log "#{frameId} #{message}", sender
diff --git a/content_scripts/link_hints.coffee b/content_scripts/link_hints.coffee
index d22657ad..0739d621 100644
--- a/content_scripts/link_hints.coffee
+++ b/content_scripts/link_hints.coffee
@@ -53,8 +53,6 @@ HintCoordinator =
onExit: []
sendMessage: (messageType, request = {}) ->
- # We use Frame.postMessage() (instead of chrome.runtime.sendMessage()) because that seems to be
- # considerable faster, by about a factor of 5.
Frame.postMessage "linkHintsMessage", extend request, {messageType}
prepareToActivateMode: (mode, onExit) ->
diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee
index b9249e73..693c0c46 100644
--- a/content_scripts/vimium_frontend.coffee
+++ b/content_scripts/vimium_frontend.coffee
@@ -212,6 +212,7 @@ Frame =
addEventListener: (handler, callback) -> @listeners[handler] = callback
postMessage: (handler, request = {}) -> @port.postMessage extend request, {handler}
registerFrameId: ({chromeFrameId}) -> frameId = window.frameId = chromeFrameId
+ linkHintsMessage: (request) -> HintCoordinator[request.messageType] request
init: (callback) ->
@port = chrome.runtime.connect name: "frames"