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_SHELL_BROWSER_DESKTOP_CONTROLLER_H_
6#define EXTENSIONS_SHELL_BROWSER_DESKTOP_CONTROLLER_H_
7
8namespace aura {
9class Window;
10class WindowTreeHost;
11}
12
13namespace content {
14class BrowserContext;
15}
16
17namespace extensions {
18class AppWindow;
19class Extension;
20class ShellAppWindow;
21
22// DesktopController is an interface to construct the window environment in
23// extensions shell. ShellDesktopController provides a default implementation
24// for app_shell, and embedder (such as athena) can provide its own.
25// TODO(jamescook|oshima): Clean up this interface now that there is only one
26// way to create an app window.
27class DesktopController {
28 public:
29  DesktopController();
30  virtual ~DesktopController();
31
32  // Returns the single instance of the desktop. (Stateless functions like
33  // ShellAppWindowCreateFunction need to be able to access the desktop, so
34  // we need a singleton somewhere).
35  static DesktopController* instance();
36
37  // Returns the WindowTreeHost created by this DesktopController.
38  virtual aura::WindowTreeHost* GetHost() = 0;
39
40  // Creates a new app window and adds it to the desktop. The desktop maintains
41  // ownership of the window. The window must be closed before |extension| is
42  // destroyed.
43  virtual AppWindow* CreateAppWindow(content::BrowserContext* context,
44                                     const Extension* extension) = 0;
45
46  // Attaches the window to our window hierarchy.
47  virtual void AddAppWindow(aura::Window* window) = 0;
48
49  // Closes and destroys the app windows.
50  virtual void CloseAppWindows() = 0;
51};
52
53}  // namespace extensions
54
55#endif  // EXTENSIONS_SHELL_BROWSER_DESKTOP_CONTROLLER_H_
56