Home | History | Annotate | Download | only in launcher
      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 
     16 namespace aura {
     17 
     18 class Window;
     19 
     20 namespace client {
     21 class ActivationClient;
     22 }
     23 }
     24 
     25 namespace extensions {
     26 class AppWindow;
     27 }
     28 
     29 class ChromeLauncherController;
     30 class Profile;
     31 class 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.
     36 class 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