           func tab.id, { file: file, allFrames: contentScripts.all_frames }, checkLastRuntimeError
 
 currentVersion = Utils.getCurrentVersion()
-tabQueue = {} # windowId -> Array
 tabInfoMap = {} # tabId -> object with various tab properties
 keyQueue = "" # Queue of keys typed
 validFirstKeys = {}


# Tidy up tab caches when tabs are removed.  We cannot rely on unregisterFrame because Chrome does not always
# provide sender.tab there.
# NOTE(smblott) (2015-05-05) This may break restoreTab on legacy Chrome versions, but we'll be moving to
# chrome.sessions support only soon anyway.
chrome.tabs.onRemoved.addListener (tabId) ->
  delete cache[tabId] for cache in [ frameIdsForTab, urlForTab, tabInfoMap ]


      chrome.tabs.remove(tab.id)
      selectionChangedHandlers.push(callback))
  restoreTab: (callback) ->
    chrome.sessions.restore null, ->
        callback() unless chrome.runtime.lastError
  openCopiedUrlInCurrentTab: (request) -> TabOperations.openUrlInCurrentTab({ url: Clipboard.paste() })
  openCopiedUrlInNewTab: (request) -> TabOperations.openUrlInNewTab({ url: Clipboard.paste() })
  togglePinTab: (request) ->
