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 CHROME_BROWSER_UI_APPS_CHROME_APP_DELEGATE_H_
6#define CHROME_BROWSER_UI_APPS_CHROME_APP_DELEGATE_H_
7
8#include "base/callback.h"
9#include "base/memory/scoped_ptr.h"
10#include "content/public/browser/notification_observer.h"
11#include "content/public/browser/notification_registrar.h"
12#include "extensions/browser/app_window/app_delegate.h"
13#include "ui/base/window_open_disposition.h"
14#include "ui/gfx/rect.h"
15
16namespace content {
17class BrowserContext;
18class WebContents;
19}
20
21class ScopedKeepAlive;
22
23class ChromeAppDelegate : public extensions::AppDelegate,
24                          public content::NotificationObserver {
25 public:
26  // Pass a ScopedKeepAlive to prevent the browser process from shutting down
27  // while this object exists.
28  explicit ChromeAppDelegate(scoped_ptr<ScopedKeepAlive> keep_alive);
29  virtual ~ChromeAppDelegate();
30
31  static void DisableExternalOpenForTesting();
32
33 private:
34  class NewWindowContentsDelegate;
35
36  // extensions::AppDelegate:
37  virtual void InitWebContents(content::WebContents* web_contents) OVERRIDE;
38  virtual void ResizeWebContents(content::WebContents* web_contents,
39                                 const gfx::Size& size) OVERRIDE;
40  virtual content::WebContents* OpenURLFromTab(
41      content::BrowserContext* context,
42      content::WebContents* source,
43      const content::OpenURLParams& params) OVERRIDE;
44  virtual void AddNewContents(content::BrowserContext* context,
45                              content::WebContents* new_contents,
46                              WindowOpenDisposition disposition,
47                              const gfx::Rect& initial_pos,
48                              bool user_gesture,
49                              bool* was_blocked) OVERRIDE;
50  virtual content::ColorChooser* ShowColorChooser(
51      content::WebContents* web_contents,
52      SkColor initial_color) OVERRIDE;
53  virtual void RunFileChooser(
54      content::WebContents* tab,
55      const content::FileChooserParams& params) OVERRIDE;
56  virtual void RequestMediaAccessPermission(
57      content::WebContents* web_contents,
58      const content::MediaStreamRequest& request,
59      const content::MediaResponseCallback& callback,
60      const extensions::Extension* extension) OVERRIDE;
61  virtual bool CheckMediaAccessPermission(
62      content::WebContents* web_contents,
63      const GURL& security_origin,
64      content::MediaStreamType type,
65      const extensions::Extension* extension) OVERRIDE;
66  virtual int PreferredIconSize() OVERRIDE;
67  virtual void SetWebContentsBlocked(content::WebContents* web_contents,
68                                     bool blocked) OVERRIDE;
69  virtual bool IsWebContentsVisible(
70      content::WebContents* web_contents) OVERRIDE;
71  virtual void SetTerminatingCallback(const base::Closure& callback) OVERRIDE;
72
73  // content::NotificationObserver:
74  virtual void Observe(int type,
75                       const content::NotificationSource& source,
76                       const content::NotificationDetails& details) OVERRIDE;
77
78  scoped_ptr<ScopedKeepAlive> keep_alive_;
79  scoped_ptr<NewWindowContentsDelegate> new_window_contents_delegate_;
80  base::Closure terminating_callback_;
81  content::NotificationRegistrar registrar_;
82
83  DISALLOW_COPY_AND_ASSIGN(ChromeAppDelegate);
84};
85
86#endif  // CHROME_BROWSER_UI_APPS_CHROME_APP_DELEGATE_H_
87