aboutsummaryrefslogtreecommitdiffstats
path: root/background_scripts/main.coffee
diff options
context:
space:
mode:
authorStephen Blott2016-03-18 08:46:50 +0000
committerStephen Blott2016-03-18 08:46:50 +0000
commit7a0f53a8dceb8ffb4f1080e84f1d875a4fa20b78 (patch)
tree18c4411a39db5e8a6fed21b83540775c125868db /background_scripts/main.coffee
parent009967b9ba7b7a14b9773f7ba18b8d9f5c85c747 (diff)
downloadvimium-7a0f53a8dceb8ffb4f1080e84f1d875a4fa20b78.tar.bz2
Reduce complexity for initialising the top frame.
In #2053, I omitted to notice that the top-frame (vomnibar) initialisation sequence also generates O(n^2) messages. This makes that sequence O(n).
Diffstat (limited to 'background_scripts/main.coffee')
-rw-r--r--background_scripts/main.coffee7
1 files changed, 6 insertions, 1 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee
index 5270ef02..4a982594 100644
--- a/background_scripts/main.coffee
+++ b/background_scripts/main.coffee
@@ -21,6 +21,7 @@ chrome.runtime.onInstalled.addListener ({ reason }) ->
currentVersion = Utils.getCurrentVersion()
frameIdsForTab = {}
root.urlForTab = {}
+topFramePortForTab = {}
# This is exported for use by "marks.coffee".
root.tabLoadedHandlers = {} # tabId -> function()
@@ -324,6 +325,7 @@ openOptionsPageInNewTab = ->
Frames =
onConnect: (sender, port) ->
[tabId, frameId] = [sender.tab.id, sender.frameId]
+ topFramePortForTab[tabId] = port if frameId == 0
frameIdsForTab[tabId] ?= []
frameIdsForTab[tabId].push frameId unless frameId in frameIdsForTab[tabId]
port.postMessage handler: "registerFrameId", chromeFrameId: frameId
@@ -364,6 +366,9 @@ Frames =
tabLoadedHandlers[tabId]?()
delete tabLoadedHandlers[tabId]
+ initializeTopFrameUIComponents: ({tabId}) ->
+ topFramePortForTab[tabId].postMessage handler: "initializeTopFrameUIComponents"
+
handleFrameFocused = (request, sender) ->
[tabId, frameId] = [sender.tab.id, sender.frameId]
frameIdsForTab[tabId] ?= []
@@ -416,7 +421,7 @@ chrome.storage.local.remove "findModeRawQueryListIncognito"
# there are no remaining incognito-mode windows. Since the common case is that there are none to begin with,
# we first check whether the key is set at all.
chrome.tabs.onRemoved.addListener (tabId) ->
- delete cache[tabId] for cache in [frameIdsForTab, urlForTab]
+ delete cache[tabId] for cache in [frameIdsForTab, urlForTab, topFramePortForTab]
chrome.storage.local.get "findModeRawQueryListIncognito", (items) ->
if items.findModeRawQueryListIncognito
chrome.windows.getAll null, (windows) ->