• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "chrome/browser/extensions/extension_function_dispatcher.h"
11 #include "content/public/browser/web_contents_delegate.h"
12 #include "content/public/browser/web_contents_observer.h"
13 #include "content/public/common/page_zoom.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 ExtensionFunctionDispatcher::Delegate {
39  public:
40   PanelHost(Panel* panel, Profile* profile);
41   virtual ~PanelHost();
42 
43   void Init(const GURL& url);
web_contents()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(const content::WebContents* source,
55                                       unsigned changed_flags) OVERRIDE;
56   virtual void AddNewContents(content::WebContents* source,
57                               content::WebContents* new_contents,
58                               WindowOpenDisposition disposition,
59                               const gfx::Rect& initial_pos,
60                               bool user_gesture,
61                               bool* was_blocked) OVERRIDE;
62   virtual void ActivateContents(content::WebContents* contents) OVERRIDE;
63   virtual void DeactivateContents(content::WebContents* contents) OVERRIDE;
64   virtual void LoadingStateChanged(content::WebContents* source) OVERRIDE;
65   virtual void CloseContents(content::WebContents* source) OVERRIDE;
66   virtual void MoveContents(content::WebContents* source,
67                             const gfx::Rect& pos) OVERRIDE;
68   virtual bool IsPopupOrPanel(
69       const content::WebContents* source) const OVERRIDE;
70   virtual void ContentsZoomChange(bool zoom_in) OVERRIDE;
71   virtual void HandleKeyboardEvent(
72       content::WebContents* source,
73       const content::NativeWebKeyboardEvent& event) OVERRIDE;
74   virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE;
75   virtual void ResizeDueToAutoResize(content::WebContents* web_contents,
76                                      const gfx::Size& new_size) OVERRIDE;
77 
78   // content::WebContentsObserver overrides.
79   virtual void RenderViewCreated(
80       content::RenderViewHost* render_view_host) OVERRIDE;
81   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
82   virtual void WebContentsDestroyed(
83       content::WebContents* web_contents) OVERRIDE;
84   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
85 
86   // ExtensionFunctionDispatcher::Delegate overrides.
87   virtual extensions::WindowController* GetExtensionWindowController() const
88       OVERRIDE;
89   virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE;
90 
91   // Actions on web contents.
92   void Reload();
93   void ReloadIgnoringCache();
94   void StopLoading();
95   void Zoom(content::PageZoom zoom);
96 
97  private:
98   // Helper to close panel via the message loop.
99   void ClosePanel();
100 
101   // Message handlers.
102   void OnRequest(const ExtensionHostMsg_Request_Params& params);
103 
104   Panel* panel_;  // Weak, owns us.
105   Profile* profile_;
106   ExtensionFunctionDispatcher extension_function_dispatcher_;
107 
108   scoped_ptr<content::WebContents> web_contents_;
109 
110   // The following factory is used to close the panel via the message loop.
111   base::WeakPtrFactory<PanelHost> weak_factory_;
112 
113   DISALLOW_COPY_AND_ASSIGN(PanelHost);
114 };
115 
116 #endif  // CHROME_BROWSER_UI_PANELS_PANEL_HOST_H_
117