• 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 "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);
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(
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