From 175f4b275c49ba332000ab773061777af820a87f Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 2 Apr 2016 10:32:53 +0100 Subject: Do not register tiny frames. This affects focusFrame and link hints. We do not register tiny frames. The reason for doing this is that link hints messages all (registered) frames to collect their hint descriptors. On some sites (e.g. Google Inbox and other Google properties), there are many tiny iframes (on the order of 12 or 15 or so). Those frames cannot provide useful hints, so -- by not registering them -- we don't ask them for hints. The intention is to speed up the link-hints activation sequence. --- content_scripts/vimium_frontend.coffee | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index fb8742e0..f14c5d07 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -138,15 +138,12 @@ installModes = -> initializeOnEnabledStateKnown = Utils.makeIdempotent -> installModes() -registerFrame = -> - Frame.postMessage "registerFrame" - # -# Complete initialization work that sould be done prior to DOMReady. +# Complete initialization work that should be done prior to DOMReady. # initializePreDomReady = -> installListeners() - Frame.init registerFrame + Frame.init() checkIfEnabledForUrl() requestHandlers = @@ -214,10 +211,26 @@ 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 + 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() + 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() - init: (callback = null) -> + init: -> @port = chrome.runtime.connect name: "frames" @port.onMessage.addListener (request) => @@ -228,8 +241,6 @@ Frame = isEnabledForUrl = false window.removeEventListener "focus", onFocus - callback?() - setScrollPosition = ({ scrollX, scrollY }) -> if DomUtils.isTopFrame() DomUtils.documentReady -> -- cgit v1.2.3