• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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