From 39115e921af964a73d49da3085319fc1160009d2 Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Thu, 14 Apr 2016 08:32:15 +0100 Subject: Rework UI component init sequence. In testing global link hints, it seems that UI components can be opened before they're actually ready, and Vimium hangs with a broken UI component displayed. This issue seems to be in 1.54 too. It's not clear what's causing this -- and it's hard to reproduce systematically. However, it only seems to happen on navigation. Therefore, it seems likely that there is an issue with the initialization sequence. Here, we wait for: - the DOM content to be ready, and - the port to be provided before registering the UI component as ready. --- content_scripts/ui_component.coffee | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/ui_component.coffee b/content_scripts/ui_component.coffee index 92640eb2..d7bdf2a1 100644 --- a/content_scripts/ui_component.coffee +++ b/content_scripts/ui_component.coffee @@ -45,7 +45,8 @@ class UIComponent # Get vimiumSecret so the iframe can determine that our message isn't the page impersonating us. chrome.storage.local.get "vimiumSecret", ({ vimiumSecret }) => { port1, port2 } = new MessageChannel - port1.onmessage = (event) => @handleMessage event + port1.onmessage = (event) => + if event?.data == "uiComponentIsReady" then @uiComponentIsReady = true else @handleMessage event @iframeElement.contentWindow.postMessage vimiumSecret, chrome.runtime.getURL(""), [ port2 ] setIframePort port1 @@ -54,8 +55,6 @@ class UIComponent @postMessage name: "frameFocused", focusFrameId: request.focusFrameId false # Free up the sendResponse handler. - @styleSheetGetter.use => @iframePort.use => Utils.nextTick => @uiComponentIsReady = true - # Posts a message (if one is provided), then calls continuation (if provided). The continuation is only # ever called *after* the message has been posted. postMessage: (message = null, continuation = null) -> -- cgit v1.2.3