app_window_launcher_controller.h revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 "apps/app_window_registry.h"
13#include "ui/aura/client/activation_change_observer.h"
14#include "ui/aura/window_observer.h"
15
16namespace apps {
17class AppWindow;
18}
19
20namespace aura {
21
22class Window;
23
24namespace client {
25class ActivationClient;
26}
27}
28
29class ChromeLauncherController;
30class Profile;
31class 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.
36class AppWindowLauncherController
37    : public apps::AppWindowRegistry::Observer,
38      public aura::WindowObserver,
39      public aura::client::ActivationChangeObserver {
40 public:
41  explicit AppWindowLauncherController(ChromeLauncherController* owner);
42  virtual ~AppWindowLauncherController();
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  virtual void OnAppWindowAdded(apps::AppWindow* app_window) OVERRIDE;
54  virtual void OnAppWindowIconChanged(apps::AppWindow* app_window) OVERRIDE;
55  virtual void OnAppWindowRemoved(apps::AppWindow* app_window) OVERRIDE;
56
57  // Overriden from aura::WindowObserver:
58  virtual void OnWindowDestroying(aura::Window* window) OVERRIDE;
59
60  // Overriden from client::ActivationChangeObserver:
61  virtual void OnWindowActivated(aura::Window* gained_active,
62                                 aura::Window* lost_active) OVERRIDE;
63
64 protected:
65  // Registers a app window with the shelf and this object.
66  void RegisterApp(apps::AppWindow* app_window);
67
68  // Unregisters a app window with the shelf and this object.
69  void UnregisterApp(aura::Window* window);
70
71  // Check if a given window is known to the launcher controller.
72  bool IsRegisteredApp(aura::Window* window);
73
74 private:
75  typedef std::map<std::string, AppWindowLauncherItemController*>
76      AppControllerMap;
77  typedef std::map<aura::Window*, std::string> WindowToAppShelfIdMap;
78
79  AppWindowLauncherItemController* ControllerForWindow(aura::Window* window);
80
81  ChromeLauncherController* owner_;
82  // A set of unowned AppWindowRegistry pointers for loaded users.
83  // Note that this will only be used with multiple users in the side by side
84  // mode.
85  std::set<apps::AppWindowRegistry*> registry_;
86  aura::client::ActivationClient* activation_client_;
87
88  // Map of app launcher id to controller.
89  AppControllerMap app_controller_map_;
90
91  // Allows us to get from an aura::Window to the app shelf id.
92  WindowToAppShelfIdMap window_to_app_shelf_id_map_;
93
94  DISALLOW_COPY_AND_ASSIGN(AppWindowLauncherController);
95};
96
97#endif  // CHROME_BROWSER_UI_ASH_LAUNCHER_APP_WINDOW_LAUNCHER_CONTROLLER_H_
98