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 "chrome/common/extensions/extension_set.h" 12 #include "content/public/browser/notification_observer.h" 13 #include "content/public/browser/notification_registrar.h" 14 #include "content/public/browser/web_contents_observer.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 27 // Responsible for granting and revoking tab-specific permissions to extensions 28 // with the activeTab or tabCapture permission. 29 class ActiveTabPermissionGranter : public content::WebContentsObserver, 30 public content::NotificationObserver { 31 public: 32 ActiveTabPermissionGranter(content::WebContents* web_contents, 33 int tab_id, 34 Profile* profile); 35 virtual ~ActiveTabPermissionGranter(); 36 37 // If |extension| has the activeTab or tabCapture permission, grants 38 // tab-specific permissions to it until the next page navigation or refresh. 39 void GrantIfRequested(const Extension* extension); 40 41 private: 42 // content::WebContentsObserver implementation. 43 virtual void DidNavigateMainFrame( 44 const content::LoadCommittedDetails& details, 45 const content::FrameNavigateParams& params) OVERRIDE; 46 virtual void WebContentsDestroyed(content::WebContents* web_contents) 47 OVERRIDE; 48 49 // content::NotificationObserver implementation. 50 virtual void Observe(int type, 51 const content::NotificationSource& source, 52 const content::NotificationDetails& details) OVERRIDE; 53 54 // Clears any tab-specific permissions for all extensions on |tab_id_| and 55 // notifies renderers. 56 void ClearActiveExtensionsAndNotify(); 57 58 // The tab ID for this tab. 59 int tab_id_; 60 61 // Extensions with the activeTab permission that have been granted 62 // tab-specific permissions until the next navigation/refresh. 63 ExtensionSet granted_extensions_; 64 65 // Listen to extension unloaded notifications. 66 content::NotificationRegistrar registrar_; 67 68 DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranter); 69 }; 70 71 } // namespace extensions 72 73 #endif // CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_ 74