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 EXTENSIONS_BROWSER_APP_WINDOW_APP_DELEGATE_H_
6#define EXTENSIONS_BROWSER_APP_WINDOW_APP_DELEGATE_H_
7
8#include "base/callback_forward.h"
9#include "content/public/common/media_stream_request.h"
10#include "third_party/skia/include/core/SkColor.h"
11#include "ui/base/window_open_disposition.h"
12
13namespace content {
14class BrowserContext;
15class ColorChooser;
16struct FileChooserParams;
17struct OpenURLParams;
18class WebContents;
19}
20
21namespace gfx {
22class Rect;
23class Size;
24}
25
26namespace extensions {
27
28class Extension;
29
30// Interface to give packaged apps access to services in the browser, for things
31// like handling links and showing UI prompts to the user.
32class AppDelegate {
33 public:
34  virtual ~AppDelegate() {}
35
36  // General initialization.
37  virtual void InitWebContents(content::WebContents* web_contents) = 0;
38
39  // Resizes WebContents.
40  virtual void ResizeWebContents(content::WebContents* web_contents,
41                                 const gfx::Size& size) = 0;
42
43  // Link handling.
44  virtual content::WebContents* OpenURLFromTab(
45      content::BrowserContext* context,
46      content::WebContents* source,
47      const content::OpenURLParams& params) = 0;
48  virtual void AddNewContents(content::BrowserContext* context,
49                              content::WebContents* new_contents,
50                              WindowOpenDisposition disposition,
51                              const gfx::Rect& initial_pos,
52                              bool user_gesture,
53                              bool* was_blocked) = 0;
54
55  // Feature support.
56  virtual content::ColorChooser* ShowColorChooser(
57      content::WebContents* web_contents,
58      SkColor initial_color) = 0;
59  virtual void RunFileChooser(content::WebContents* tab,
60                              const content::FileChooserParams& params) = 0;
61  virtual void RequestMediaAccessPermission(
62      content::WebContents* web_contents,
63      const content::MediaStreamRequest& request,
64      const content::MediaResponseCallback& callback,
65      const Extension* extension) = 0;
66  virtual bool CheckMediaAccessPermission(content::WebContents* web_contents,
67                                          const GURL& security_origin,
68                                          content::MediaStreamType type,
69                                          const Extension* extension) = 0;
70  virtual int PreferredIconSize() = 0;
71
72  // Web contents modal dialog support.
73  virtual void SetWebContentsBlocked(content::WebContents* web_contents,
74                                     bool blocked) = 0;
75  virtual bool IsWebContentsVisible(content::WebContents* web_contents) = 0;
76
77  // |callback| will be called when the process is about to terminate.
78  virtual void SetTerminatingCallback(const base::Closure& callback) = 0;
79};
80
81}  // namespace extensions
82
83#endif  // EXTENSIONS_BROWSER_APP_WINDOW_APP_DELEGATE_H_
84