// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_ID_MAP_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_ID_MAP_H_
#pragma once
#include <map>
#include <utility>
#include "base/basictypes.h"
#include "base/memory/singleton.h"
// This class keeps track of a map between renderer IDs and tab/window IDs, for
// use on the IO thread. All methods should be called on the IO thread except
// for Init and Shutdown.
class ExtensionTabIdMap {
public:
static ExtensionTabIdMap* GetInstance();
// These are called on the UI thread to start and stop listening to tab
// notifications.
void Init();
void Shutdown();
// Looks up the tab and window ID for a given render view. Returns true
// if we have the IDs in our map. Called on the IO thread.
bool GetTabAndWindowId(
int render_process_host_id, int routing_id, int* tab_id, int* window_id);
private:
class TabObserver;
friend class TabObserver;
friend struct DefaultSingletonTraits<ExtensionTabIdMap>;
typedef std::pair<int, int> RenderId;
typedef std::pair<int, int> TabAndWindowId;
typedef std::map<RenderId, TabAndWindowId> TabAndWindowIdMap;
ExtensionTabIdMap();
~ExtensionTabIdMap();
// Adds or removes a render view from our map.
void SetTabAndWindowId(
int render_process_host_id, int routing_id, int tab_id, int window_id);
void ClearTabAndWindowId(
int render_process_host_id, int routing_id);
TabObserver* observer_;
TabAndWindowIdMap map_;
DISALLOW_COPY_AND_ASSIGN(ExtensionTabIdMap);
};
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_TAB_ID_MAP_H_