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 17 class Profile; 18 19 namespace content { 20 class WebContents; 21 } 22 23 namespace extensions { 24 25 class Extension; 26 class ExtensionRegistry; 27 28 // Responsible for granting and revoking tab-specific permissions to extensions 29 // with the activeTab or tabCapture permission. 30 class 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