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 "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