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 16namespace aura { 17 18class Window; 19 20namespace client { 21class ActivationClient; 22} 23} 24 25namespace extensions { 26class AppWindow; 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 extensions::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 OnAppWindowIconChanged( 54 extensions::AppWindow* app_window) OVERRIDE; 55 virtual void OnAppWindowShown(extensions::AppWindow* app_window) OVERRIDE; 56 virtual void OnAppWindowHidden(extensions::AppWindow* app_window) OVERRIDE; 57 58 // Overriden from aura::WindowObserver: 59 virtual void OnWindowDestroying(aura::Window* window) OVERRIDE; 60 61 // Overriden from client::ActivationChangeObserver: 62 virtual 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_ 99