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