Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / panels / panel_host.h
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(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,
65                                    bool to_different_document) OVERRIDE;
66   virtual void CloseContents(content::WebContents* source) OVERRIDE;
67   virtual void MoveContents(content::WebContents* source,
68                             const gfx::Rect& pos) OVERRIDE;
69   virtual bool IsPopupOrPanel(
70       const content::WebContents* source) const OVERRIDE;
71   virtual void ContentsZoomChange(bool zoom_in) OVERRIDE;
72   virtual void HandleKeyboardEvent(
73       content::WebContents* source,
74       const content::NativeWebKeyboardEvent& event) OVERRIDE;
75   virtual void WebContentsFocused(content::WebContents* contents) OVERRIDE;
76   virtual void ResizeDueToAutoResize(content::WebContents* web_contents,
77                                      const gfx::Size& new_size) OVERRIDE;
78
79   // content::WebContentsObserver overrides.
80   virtual void RenderViewCreated(
81       content::RenderViewHost* render_view_host) OVERRIDE;
82   virtual void RenderProcessGone(base::TerminationStatus status) OVERRIDE;
83   virtual void WebContentsDestroyed() OVERRIDE;
84   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
85
86   // extensions::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   extensions::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_