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