Home | History | Annotate | Download | only in extensions
      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