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 17class Profile; 18 19namespace content { 20class WebContents; 21} 22 23namespace extensions { 24 25class Extension; 26 27// Responsible for granting and revoking tab-specific permissions to extensions 28// with the activeTab or tabCapture permission. 29class 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 // Returns true if |extension| has been granted tab-specific permissions 42 // for this tab. 43 bool IsGranted(const Extension* extension); 44 45 private: 46 // content::WebContentsObserver implementation. 47 virtual void DidNavigateMainFrame( 48 const content::LoadCommittedDetails& details, 49 const content::FrameNavigateParams& params) OVERRIDE; 50 virtual void WebContentsDestroyed(content::WebContents* web_contents) 51 OVERRIDE; 52 53 // content::NotificationObserver implementation. 54 virtual void Observe(int type, 55 const content::NotificationSource& source, 56 const content::NotificationDetails& details) OVERRIDE; 57 58 // Clears any tab-specific permissions for all extensions on |tab_id_| and 59 // notifies renderers. 60 void ClearActiveExtensionsAndNotify(); 61 62 // Gets the current page id. 63 int32 GetPageID(); 64 65 // The tab ID for this tab. 66 int tab_id_; 67 68 // Extensions with the activeTab permission that have been granted 69 // tab-specific permissions until the next navigation/refresh. 70 ExtensionSet granted_extensions_; 71 72 // Listen to extension unloaded notifications. 73 content::NotificationRegistrar registrar_; 74 75 DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranter); 76}; 77 78} // namespace extensions 79 80#endif // CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_ 81