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