Home | History | Annotate | Download | only in browser
      1 // Copyright 2014 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 EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_
      6 #define EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_
      7 
      8 #include <string>
      9 
     10 #include "base/compiler_specific.h"
     11 #include "base/macros.h"
     12 #include "content/public/browser/web_contents_observer.h"
     13 
     14 namespace content {
     15 class BrowserContext;
     16 class RenderViewHost;
     17 class WebContents;
     18 }
     19 
     20 namespace extensions {
     21 class Extension;
     22 
     23 // A web contents observer used for renderer and extension processes. Grants the
     24 // renderer access to certain URL scheme patterns for extensions and notifies
     25 // the renderer that the extension was loaded.
     26 //
     27 // Extension system embedders must create an instance for every extension
     28 // WebContents. It must be a subclass so that creating an instance via
     29 // content::WebContentsUserData::CreateForWebContents() provides an object of
     30 // the correct type. For an example, see ChromeExtensionWebContentsObserver.
     31 class ExtensionWebContentsObserver : public content::WebContentsObserver {
     32  protected:
     33   explicit ExtensionWebContentsObserver(content::WebContents* web_contents);
     34   virtual ~ExtensionWebContentsObserver();
     35 
     36   content::BrowserContext* browser_context() { return browser_context_; }
     37 
     38   // content::WebContentsObserver overrides.
     39 
     40   // A subclass should invoke this method to finish extension process setup.
     41   virtual void RenderViewCreated(content::RenderViewHost* render_view_host)
     42       OVERRIDE;
     43 
     44   // Returns the extension or app associated with a render view host. Returns
     45   // NULL if the render view host is not for a valid extension.
     46   const Extension* GetExtension(content::RenderViewHost* render_view_host);
     47 
     48   // Updates ViewType for RenderViewHost based on GetViewType(web_contents()).
     49   void NotifyRenderViewType(content::RenderViewHost* render_view_host);
     50 
     51   // Returns the extension or app ID associated with a render view host. Returns
     52   // the empty string if the render view host is not for a valid extension.
     53   static std::string GetExtensionId(content::RenderViewHost* render_view_host);
     54 
     55  private:
     56   // The BrowserContext associated with the WebContents being observed.
     57   content::BrowserContext* browser_context_;
     58 
     59   DISALLOW_COPY_AND_ASSIGN(ExtensionWebContentsObserver);
     60 };
     61 
     62 }  // namespace extensions
     63 
     64 #endif  // EXTENSIONS_BROWSER_EXTENSION_WEB_CONTENTS_OBSERVER_H_
     65