1 // Copyright 2014 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 APPS_CUSTOM_LAUNCHER_PAGE_CONTENTS_H_ 6 #define APPS_CUSTOM_LAUNCHER_PAGE_CONTENTS_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "content/public/browser/web_contents_delegate.h" 10 #include "content/public/browser/web_contents_observer.h" 11 #include "extensions/browser/extension_function_dispatcher.h" 12 13 class GURL; 14 15 namespace content { 16 class BrowserContext; 17 } 18 19 namespace extensions { 20 class AppDelegate; 21 class AppWebContentsHelper; 22 } 23 24 namespace apps { 25 26 // Manages the web contents for extension-hosted launcher pages. The 27 // implementation for this class should create and maintain the WebContents for 28 // the page, and handle any message passing between the web contents and the 29 // extension system. 30 class CustomLauncherPageContents 31 : public content::WebContentsDelegate, 32 public content::WebContentsObserver, 33 public extensions::ExtensionFunctionDispatcher::Delegate { 34 public: 35 CustomLauncherPageContents(scoped_ptr<extensions::AppDelegate> app_delegate, 36 const std::string& extension_id); 37 virtual ~CustomLauncherPageContents(); 38 39 // Called to initialize and load the WebContents. 40 void Initialize(content::BrowserContext* context, const GURL& url); 41 web_contents()42 content::WebContents* web_contents() const { return web_contents_.get(); } 43 44 // content::WebContentsDelegate overrides: 45 virtual content::WebContents* OpenURLFromTab( 46 content::WebContents* source, 47 const content::OpenURLParams& params) OVERRIDE; 48 virtual void AddNewContents(content::WebContents* source, 49 content::WebContents* new_contents, 50 WindowOpenDisposition disposition, 51 const gfx::Rect& initial_pos, 52 bool user_gesture, 53 bool* was_blocked) OVERRIDE; 54 virtual bool IsPopupOrPanel( 55 const content::WebContents* source) const OVERRIDE; 56 virtual bool ShouldSuppressDialogs() OVERRIDE; 57 virtual bool PreHandleGestureEvent( 58 content::WebContents* source, 59 const blink::WebGestureEvent& event) OVERRIDE; 60 virtual content::ColorChooser* OpenColorChooser( 61 content::WebContents* web_contents, 62 SkColor color, 63 const std::vector<content::ColorSuggestion>& suggestions) OVERRIDE; 64 virtual void RunFileChooser( 65 content::WebContents* tab, 66 const content::FileChooserParams& params) OVERRIDE; 67 virtual void RequestToLockMouse(content::WebContents* web_contents, 68 bool user_gesture, 69 bool last_unlocked_by_target) OVERRIDE; 70 virtual void RequestMediaAccessPermission( 71 content::WebContents* web_contents, 72 const content::MediaStreamRequest& request, 73 const content::MediaResponseCallback& callback) OVERRIDE; 74 virtual bool CheckMediaAccessPermission( 75 content::WebContents* web_contents, 76 const GURL& security_origin, 77 content::MediaStreamType type) OVERRIDE; 78 79 private: 80 // content::WebContentsObserver overrides: 81 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 82 83 // extensions::ExtensionFunctionDispatcher::Delegate overrides: 84 virtual extensions::WindowController* GetExtensionWindowController() 85 const OVERRIDE; 86 virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE; 87 88 void OnRequest(const ExtensionHostMsg_Request_Params& params); 89 90 scoped_ptr<content::WebContents> web_contents_; 91 scoped_ptr<extensions::ExtensionFunctionDispatcher> 92 extension_function_dispatcher_; 93 scoped_ptr<extensions::AppDelegate> app_delegate_; 94 scoped_ptr<extensions::AppWebContentsHelper> helper_; 95 96 std::string extension_id_; 97 98 DISALLOW_COPY_AND_ASSIGN(CustomLauncherPageContents); 99 }; 100 101 } // namespace apps 102 103 #endif // APPS_CUSTOM_LAUNCHER_PAGE_CONTENTS_H_ 104