- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / ash / launcher / shell_window_launcher_controller.h
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.
4
5 #ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_SHELL_WINDOW_LAUNCHER_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_SHELL_WINDOW_LAUNCHER_CONTROLLER_H_
7
8 #include <list>
9 #include <map>
10 #include <string>
11
12 #include "apps/shell_window_registry.h"
13 #include "ui/aura/client/activation_change_observer.h"
14 #include "ui/aura/window_observer.h"
15
16 namespace apps {
17 class ShellWindow;
18 }
19
20 namespace aura {
21
22 class Window;
23
24 namespace client {
25 class ActivationClient;
26 }
27
28 }
29
30 class ChromeLauncherController;
31 class Profile;
32 class ShellWindowLauncherItemController;
33
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 {
41  public:
42   explicit ShellWindowLauncherController(ChromeLauncherController* owner);
43   virtual ~ShellWindowLauncherController();
44
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) {}
48
49   // An additional user identified by |Profile|, got added to the existing
50   // session.
51   virtual void AdditionalUserAddedToSession(Profile* profile);
52
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;
58
59   // Overriden from aura::WindowObserver:
60   virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
61
62   // Overriden from client::ActivationChangeObserver:
63   virtual void OnWindowActivated(aura::Window* gained_active,
64                                  aura::Window* lost_active) OVERRIDE;
65
66  protected:
67   // Registers a shell window with the shelf and this object.
68   void RegisterApp(apps::ShellWindow* shell_window);
69
70   // Unregisters a shell window with the shelf and this object.
71   void UnregisterApp(aura::Window* window);
72
73   // Check if a given window is known to the launcher controller.
74   bool IsRegisteredApp(aura::Window* window);
75
76  private:
77   typedef std::map<std::string, ShellWindowLauncherItemController*>
78       AppControllerMap;
79   typedef std::map<aura::Window*, std::string> WindowToAppLauncherIdMap;
80
81   ShellWindowLauncherItemController* ControllerForWindow(aura::Window* window);
82
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
86   // mode.
87   std::set<apps::ShellWindowRegistry*> registry_;
88   aura::client::ActivationClient* activation_client_;
89
90   // Map of app launcher id to controller.
91   AppControllerMap app_controller_map_;
92
93   // Allows us to get from an aura::Window to the app launcher id.
94   WindowToAppLauncherIdMap window_to_app_launcher_id_map_;
95
96   DISALLOW_COPY_AND_ASSIGN(ShellWindowLauncherController);
97 };
98
99 #endif  // CHROME_BROWSER_UI_ASH_LAUNCHER_SHELL_WINDOW_LAUNCHER_CONTROLLER_H_