Home | History | Annotate | Download | only in panels
      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_UI_PANELS_PANEL_HOST_H_
      6 #define CHROME_BROWSER_UI_PANELS_PANEL_HOST_H_
      7 
      8 #include "base/memory/scoped_ptr.h"
      9 #include "base/memory/weak_ptr.h"
     10 #include "content/public/browser/web_contents_delegate.h"
     11 #include "content/public/browser/web_contents_observer.h"
     12 #include "content/public/common/page_zoom.h"
     13 #include "extensions/browser/extension_function_dispatcher.h"
     14 
     15 class FaviconTabHelper;
     16 class GURL;
     17 class Panel;
     18 class PrefsTabHelper;
     19 class Profile;
     20 
     21 namespace content {
     22 class WebContents;
     23 }
     24 
     25 namespace extensions {
     26 class WindowController;
     27 }
     28 
     29 namespace gfx {
     30 class Image;
     31 class Rect;
     32 }
     33 
     34 // Helper class for Panel, implementing WebContents hosting and Extension
     35 // delegates. Owned and used by Panel only.
     36 class PanelHost : public content::WebContentsDelegate,
     37                   public content::WebContentsObserver,
     38                   public extensions::ExtensionFunctionDispatcher::Delegate {
     39  public:
     40   PanelHost(Panel* panel, Profile* profile);
     41   virtual ~PanelHost();
     42 
     43   void Init(const GURL& url);
     44   content::WebContents* web_contents() { return web_contents_.get(); }
     45   void DestroyWebContents();
     46 
     47   // Returns the icon for the current page.
     48   gfx::Image GetPageIcon() const;
     49 
     50   // content::WebContentsDelegate overrides.
     51   virtual content::WebContents* OpenURLFromTab(
     52       content::WebContents* source,
     53       const content::OpenURLParams& params) OVERRIDE;
     54   virtual void NavigationStateChanged(
     55       const content::WebContents* source,
     56       content::InvalidateTypes changed_flags) OVERRIDE;
     57   virtual void AddNewContents(content::WebContents* source,
     58                               content::WebContents* new_contents,
     59                               WindowOpenDisposition disposition,
     60                               const gfx::Rect& initial_pos,
     61                               bool user_gesture,
     62                               bool* was_blocked) OVERRIDE;
     63   virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
     64   virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
     65   virtual void LoadingStateChanged(content::WebContents* source,
     66                                    bool to_different_document) OVERRIDE;
     67   virtual void CloseContents(content::WebContents* source) OVERRIDE;
     68   virtual void MoveContents(content::WebContents* source,
     69                             const gfx::Rect& pos) OVERRIDE;
     70   virtual bool IsPopupOrPanel(
     71       const content::WebContents* source) const OVERRIDE;
     72   virtual void ContentsZoomChange(bool zoom_in) OVERRIDE;
     73   virtual void HandleKeyboardEvent(
     74       content::WebContents* source,
     75       const content::NativeWebKeyboardEvent& event) OVERRIDE;
     76   virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE;
     77   virtual void ResizeDueToAutoResize(content::WebContents* web_contents,
     78                                      const gfx::Size& new_size) OVERRIDE;
     79 
     80   // content::WebContentsObserver overrides.
     81   virtual void RenderViewCreated(
     82       content::RenderViewHost* render_view_host) OVERRIDE;
     83   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
     84   virtual void WebContentsDestroyed() OVERRIDE;
     85   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
     86 
     87   // extensions::ExtensionFunctionDispatcher::Delegate overrides.
     88   virtual extensions::WindowController* GetExtensionWindowController() const
     89       OVERRIDE;
     90   virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE;
     91 
     92   // Actions on web contents.
     93   void Reload();
     94   void ReloadIgnoringCache();
     95   void StopLoading();
     96   void Zoom(content::PageZoom zoom);
     97 
     98  private:
     99   // Helper to close panel via the message loop.
    100   void ClosePanel();
    101 
    102   // Message handlers.
    103   void OnRequest(const ExtensionHostMsg_Request_Params& params);
    104 
    105   Panel* panel_;  // Weak, owns us.
    106   Profile* profile_;
    107   extensions::ExtensionFunctionDispatcher extension_function_dispatcher_;
    108 
    109   scoped_ptr<content::WebContents> web_contents_;
    110 
    111   // The following factory is used to close the panel via the message loop.
    112   base::WeakPtrFactory<PanelHost> weak_factory_;
    113 
    114   DISALLOW_COPY_AND_ASSIGN(PanelHost);
    115 };
    116 
    117 #endif  // CHROME_BROWSER_UI_PANELS_PANEL_HOST_H_
    118