diff options
| author | Stephen Blott | 2016-04-02 16:54:11 +0100 |
|---|---|---|
| committer | Stephen Blott | 2016-04-02 17:02:41 +0100 |
| commit | 96c74e4aa7e39a99bf5511440ba7a4155f1e2db8 (patch) | |
| tree | 10ac55d9efa915c4f17522961554e4540e3607e2 | |
| parent | 4f74307ed382ce942a1210007b99ed426f997a81 (diff) | |
| download | vimium-96c74e4aa7e39a99bf5511440ba7a4155f1e2db8.tar.bz2 | |
Simplify UI component initialisation.
There's no need for the previous complicated approach to UI component
initialialisation, in particular for the Vomnibar.
We only initialise the Vomnibar in the top frame. However, if for some
reason it hasn't been initialised by the time it's needed, then we can
just initialise it then. We are only initialising it early to avoid
flicker, so it's not a correctness issue. And the only reason it
wouldn't be initialised is if Vimium is disabled in the top frame, but
enabled in some other frame -- which is not a common case.
| -rw-r--r-- | background_scripts/main.coffee | 5 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 46 | ||||
| -rw-r--r-- | content_scripts/vomnibar.coffee | 4 |
3 files changed, 21 insertions, 34 deletions
diff --git a/background_scripts/main.coffee b/background_scripts/main.coffee index dea436ef..2a5b738e 100644 --- a/background_scripts/main.coffee +++ b/background_scripts/main.coffee @@ -291,8 +291,6 @@ Frames = onConnect: (sender, port) -> [tabId, frameId] = [sender.tab.id, sender.frameId] port.postMessage handler: "registerFrameId", chromeFrameId: frameId - # We only register the top frame automatically; other frames request registration via "registerFrame". - @registerFrame {tabId, frameId, port} if frameId == 0 port.onDisconnect.addListener listener = -> # Unregister the frame. However, we never unregister the main/top frame. If the tab is navigating to @@ -334,9 +332,6 @@ Frames = tabLoadedHandlers[tabId]?() delete tabLoadedHandlers[tabId] - initializeTopFrameUIComponents: ({tabId}) -> - portsForTab[tabId][0]?.postMessage handler: "initializeTopFrameUIComponents" - linkHintsMessage: ({request, tabId, frameId}) -> HintCoordinator.onMessage tabId, frameId, request diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 77dbcc9d..b73bd2e3 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -138,6 +138,11 @@ installModes = -> initializeOnEnabledStateKnown = Utils.makeIdempotent -> installModes() +initializeUIComponents = -> + # Both of these are idempotent. + HUD.init() + Vomnibar.init() if DomUtils.isTopFrame() + # # Complete initialization work that should be done prior to DOMReady. # @@ -214,21 +219,19 @@ Frame = linkHintsMessage: (request) -> HintCoordinator[request.messageType] request registerFrameId: ({chromeFrameId}) -> frameId = window.frameId = chromeFrameId - unless frameId == 0 - # The background page registers the top frame automatically. We register any other frame immediately if - # it is focused or its window isn't tiny. We register tiny frames later, when necessary. This affects - # focusFrame() and link hints. - if windowIsFocused() or not DomUtils.windowIsTooSmall() + # We register a frame immediately only if it is focused or its window isn't tiny. We register tiny + # frames later, when necessary. This affects focusFrame() and link hints. + if windowIsFocused() or not DomUtils.windowIsTooSmall() + Frame.postMessage "registerFrame" + else + postRegisterFrame = -> + window.removeEventListener "focus", focusHandler + window.removeEventListener "resize", resizeHandler Frame.postMessage "registerFrame" - else - postRegisterFrame = -> - window.removeEventListener "focus", focusHandler - window.removeEventListener "resize", resizeHandler - Frame.postMessage "registerFrame" - window.addEventListener "focus", focusHandler = -> - postRegisterFrame() if event.target == window - window.addEventListener "resize", resizeHandler = -> - postRegisterFrame() unless DomUtils.windowIsTooSmall() + window.addEventListener "focus", focusHandler = -> + postRegisterFrame() if event.target == window + window.addEventListener "resize", resizeHandler = -> + postRegisterFrame() unless DomUtils.windowIsTooSmall() init: -> @port = chrome.runtime.connect name: "frames" @@ -434,18 +437,6 @@ extend window, targetElement: document.activeElement indicator: false -# Initialize UI components which are only installed in the main/top frame. -initializeTopFrameUIComponents = do -> - Frame.addEventListener "initializeTopFrameUIComponents", Utils.makeIdempotent -> - DomUtils.documentReady Vomnibar.init.bind Vomnibar - - Utils.makeIdempotent -> DomUtils.documentReady -> - Frame.postMessage "initializeTopFrameUIComponents" - -# Initialize UI components which are only installed in all frames (i.e., the HUD). -initializeAllFrameUIComponents = Utils.makeIdempotent -> - DomUtils.documentReady HUD.init.bind HUD - # 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 and set # the page icon. @@ -457,8 +448,7 @@ checkIfEnabledForUrl = do -> # Initialize UI components, if necessary. We only initialize these once we know that Vimium is enabled; # see #1838. We need to check this every time so that we can change state from disabled to enabled. if isEnabledForUrl - initializeTopFrameUIComponents() - initializeAllFrameUIComponents() if frameIsFocused + initializeUIComponents() if frameIsFocused else # Hide the HUD if we're not enabled. HUD.hide() if HUD.isReady() diff --git a/content_scripts/vomnibar.coffee b/content_scripts/vomnibar.coffee index 67a79ff4..a19a9b70 100644 --- a/content_scripts/vomnibar.coffee +++ b/content_scripts/vomnibar.coffee @@ -62,7 +62,9 @@ Vomnibar = # query - Optional. Text to prefill the Vomnibar with. # selectFirst - Optional, boolean. Whether to select the first entry. # newTab - Optional, boolean. Whether to open the result in a new tab. - open: (sourceFrameId, options) -> @vomnibarUI.activate extend options, { sourceFrameId } + open: (sourceFrameId, options) -> + @init() + @vomnibarUI.activate extend options, { sourceFrameId } root = exports ? window root.Vomnibar = Vomnibar |
