diff options
| author | Jez Ng | 2012-08-04 14:45:04 -0700 | 
|---|---|---|
| committer | Jez Ng | 2012-08-04 14:45:04 -0700 | 
| commit | d5086c5f781dfefac23d30a89256dd2e8ca22464 (patch) | |
| tree | 77c7af40c1bef776ba83f0f637ab90ae24a2647f | |
| parent | a6116da5a03237fb1a3718060d972f1992618a99 (diff) | |
| download | vimium-d5086c5f781dfefac23d30a89256dd2e8ca22464.tar.bz2 | |
Convert 'getScrollPosition' from port to request.
| -rw-r--r-- | background_scripts/main.js | 31 | ||||
| -rw-r--r-- | content_scripts/vimium_frontend.coffee | 15 | 
2 files changed, 13 insertions, 33 deletions
| diff --git a/background_scripts/main.js b/background_scripts/main.js index 4dc11181..d770bb56 100644 --- a/background_scripts/main.js +++ b/background_scripts/main.js @@ -16,7 +16,6 @@ var namedKeyRegex = /^(<(?:[amc]-.|(?:[amc]-)?[a-z0-9]{2,5})>)(.*)$/;  // Port handler mapping  var portHandlers = {    keyDown:              handleKeyDown, -  returnScrollPosition: handleReturnScrollPosition,    getCurrentTabUrl:     getCurrentTabUrl,    settings:             handleSettings,    filterCompleter:      filterCompleter @@ -40,7 +39,6 @@ var sendRequestHandlers = {  // Event handlers  var selectionChangedHandlers = []; -var getScrollPositionHandlers = {}; // tabId -> function(tab, scrollX, scrollY);  var tabLoadedHandlers = {}; // tabId -> function()  var completionSources = { @@ -88,15 +86,6 @@ chrome.extension.onRequest.addListener(function (request, sender, sendResponse)      sendResponse(sendRequestHandlers[request.handler](request, sender));  }); -function handleReturnScrollPosition(args) { -  if (getScrollPositionHandlers[args.currentTab.id]) { -    // Delete first to be sure there's no circular events. -    var toCall = getScrollPositionHandlers[args.currentTab.id]; -    delete getScrollPositionHandlers[args.currentTab.id]; -    toCall(args.currentTab, args.scrollX, args.scrollY); -  } -} -  /*   * Used by the content scripts to get their full URL. This is needed for URLs like "view-source:http:// .."   * because window.location doesn't know anything about the Chrome-specific "view-source:". @@ -306,14 +295,6 @@ function repeatFunction(func, totalCount, currentCount, frameId) {      func(function() { repeatFunction(func, totalCount, currentCount + 1, frameId); }, frameId);  } -// Returns the scroll coordinates of the given tab. Pass in a callback of the form: -//   function(tab, scrollX, scrollY) { .. } -function getScrollPosition(tab, callback) { -  getScrollPositionHandlers[tab.id] = callback; -  var scrollPort = chrome.tabs.connect(tab.id, { name: "getScrollPosition" }); -  scrollPort.postMessage({currentTab: tab}); -} -  // Start action functions  function createTab(callback) {    chrome.tabs.create({}, function(tab) { callback(); }); @@ -783,11 +764,13 @@ function init() {        for (var j in windows[i].tabs) {          var tab = windows[i].tabs[j];          updateOpenTabs(tab); -        getScrollPosition(tab, function(tab, scrollX, scrollY) { -          // Not using the tab defined in the for loop because -          // it might have changed by the time this callback is activated. -          updateScrollPosition(tab, scrollX, scrollY); -        }); +	chrome.tabs.sendRequest(tab.id, { name: "getScrollPosition" }, function() { +	    return function(response) { +		if (response === undefined) +		    return; +		updateScrollPosition(tab, response.scrollX, response.scrollY); +	    }; +	}());        }      }    }); diff --git a/content_scripts/vimium_frontend.coffee b/content_scripts/vimium_frontend.coffee index 21c366e9..8ba59b5c 100644 --- a/content_scripts/vimium_frontend.coffee +++ b/content_scripts/vimium_frontend.coffee @@ -119,9 +119,13 @@ initializePreDomReady = ->          focusThisFrame(request.highlight)      else if (request.name == "refreshCompletionKeys")        refreshCompletionKeys(request) +    else if (request.name == "getScrollPosition") +      sendResponse +        scrollX: window.scrollX +        scrollY: window.scrollY -    # Free up the resources used by this open connection. -    sendResponse({}) +    # Ensure the sendResponse callback is freed. +    false    chrome.extension.onConnect.addListener (port, name) ->      if (port.name == "executePageCommand") @@ -133,13 +137,6 @@ initializePreDomReady = ->              Utils.invokeCommandString(args.command) for i in [0...args.count]          refreshCompletionKeys(args) -    else if (port.name == "getScrollPosition") -      port.onMessage.addListener (args) -> -        scrollPort = chrome.extension.connect({ name: "returnScrollPosition" }) -        scrollPort.postMessage -          scrollX: window.scrollX, -          scrollY: window.scrollY, -          currentTab: args.currentTab      else if (port.name == "setScrollPosition")        port.onMessage.addListener (args) ->          if (args.scrollX > 0 || args.scrollY > 0) | 
