| // Copyright 2014 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 EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_ |
| #define EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_ |
| |
| #include <string> |
| |
| #include "base/compiler_specific.h" |
| #include "base/macros.h" |
| #include "content/public/browser/web_contents_observer.h" |
| |
| namespace content { |
| class BrowserContext; |
| class RenderViewHost; |
| class WebContents; |
| } |
| |
| namespace extensions { |
| class Extension; |
| |
| // A web contents observer used for renderer and extension processes. Grants the |
| // renderer access to certain URL scheme patterns for extensions and notifies |
| // the renderer that the extension was loaded. |
| // |
| // Extension system embedders must create an instance for every extension |
| // WebContents. It must be a subclass so that creating an instance via |
| // content::WebContentsUserData::CreateForWebContents() provides an object of |
| // the correct type. For an example, see ChromeExtensionWebContentsObserver. |
| class ExtensionWebContentsObserver : public content::WebContentsObserver { |
| protected: |
| explicit ExtensionWebContentsObserver(content::WebContents* web_contents); |
| virtual ~ExtensionWebContentsObserver(); |
| |
| content::BrowserContext* browser_context() { return browser_context_; } |
| |
| // content::WebContentsObserver overrides. |
| |
| // A subclass should invoke this method to finish extension process setup. |
| virtual void RenderViewCreated(content::RenderViewHost* render_view_host) |
| OVERRIDE; |
| |
| // Returns the extension or app associated with a render view host. Returns |
| // NULL if the render view host is not for a valid extension. |
| const Extension* GetExtension(content::RenderViewHost* render_view_host); |
| |
| // Updates ViewType for RenderViewHost based on GetViewType(web_contents()). |
| void NotifyRenderViewType(content::RenderViewHost* render_view_host); |
| |
| // Returns the extension or app ID associated with a render view host. Returns |
| // the empty string if the render view host is not for a valid extension. |
| static std::string GetExtensionId(content::RenderViewHost* render_view_host); |
| |
| private: |
| // The BrowserContext associated with the WebContents being observed. |
| content::BrowserContext* browser_context_; |
| |
| DISALLOW_COPY_AND_ASSIGN(ExtensionWebContentsObserver); |
| }; |
| |
| } // namespace extensions |
| |
| #endif // EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_ |