1 // Copyright (c) 2012 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_SHELL_WINDOW_LAUNCHER_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_SHELL_WINDOW_LAUNCHER_CONTROLLER_H_
12 #include "apps/shell_window_registry.h"
13 #include "ui/aura/client/activation_change_observer.h"
14 #include "ui/aura/window_observer.h"
25 class ActivationClient
;
30 class ChromeLauncherController
;
32 class ShellWindowLauncherItemController
;
34 // ShellWindowLauncherController observes the Shell Window registry and the
35 // aura window manager. It handles adding and removing launcher items from
36 // ChromeLauncherController.
37 class ShellWindowLauncherController
38 : public apps::ShellWindowRegistry::Observer
,
39 public aura::WindowObserver
,
40 public aura::client::ActivationChangeObserver
{
42 explicit ShellWindowLauncherController(ChromeLauncherController
* owner
);
43 virtual ~ShellWindowLauncherController();
45 // Called by ChromeLauncherController when the active user changed and the
46 // items need to be updated.
47 virtual void ActiveUserChanged(const std::string
& user_email
) {}
49 // An additional user identified by |Profile|, got added to the existing
51 virtual void AdditionalUserAddedToSession(Profile
* profile
);
53 // Overridden from ShellWindowRegistry::Observer:
54 virtual void OnShellWindowAdded(apps::ShellWindow
* shell_window
) OVERRIDE
;
55 virtual void OnShellWindowIconChanged(
56 apps::ShellWindow
* shell_window
) OVERRIDE
;
57 virtual void OnShellWindowRemoved(apps::ShellWindow
* shell_window
) OVERRIDE
;
59 // Overriden from aura::WindowObserver:
60 virtual void OnWindowDestroying(aura::Window
* window
) OVERRIDE
;
62 // Overriden from client::ActivationChangeObserver:
63 virtual void OnWindowActivated(aura::Window
* gained_active
,
64 aura::Window
* lost_active
) OVERRIDE
;
67 // Registers a shell window with the shelf and this object.
68 void RegisterApp(apps::ShellWindow
* shell_window
);
70 // Unregisters a shell window with the shelf and this object.
71 void UnregisterApp(aura::Window
* window
);
73 // Check if a given window is known to the launcher controller.
74 bool IsRegisteredApp(aura::Window
* window
);
77 typedef std::map
<std::string
, ShellWindowLauncherItemController
*>
79 typedef std::map
<aura::Window
*, std::string
> WindowToAppLauncherIdMap
;
81 ShellWindowLauncherItemController
* ControllerForWindow(aura::Window
* window
);
83 ChromeLauncherController
* owner_
;
84 // A set of unowned ShellWindowRegistry pointers for loaded users.
85 // Note that this will only be used with multiple users in the side by side
87 std::set
<apps::ShellWindowRegistry
*> registry_
;
88 aura::client::ActivationClient
* activation_client_
;
90 // Map of app launcher id to controller.
91 AppControllerMap app_controller_map_
;
93 // Allows us to get from an aura::Window to the app launcher id.
94 WindowToAppLauncherIdMap window_to_app_launcher_id_map_
;
96 DISALLOW_COPY_AND_ASSIGN(ShellWindowLauncherController
);
99 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_SHELL_WINDOW_LAUNCHER_CONTROLLER_H_