multi_profile_app_window_launcher_controller.h revision 010d83a9304c5a91596085d917d248abff47903a
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_MULTI_PROFILE_APP_WINDOW_LAUNCHER_CONTROLLER_H_
6#define CHROME_BROWSER_UI_ASH_LAUNCHER_MULTI_PROFILE_APP_WINDOW_LAUNCHER_CONTROLLER_H_
7
8#include "chrome/browser/ui/ash/launcher/app_window_launcher_controller.h"
9
10// Inherits from AppWindowLauncherController and overwrites the AppWindow
11// observing functions to switch between users dynamically.
12class MultiProfileAppWindowLauncherController
13    : public AppWindowLauncherController {
14 public:
15  explicit MultiProfileAppWindowLauncherController(
16      ChromeLauncherController* owner);
17  virtual ~MultiProfileAppWindowLauncherController();
18
19  // Overridden from AppWindowLauncherController:
20  virtual void ActiveUserChanged(const std::string& user_email) OVERRIDE;
21  virtual void AdditionalUserAddedToSession(Profile* profile) OVERRIDE;
22
23  // Overridden from AppWindowRegistry::Observer:
24  virtual void OnAppWindowAdded(apps::AppWindow* app_window) OVERRIDE;
25  virtual void OnAppWindowRemoved(apps::AppWindow* app_window) OVERRIDE;
26  virtual void OnAppWindowShown(apps::AppWindow* app_window) OVERRIDE;
27  virtual void OnAppWindowHidden(apps::AppWindow* app_window) OVERRIDE;
28
29 private:
30  typedef std::vector<apps::AppWindow*> AppWindowList;
31  typedef std::vector<apps::AppWindowRegistry*> AppWindowRegistryList;
32
33  // Returns true if the owner of the given |app_window| has a window teleported
34  // of the |app_window|'s application type to the current desktop.
35  bool UserHasAppOnActiveDesktop(apps::AppWindow* app_window);
36
37  // A list of all app windows for all users.
38  AppWindowList app_window_list_;
39
40  // A list of the app window registries which we additionally observe.
41  AppWindowRegistryList multi_user_registry_;
42
43  DISALLOW_COPY_AND_ASSIGN(MultiProfileAppWindowLauncherController);
44};
45
46#endif  // CHROME_BROWSER_UI_ASH_LAUNCHER_MULTI_PROFILE_APP_WINDOW_LAUNCHER_CONTROLLER_H_
47