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_WINDOW_CLIENT_H_
6#define EXTENSIONS_BROWSER_APP_WINDOW_APP_WINDOW_CLIENT_H_
7
8#include "base/callback_forward.h"
9#include "extensions/browser/app_window/app_window.h"
10
11namespace content {
12class BrowserContext;
13class WebContents;
14}
15
16namespace extensions {
17
18class Extension;
19class NativeAppWindow;
20
21// Sets up global state for the app window system. Should be Set() once in each
22// process. This should be implemented by the client of the app window system.
23// TODO(hashimoto): Move some functions to ExtensionsClient.
24class AppWindowClient {
25 public:
26  virtual ~AppWindowClient() {}
27
28  // Creates a new AppWindow for the app in |extension| for |context|.
29  // Caller takes ownership.
30  virtual AppWindow* CreateAppWindow(content::BrowserContext* context,
31                                     const Extension* extension) = 0;
32
33  // Creates a new extensions::NativeAppWindow for |window|.
34  virtual NativeAppWindow* CreateNativeAppWindow(
35      AppWindow* window,
36      const AppWindow::CreateParams& params) = 0;
37
38  // Opens DevTools window and runs the callback.
39  virtual void OpenDevToolsWindow(content::WebContents* web_contents,
40                                  const base::Closure& callback) = 0;
41
42  // Returns true if the current channel is older than dev.
43  virtual bool IsCurrentChannelOlderThanDev() = 0;
44
45  // Return the app window client.
46  static AppWindowClient* Get();
47
48  // Initialize the app window system with this app window client.
49  static void Set(AppWindowClient* client);
50};
51
52}  // namespace extensions
53
54#endif  // EXTENSIONS_BROWSER_APP_WINDOW_APP_WINDOW_CLIENT_H_
55