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 8 namespace aura { 9 class Window; 10 class WindowTreeHost; 11 } 12 13 namespace content { 14 class BrowserContext; 15 } 16 17 namespace extensions { 18 class AppWindow; 19 class Extension; 20 class 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. 27 class 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