1 // Copyright 2013 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_APP_WINDOW_CONTENTS_H_ 6 #define APPS_APP_WINDOW_CONTENTS_H_ 7 8 #include <vector> 9 10 #include "apps/app_window.h" 11 #include "base/basictypes.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "content/public/browser/notification_observer.h" 14 #include "content/public/browser/web_contents_observer.h" 15 #include "extensions/browser/extension_function_dispatcher.h" 16 17 class GURL; 18 19 namespace content { 20 class BrowserContext; 21 } 22 23 namespace extensions { 24 struct DraggableRegion; 25 } 26 27 namespace apps { 28 29 // AppWindowContents class specific to app windows. It maintains a 30 // WebContents instance and observes it for the purpose of passing 31 // messages to the extensions system. 32 class AppWindowContentsImpl 33 : public AppWindowContents, 34 public content::NotificationObserver, 35 public content::WebContentsObserver, 36 public extensions::ExtensionFunctionDispatcher::Delegate { 37 public: 38 explicit AppWindowContentsImpl(AppWindow* host); 39 virtual ~AppWindowContentsImpl(); 40 41 // AppWindowContents 42 virtual void Initialize(content::BrowserContext* context, 43 const GURL& url) OVERRIDE; 44 virtual void LoadContents(int32 creator_process_id) OVERRIDE; 45 virtual void NativeWindowChanged(NativeAppWindow* native_app_window) OVERRIDE; 46 virtual void NativeWindowClosed() OVERRIDE; 47 virtual void DispatchWindowShownForTests() const OVERRIDE; 48 virtual content::WebContents* GetWebContents() const OVERRIDE; 49 50 private: 51 // content::NotificationObserver 52 virtual void Observe(int type, 53 const content::NotificationSource& source, 54 const content::NotificationDetails& details) OVERRIDE; 55 56 // content::WebContentsObserver 57 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 58 59 // extensions::ExtensionFunctionDispatcher::Delegate 60 virtual extensions::WindowController* GetExtensionWindowController() const 61 OVERRIDE; 62 virtual content::WebContents* GetAssociatedWebContents() const OVERRIDE; 63 64 void OnRequest(const ExtensionHostMsg_Request_Params& params); 65 void UpdateDraggableRegions( 66 const std::vector<extensions::DraggableRegion>& regions); 67 void SuspendRenderViewHost(content::RenderViewHost* rvh); 68 69 AppWindow* host_; // This class is owned by |host_| 70 GURL url_; 71 content::NotificationRegistrar registrar_; 72 scoped_ptr<content::WebContents> web_contents_; 73 scoped_ptr<extensions::ExtensionFunctionDispatcher> 74 extension_function_dispatcher_; 75 76 DISALLOW_COPY_AND_ASSIGN(AppWindowContentsImpl); 77 }; 78 79 } // namespace apps 80 81 #endif // APPS_APP_WINDOW_CONTENTS_H_ 82