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.
5 #ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_
12 #include "extensions/browser/app_window/app_window_registry.h"
13 #include "ui/aura/window_observer.h"
14 #include "ui/wm/public/activation_change_observer.h"
21 class ActivationClient;
25 namespace extensions {
29 class ChromeLauncherController;
31 class AppWindowLauncherItemController;
33 // AppWindowLauncherController observes the app window registry and the
34 // aura window manager. It handles adding and removing launcher items from
35 // ChromeLauncherController.
36 class AppWindowLauncherController
37 : public extensions::AppWindowRegistry::Observer,
38 public aura::WindowObserver,
39 public aura::client::ActivationChangeObserver {
41 explicit AppWindowLauncherController(ChromeLauncherController* owner);
42 virtual ~AppWindowLauncherController();
44 // Called by ChromeLauncherController when the active user changed and the
45 // items need to be updated.
46 virtual void ActiveUserChanged(const std::string& user_email) {}
48 // An additional user identified by |Profile|, got added to the existing
50 virtual void AdditionalUserAddedToSession(Profile* profile);
52 // Overridden from AppWindowRegistry::Observer:
53 virtual void OnAppWindowIconChanged(
54 extensions::AppWindow* app_window) OVERRIDE;
55 virtual void OnAppWindowShown(extensions::AppWindow* app_window) OVERRIDE;
56 virtual void OnAppWindowHidden(extensions::AppWindow* app_window) OVERRIDE;
58 // Overriden from aura::WindowObserver:
59 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
61 // Overriden from client::ActivationChangeObserver:
62 virtual void OnWindowActivated(aura::Window* gained_active,
63 aura::Window* lost_active) OVERRIDE;
66 // Registers a app window with the shelf and this object.
67 void RegisterApp(extensions::AppWindow* app_window);
69 // Unregisters a app window with the shelf and this object.
70 void UnregisterApp(aura::Window* window);
72 // Check if a given window is known to the launcher controller.
73 bool IsRegisteredApp(aura::Window* window);
76 typedef std::map<std::string, AppWindowLauncherItemController*>
78 typedef std::map<aura::Window*, std::string> WindowToAppShelfIdMap;
80 AppWindowLauncherItemController* ControllerForWindow(aura::Window* window);
82 ChromeLauncherController* owner_;
83 // A set of unowned AppWindowRegistry pointers for loaded users.
84 // Note that this will only be used with multiple users in the side by side
86 std::set<extensions::AppWindowRegistry*> registry_;
87 aura::client::ActivationClient* activation_client_;
89 // Map of app launcher id to controller.
90 AppControllerMap app_controller_map_;
92 // Allows us to get from an aura::Window to the app shelf id.
93 WindowToAppShelfIdMap window_to_app_shelf_id_map_;
95 DISALLOW_COPY_AND_ASSIGN(AppWindowLauncherController);
98 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_