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); 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