1// Copyright (c) 2012 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_ACTIVE_TAB_PERMISSION_GRANTER_H_ 6#define CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_ 7 8#include <set> 9#include <string> 10 11#include "base/scoped_observer.h" 12#include "content/public/browser/web_contents_observer.h" 13#include "extensions/browser/extension_registry_observer.h" 14#include "extensions/common/extension_set.h" 15#include "extensions/common/url_pattern_set.h" 16 17class Profile; 18 19namespace content { 20class WebContents; 21} 22 23namespace extensions { 24 25class Extension; 26class ExtensionRegistry; 27 28// Responsible for granting and revoking tab-specific permissions to extensions 29// with the activeTab or tabCapture permission. 30class ActiveTabPermissionGranter 31 : public content::WebContentsObserver, 32 public extensions::ExtensionRegistryObserver { 33 public: 34 ActiveTabPermissionGranter(content::WebContents* web_contents, 35 int tab_id, 36 Profile* profile); 37 virtual ~ActiveTabPermissionGranter(); 38 39 // If |extension| has the activeTab or tabCapture permission, grants 40 // tab-specific permissions to it until the next page navigation or refresh. 41 void GrantIfRequested(const Extension* extension); 42 43 private: 44 // content::WebContentsObserver implementation. 45 virtual void DidNavigateMainFrame( 46 const content::LoadCommittedDetails& details, 47 const content::FrameNavigateParams& params) OVERRIDE; 48 virtual void WebContentsDestroyed() OVERRIDE; 49 50 // extensions::ExtensionRegistryObserver implementation. 51 virtual void OnExtensionUnloaded(content::BrowserContext* browser_context, 52 const Extension* extension, 53 UnloadedExtensionInfo::Reason reason) 54 OVERRIDE; 55 56 // Clears any tab-specific permissions for all extensions on |tab_id_| and 57 // notifies renderers. 58 void ClearActiveExtensionsAndNotify(); 59 60 // The tab ID for this tab. 61 int tab_id_; 62 63 // Extensions with the activeTab permission that have been granted 64 // tab-specific permissions until the next navigation/refresh. 65 ExtensionSet granted_extensions_; 66 67 // Listen to extension unloaded notifications. 68 ScopedObserver<ExtensionRegistry, ExtensionRegistryObserver> 69 extension_registry_observer_; 70 71 DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranter); 72}; 73 74} // namespace extensions 75 76#endif // CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_ 77