Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / ash / launcher / app_window_launcher_controller.h
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 CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_
6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_
7
8 #include <list>
9 #include <map>
10 #include <string>
11
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"
15
16 namespace aura {
17
18 class Window;
19
20 namespace client {
21 class ActivationClient;
22 }
23 }
24
25 namespace extensions {
26 class AppWindow;
27 }
28
29 class ChromeLauncherController;
30 class Profile;
31 class AppWindowLauncherItemController;
32
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 {
40  public:
41   explicit AppWindowLauncherController(ChromeLauncherController* owner);
42   ~AppWindowLauncherController() override;
43
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) {}
47
48   // An additional user identified by |Profile|, got added to the existing
49   // session.
50   virtual void AdditionalUserAddedToSession(Profile* profile);
51
52   // Overridden from AppWindowRegistry::Observer:
53   void OnAppWindowIconChanged(extensions::AppWindow* app_window) override;
54   void OnAppWindowShown(extensions::AppWindow* app_window,
55                         bool was_hidden) override;
56   void OnAppWindowHidden(extensions::AppWindow* app_window) override;
57
58   // Overriden from aura::WindowObserver:
59   void OnWindowDestroying(aura::Window* window) override;
60
61   // Overriden from client::ActivationChangeObserver:
62   void OnWindowActivated(aura::Window* gained_active,
63                          aura::Window* lost_active) override;
64
65  protected:
66   // Registers a app window with the shelf and this object.
67   void RegisterApp(extensions::AppWindow* app_window);
68
69   // Unregisters a app window with the shelf and this object.
70   void UnregisterApp(aura::Window* window);
71
72   // Check if a given window is known to the launcher controller.
73   bool IsRegisteredApp(aura::Window* window);
74
75  private:
76   typedef std::map<std::string, AppWindowLauncherItemController*>
77       AppControllerMap;
78   typedef std::map<aura::Window*, std::string> WindowToAppShelfIdMap;
79
80   AppWindowLauncherItemController* ControllerForWindow(aura::Window* window);
81
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
85   // mode.
86   std::set<extensions::AppWindowRegistry*> registry_;
87   aura::client::ActivationClient* activation_client_;
88
89   // Map of app launcher id to controller.
90   AppControllerMap app_controller_map_;
91
92   // Allows us to get from an aura::Window to the app shelf id.
93   WindowToAppShelfIdMap window_to_app_shelf_id_map_;
94
95   DISALLOW_COPY_AND_ASSIGN(AppWindowLauncherController);
96 };
97
98 #endif  // CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_