// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_ #define CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_ #include #include #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" #include "content/public/browser/web_contents_observer.h" #include "extensions/common/extension_set.h" #include "extensions/common/url_pattern_set.h" class Profile; namespace content { class WebContents; } namespace extensions { class Extension; // Responsible for granting and revoking tab-specific permissions to extensions // with the activeTab or tabCapture permission. class ActiveTabPermissionGranter : public content::WebContentsObserver, public content::NotificationObserver { public: ActiveTabPermissionGranter(content::WebContents* web_contents, int tab_id, Profile* profile); virtual ~ActiveTabPermissionGranter(); // If |extension| has the activeTab or tabCapture permission, grants // tab-specific permissions to it until the next page navigation or refresh. void GrantIfRequested(const Extension* extension); private: // content::WebContentsObserver implementation. virtual void DidNavigateMainFrame( const content::LoadCommittedDetails& details, const content::FrameNavigateParams& params) OVERRIDE; virtual void WebContentsDestroyed(content::WebContents* web_contents) OVERRIDE; // content::NotificationObserver implementation. virtual void Observe(int type, const content::NotificationSource& source, const content::NotificationDetails& details) OVERRIDE; // Clears any tab-specific permissions for all extensions on |tab_id_| and // notifies renderers. void ClearActiveExtensionsAndNotify(); // The tab ID for this tab. int tab_id_; // Extensions with the activeTab permission that have been granted // tab-specific permissions until the next navigation/refresh. ExtensionSet granted_extensions_; // Listen to extension unloaded notifications. content::NotificationRegistrar registrar_; DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranter); }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_ACTIVE_TAB_PERMISSION_GRANTER_H_