From fa67b115ce1a20e64da5b8eaa67e2979fad8f89d Mon Sep 17 00:00:00 2001 From: Stephen Blott Date: Sat, 26 Mar 2016 16:20:44 +0000 Subject: Ensure correct sendResponse() is called. With several frames, only one frame can call sendResponse(), whichever one happens to call it first. getScrollPosition, is the only handler for which we care about the response. Here, we make sure that sendResponse() will *only* be called in the top frame - where we want it called. This fixes a possible race condition in global marks. Additionally, although it's not the primary intention here, this also avoids calling sendResponse() unnecessarily in cases where we don't use the response. --- content_scripts/vimium_frontend.coffee | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'content_scripts') diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 8acea3fc..564966bf 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -146,7 +146,8 @@ initializePreDomReady = -> requestHandlers = toggleHelpDialog: (request) -> if frameId == request.frameId then HelpDialog.toggle request.dialogHtml focusFrame: (request) -> if (frameId == request.frameId) then focusThisFrame request - getScrollPosition: -> if frameId == 0 then scrollX: window.scrollX, scrollY: window.scrollY + getScrollPosition: (ignoredA, ignoredB, sendResponse) -> + sendResponse scrollX: window.scrollX, scrollY: window.scrollY if frameId == 0 setScrollPosition: setScrollPosition # A frame has received the focus. We don't care here (the Vomnibar/UI-component handles this). frameFocused: -> @@ -158,7 +159,7 @@ initializePreDomReady = -> # These requests are intended for the background page, but they're delivered to the options page too. unless request.handler and not request.name if isEnabledForUrl or request.name in ["checkEnabledAfterURLChange", "runInTopFrame"] - sendResponse requestHandlers[request.name] request, sender + requestHandlers[request.name] request, sender, sendResponse false # Ensure that the sendResponse callback is freed. # Wrapper to install event listeners. Syntactic sugar. -- cgit v1.2.3