1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Use of this source code is governed by a BSD-style license that can be 3ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// found in the LICENSE file. 4ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 5ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_ID_MAP_H_ 6ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_ID_MAP_H_ 7ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#pragma once 8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <map> 10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include <utility> 11ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/basictypes.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/singleton.h" 14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// This class keeps track of a map between renderer IDs and tab/window IDs, for 16ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// use on the IO thread. All methods should be called on the IO thread except 17ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// for Init and Shutdown. 18ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenclass ExtensionTabIdMap { 19ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen public: 20ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen static ExtensionTabIdMap* GetInstance(); 21ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 22ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // These are called on the UI thread to start and stop listening to tab 23ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // notifications. 24ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void Init(); 25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void Shutdown(); 26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Looks up the tab and window ID for a given render view. Returns true 28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // if we have the IDs in our map. Called on the IO thread. 29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen bool GetTabAndWindowId( 30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int render_process_host_id, int routing_id, int* tab_id, int* window_id); 31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 32ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen private: 33ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen class TabObserver; 34ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend class TabObserver; 35ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen friend struct DefaultSingletonTraits<ExtensionTabIdMap>; 36ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 37ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen typedef std::pair<int, int> RenderId; 38ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen typedef std::pair<int, int> TabAndWindowId; 39ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen typedef std::map<RenderId, TabAndWindowId> TabAndWindowIdMap; 40ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 41ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ExtensionTabIdMap(); 42ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen ~ExtensionTabIdMap(); 43ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 44ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen // Adds or removes a render view from our map. 45ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void SetTabAndWindowId( 46ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int render_process_host_id, int routing_id, int tab_id, int window_id); 47ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen void ClearTabAndWindowId( 48ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen int render_process_host_id, int routing_id); 49ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 50ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabObserver* observer_; 51ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen TabAndWindowIdMap map_; 52ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 53ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen DISALLOW_COPY_AND_ASSIGN(ExtensionTabIdMap); 54ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}; 55ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen 56ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_ID_MAP_H_ 57