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 16namespace apps { 17class ShellWindow; 18} 19 20namespace aura { 21 22class Window; 23 24namespace client { 25class ActivationClient; 26} 27 28} 29 30class ChromeLauncherController; 31class Profile; 32class 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. 37class 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_ 100