| OLD | NEW |
| (Empty) |
| 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_CHROME_LAUNCHER_CONTROLLER_PER_APP_H_ | |
| 6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_PER_APP_H_ | |
| 7 | |
| 8 #include <list> | |
| 9 #include <map> | |
| 10 #include <set> | |
| 11 #include <string> | |
| 12 #include <vector> | |
| 13 | |
| 14 #include "ash/display/display_controller.h" | |
| 15 #include "ash/launcher/launcher_model_observer.h" | |
| 16 #include "ash/launcher/launcher_types.h" | |
| 17 #include "ash/shelf/shelf_layout_manager_observer.h" | |
| 18 #include "ash/shelf/shelf_types.h" | |
| 19 #include "ash/shell_observer.h" | |
| 20 #include "base/basictypes.h" | |
| 21 #include "base/compiler_specific.h" | |
| 22 #include "base/memory/scoped_ptr.h" | |
| 23 #include "base/memory/scoped_vector.h" | |
| 24 #include "base/prefs/pref_change_registrar.h" | |
| 25 #include "chrome/browser/extensions/extension_prefs.h" | |
| 26 #include "chrome/browser/prefs/pref_service_syncable_observer.h" | |
| 27 #include "chrome/browser/ui/ash/app_sync_ui_state_observer.h" | |
| 28 #include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item.h" | |
| 29 #include "chrome/browser/ui/ash/launcher/chrome_launcher_controller.h" | |
| 30 #include "chrome/browser/ui/ash/launcher/shell_window_launcher_controller.h" | |
| 31 #include "chrome/browser/ui/browser_list_observer.h" | |
| 32 #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" | |
| 33 #include "content/public/browser/notification_observer.h" | |
| 34 #include "content/public/browser/notification_registrar.h" | |
| 35 #include "ui/aura/window_observer.h" | |
| 36 | |
| 37 class AppSyncUIState; | |
| 38 class Browser; | |
| 39 class BrowserLauncherItemControllerTest; | |
| 40 class BrowserShortcutLauncherItemController; | |
| 41 class ExtensionEnableFlow; | |
| 42 class LauncherItemController; | |
| 43 class Profile; | |
| 44 class TabContents; | |
| 45 | |
| 46 namespace ash { | |
| 47 class LauncherModel; | |
| 48 } | |
| 49 | |
| 50 namespace aura { | |
| 51 class Window; | |
| 52 } | |
| 53 | |
| 54 namespace content { | |
| 55 class WebContents; | |
| 56 } | |
| 57 | |
| 58 namespace ui { | |
| 59 class BaseWindow; | |
| 60 } | |
| 61 | |
| 62 // ChromeLauncherControllerPerApp manages the launcher items needed for content | |
| 63 // content windows. Launcher items have a type, an optional app id, and a | |
| 64 // controller. This incarnation groups running tabs/windows in application | |
| 65 // specific lists. | |
| 66 // * Tabbed browsers and browser app windows have BrowserLauncherItemController, | |
| 67 // owned by the BrowserView instance. | |
| 68 // * App shell windows have ShellWindowLauncherItemController, owned by | |
| 69 // ShellWindowLauncherController. | |
| 70 // * Shortcuts have no LauncherItemController. | |
| 71 class ChromeLauncherControllerPerApp | |
| 72 : public ash::LauncherModelObserver, | |
| 73 public ash::ShellObserver, | |
| 74 public ash::DisplayController::Observer, | |
| 75 public ChromeLauncherController, | |
| 76 public content::NotificationObserver, | |
| 77 public PrefServiceSyncableObserver, | |
| 78 public AppSyncUIStateObserver, | |
| 79 public ExtensionEnableFlowDelegate, | |
| 80 public chrome::BrowserListObserver, | |
| 81 public ash::ShelfLayoutManagerObserver { | |
| 82 public: | |
| 83 ChromeLauncherControllerPerApp(Profile* profile, ash::LauncherModel* model); | |
| 84 virtual ~ChromeLauncherControllerPerApp(); | |
| 85 | |
| 86 // ChromeLauncherController overrides: | |
| 87 | |
| 88 // Initializes this ChromeLauncherControllerPerApp. | |
| 89 virtual void Init() OVERRIDE; | |
| 90 | |
| 91 // Returns the new per application interface of the given launcher. If it is | |
| 92 // a per browser (old) controller, it will return NULL; | |
| 93 // TODO(skuhne): Remove when we rip out the old launcher. | |
| 94 virtual ChromeLauncherControllerPerApp* GetPerAppInterface() OVERRIDE; | |
| 95 | |
| 96 // Creates a new tabbed item on the launcher for |controller|. | |
| 97 virtual ash::LauncherID CreateTabbedLauncherItem( | |
| 98 LauncherItemController* controller, | |
| 99 IncognitoState is_incognito, | |
| 100 ash::LauncherItemStatus status) OVERRIDE; | |
| 101 | |
| 102 // Creates a new app item on the launcher for |controller|. | |
| 103 virtual ash::LauncherID CreateAppLauncherItem( | |
| 104 LauncherItemController* controller, | |
| 105 const std::string& app_id, | |
| 106 ash::LauncherItemStatus status) OVERRIDE; | |
| 107 | |
| 108 // Updates the running status of an item. It will also update the status of | |
| 109 // browsers launcher item if needed. | |
| 110 virtual void SetItemStatus(ash::LauncherID id, | |
| 111 ash::LauncherItemStatus status) OVERRIDE; | |
| 112 | |
| 113 // Updates the controller associated with id (which should be a shortcut). | |
| 114 // |controller| remains owned by caller. | |
| 115 virtual void SetItemController(ash::LauncherID id, | |
| 116 LauncherItemController* controller) OVERRIDE; | |
| 117 | |
| 118 // Closes or unpins the launcher item. | |
| 119 virtual void CloseLauncherItem(ash::LauncherID id) OVERRIDE; | |
| 120 | |
| 121 // Pins the specified id. Currently only supports platform apps. | |
| 122 virtual void Pin(ash::LauncherID id) OVERRIDE; | |
| 123 | |
| 124 // Unpins the specified id, closing if not running. | |
| 125 virtual void Unpin(ash::LauncherID id) OVERRIDE; | |
| 126 | |
| 127 // Returns true if the item identified by |id| is pinned. | |
| 128 virtual bool IsPinned(ash::LauncherID id) OVERRIDE; | |
| 129 | |
| 130 // Pins/unpins the specified id. | |
| 131 virtual void TogglePinned(ash::LauncherID id) OVERRIDE; | |
| 132 | |
| 133 // Returns true if the specified item can be pinned or unpinned. Only apps can | |
| 134 // be pinned. | |
| 135 virtual bool IsPinnable(ash::LauncherID id) const OVERRIDE; | |
| 136 | |
| 137 // If there is no launcher item in the launcher for application |app_id|, one | |
| 138 // gets created. The (existing or created) launcher items get then locked | |
| 139 // against a users un-pinning removal. | |
| 140 virtual void LockV1AppWithID(const std::string& app_id) OVERRIDE; | |
| 141 | |
| 142 // A previously locked launcher item of type |app_id| gets unlocked. If the | |
| 143 // lock count reaches 0 and the item is not pinned it will go away. | |
| 144 virtual void UnlockV1AppWithID(const std::string& app_id) OVERRIDE; | |
| 145 | |
| 146 // Requests that the launcher item controller specified by |id| open a new | |
| 147 // instance of the app. |event_flags| holds the flags of the event which | |
| 148 // triggered this command. | |
| 149 virtual void Launch(ash::LauncherID id, int event_flags) OVERRIDE; | |
| 150 | |
| 151 // Closes the specified item. | |
| 152 virtual void Close(ash::LauncherID id) OVERRIDE; | |
| 153 | |
| 154 // Returns true if the specified item is open. | |
| 155 virtual bool IsOpen(ash::LauncherID id) OVERRIDE; | |
| 156 | |
| 157 // Returns true if the specified item is for a platform app. | |
| 158 virtual bool IsPlatformApp(ash::LauncherID id) OVERRIDE; | |
| 159 | |
| 160 // Opens a new instance of the application identified by |app_id|. | |
| 161 // Used by the app-list, and by pinned-app launcher items. | |
| 162 virtual void LaunchApp(const std::string& app_id, int event_flags) OVERRIDE; | |
| 163 | |
| 164 // If |app_id| is running, reactivates the app's most recently active window, | |
| 165 // otherwise launches and activates the app. | |
| 166 // Used by the app-list, and by pinned-app launcher items. | |
| 167 virtual void ActivateApp(const std::string& app_id, int event_flags) OVERRIDE; | |
| 168 | |
| 169 // Returns the launch type of app for the specified id. | |
| 170 virtual extensions::ExtensionPrefs::LaunchType GetLaunchType( | |
| 171 ash::LauncherID id) OVERRIDE; | |
| 172 | |
| 173 // Returns the id of the app for the specified tab. | |
| 174 virtual std::string GetAppID(content::WebContents* tab) OVERRIDE; | |
| 175 | |
| 176 // Returns the |LauncherModel|'s ID or 0 if the AppId was not found. | |
| 177 virtual ash::LauncherID GetLauncherIDForAppID( | |
| 178 const std::string& app_id) OVERRIDE; | |
| 179 virtual std::string GetAppIDForLauncherID(ash::LauncherID id) OVERRIDE; | |
| 180 | |
| 181 // Set the image for a specific launcher item (e.g. when set by the app). | |
| 182 virtual void SetLauncherItemImage(ash::LauncherID launcher_id, | |
| 183 const gfx::ImageSkia& image) OVERRIDE; | |
| 184 | |
| 185 // Returns true if a pinned launcher item with given |app_id| could be found. | |
| 186 virtual bool IsAppPinned(const std::string& app_id) OVERRIDE; | |
| 187 | |
| 188 // Find out if the given application |id| is a windowed app item and not a | |
| 189 // pinned item in the launcher. | |
| 190 bool IsWindowedAppInLauncher(const std::string& app_id); | |
| 191 | |
| 192 // Pins an app with |app_id| to launcher. If there is a running instance in | |
| 193 // launcher, the running instance is pinned. If there is no running instance, | |
| 194 // a new launcher item is created and pinned. | |
| 195 virtual void PinAppWithID(const std::string& app_id) OVERRIDE; | |
| 196 | |
| 197 // Updates the launche type of the app for the specified id to |launch_type|. | |
| 198 virtual void SetLaunchType( | |
| 199 ash::LauncherID id, | |
| 200 extensions::ExtensionPrefs::LaunchType launch_type) OVERRIDE; | |
| 201 | |
| 202 // Unpins any app items whose id is |app_id|. | |
| 203 virtual void UnpinAppsWithID(const std::string& app_id) OVERRIDE; | |
| 204 | |
| 205 // Returns true if the user is currently logged in as a guest. | |
| 206 virtual bool IsLoggedInAsGuest() OVERRIDE; | |
| 207 | |
| 208 // Invoked when user clicks on button in the launcher and there is no last | |
| 209 // used window (or CTRL is held with the click). | |
| 210 virtual void CreateNewWindow() OVERRIDE; | |
| 211 | |
| 212 // Invoked when the user clicks on button in the launcher to create a new | |
| 213 // incognito window. | |
| 214 virtual void CreateNewIncognitoWindow() OVERRIDE; | |
| 215 | |
| 216 // Checks whether the user is allowed to pin apps. Pinning may be disallowed | |
| 217 // by policy in case there is a pre-defined set of pinned apps. | |
| 218 virtual bool CanPin() const OVERRIDE; | |
| 219 | |
| 220 // Updates the pinned pref state. The pinned state consists of a list pref. | |
| 221 // Each item of the list is a dictionary. The key |kAppIDPath| gives the | |
| 222 // id of the app. | |
| 223 virtual void PersistPinnedState() OVERRIDE; | |
| 224 | |
| 225 virtual ash::LauncherModel* model() OVERRIDE; | |
| 226 | |
| 227 virtual Profile* profile() OVERRIDE; | |
| 228 | |
| 229 // Gets the shelf auto-hide behavior on |root_window|. | |
| 230 virtual ash::ShelfAutoHideBehavior GetShelfAutoHideBehavior( | |
| 231 aura::RootWindow* root_window) const OVERRIDE; | |
| 232 | |
| 233 // Returns |true| if the user is allowed to modify the shelf auto-hide | |
| 234 // behavior on |root_window|. | |
| 235 virtual bool CanUserModifyShelfAutoHideBehavior( | |
| 236 aura::RootWindow* root_window) const OVERRIDE; | |
| 237 | |
| 238 // Toggles the shelf auto-hide behavior on |root_window|. Does nothing if the | |
| 239 // user is not allowed to modify the auto-hide behavior. | |
| 240 virtual void ToggleShelfAutoHideBehavior( | |
| 241 aura::RootWindow* root_window) OVERRIDE; | |
| 242 | |
| 243 // The tab no longer represents its previously identified application. | |
| 244 virtual void RemoveTabFromRunningApp(content::WebContents* tab, | |
| 245 const std::string& app_id) OVERRIDE; | |
| 246 | |
| 247 // Notify the controller that the state of an non platform app's tabs | |
| 248 // have changed, | |
| 249 virtual void UpdateAppState(content::WebContents* contents, | |
| 250 AppState app_state) OVERRIDE; | |
| 251 | |
| 252 // Limits application refocusing to urls that match |url| for |id|. | |
| 253 virtual void SetRefocusURLPatternForTest(ash::LauncherID id, | |
| 254 const GURL& url) OVERRIDE; | |
| 255 | |
| 256 // Returns the extension identified by |app_id|. | |
| 257 virtual const extensions::Extension* GetExtensionForAppID( | |
| 258 const std::string& app_id) const OVERRIDE; | |
| 259 | |
| 260 // Activates a |window|. If |allow_minimize| is true and the system allows | |
| 261 // it, the the window will get minimized instead. | |
| 262 virtual void ActivateWindowOrMinimizeIfActive(ui::BaseWindow* window, | |
| 263 bool allow_minimize) OVERRIDE; | |
| 264 | |
| 265 // ash::LauncherDelegate overrides: | |
| 266 virtual void ItemSelected(const ash::LauncherItem& item, | |
| 267 const ui::Event& event) OVERRIDE; | |
| 268 virtual string16 GetTitle(const ash::LauncherItem& item) OVERRIDE; | |
| 269 virtual ui::MenuModel* CreateContextMenu( | |
| 270 const ash::LauncherItem& item, aura::RootWindow* root) OVERRIDE; | |
| 271 virtual ash::LauncherMenuModel* CreateApplicationMenu( | |
| 272 const ash::LauncherItem& item, | |
| 273 int event_flags) OVERRIDE; | |
| 274 virtual ash::LauncherID GetIDByWindow(aura::Window* window) OVERRIDE; | |
| 275 virtual bool IsDraggable(const ash::LauncherItem& item) OVERRIDE; | |
| 276 virtual bool ShouldShowTooltip(const ash::LauncherItem& item) OVERRIDE; | |
| 277 virtual void OnLauncherCreated(ash::Launcher* launcher) OVERRIDE; | |
| 278 virtual void OnLauncherDestroyed(ash::Launcher* launcher) OVERRIDE; | |
| 279 | |
| 280 // ash::LauncherModelObserver overrides: | |
| 281 virtual void LauncherItemAdded(int index) OVERRIDE; | |
| 282 virtual void LauncherItemRemoved(int index, ash::LauncherID id) OVERRIDE; | |
| 283 virtual void LauncherItemMoved(int start_index, int target_index) OVERRIDE; | |
| 284 virtual void LauncherItemChanged(int index, | |
| 285 const ash::LauncherItem& old_item) OVERRIDE; | |
| 286 virtual void LauncherStatusChanged() OVERRIDE; | |
| 287 | |
| 288 // content::NotificationObserver overrides: | |
| 289 virtual void Observe(int type, | |
| 290 const content::NotificationSource& source, | |
| 291 const content::NotificationDetails& details) OVERRIDE; | |
| 292 | |
| 293 // ash::ShellObserver overrides: | |
| 294 virtual void OnShelfAlignmentChanged(aura::RootWindow* root_window) OVERRIDE; | |
| 295 | |
| 296 // ash::DisplayController::Observer overrides: | |
| 297 virtual void OnDisplayConfigurationChanging() OVERRIDE; | |
| 298 virtual void OnDisplayConfigurationChanged() OVERRIDE; | |
| 299 | |
| 300 // PrefServiceSyncableObserver overrides: | |
| 301 virtual void OnIsSyncingChanged() OVERRIDE; | |
| 302 | |
| 303 // AppSyncUIStateObserver overrides: | |
| 304 virtual void OnAppSyncUIStatusChanged() OVERRIDE; | |
| 305 | |
| 306 // ExtensionEnableFlowDelegate overrides: | |
| 307 virtual void ExtensionEnableFlowFinished() OVERRIDE; | |
| 308 virtual void ExtensionEnableFlowAborted(bool user_initiated) OVERRIDE; | |
| 309 | |
| 310 // extensions::AppIconLoader overrides: | |
| 311 virtual void SetAppImage(const std::string& app_id, | |
| 312 const gfx::ImageSkia& image) OVERRIDE; | |
| 313 | |
| 314 // ash::ShelfLayoutManagerObserver overrides: | |
| 315 virtual void OnAutoHideBehaviorChanged( | |
| 316 aura::RootWindow* root_window, | |
| 317 ash::ShelfAutoHideBehavior new_behavior) OVERRIDE; | |
| 318 | |
| 319 // Get the list of all running incarnations of this item. | |
| 320 // |event_flags| specifies the flags which were set by the event which | |
| 321 // triggered this menu generation. It can be used to generate different lists. | |
| 322 ChromeLauncherAppMenuItems GetApplicationList(const ash::LauncherItem& item, | |
| 323 int event_flags); | |
| 324 | |
| 325 // Get the list of all tabs which belong to a certain application type. | |
| 326 std::vector<content::WebContents*> GetV1ApplicationsFromAppId( | |
| 327 std::string app_id); | |
| 328 | |
| 329 // Activates a specified shell application. | |
| 330 void ActivateShellApp(const std::string& app_id, int index); | |
| 331 | |
| 332 // Checks if a given |web_contents| is known to be associated with an | |
| 333 // application of type |app_id|. | |
| 334 bool IsWebContentHandledByApplication(content::WebContents* web_contents, | |
| 335 const std::string& app_id); | |
| 336 | |
| 337 // Check if the gMail app is loaded and it can handle the given web content. | |
| 338 // This special treatment is required to address crbug.com/234268. | |
| 339 bool ContentCanBeHandledByGmailApp(content::WebContents* web_contents); | |
| 340 | |
| 341 // Get the favicon for the application list entry for |web_contents|. | |
| 342 // Note that for incognito windows the incognito icon will be returned. | |
| 343 // If |web_contents| has not loaded, returns the default favicon. | |
| 344 gfx::Image GetAppListIcon(content::WebContents* web_contents) const; | |
| 345 | |
| 346 // Get the title for the applicatoin list entry for |web_contents|. | |
| 347 // If |web_contents| has not loaded, returns "Net Tab". | |
| 348 string16 GetAppListTitle(content::WebContents* web_contents) const; | |
| 349 | |
| 350 // Overridden from chrome::BrowserListObserver. | |
| 351 virtual void OnBrowserRemoved(Browser* browser) OVERRIDE; | |
| 352 | |
| 353 // Returns true when the given |browser| is listed in the browser application | |
| 354 // list. | |
| 355 bool IsBrowserRepresentedInBrowserList(Browser* browser); | |
| 356 | |
| 357 // Returns the LauncherItemController of BrowserShortcut. | |
| 358 LauncherItemController* GetBrowserShortcutLauncherItemController(); | |
| 359 | |
| 360 protected: | |
| 361 // ChromeLauncherController overrides: | |
| 362 | |
| 363 // Creates a new app shortcut item and controller on the launcher at |index|. | |
| 364 // Use kInsertItemAtEnd to add a shortcut as the last item. | |
| 365 virtual ash::LauncherID CreateAppShortcutLauncherItem( | |
| 366 const std::string& app_id, | |
| 367 int index) OVERRIDE; | |
| 368 | |
| 369 // Sets the AppTabHelper/AppIconLoader, taking ownership of the helper class. | |
| 370 // These are intended for testing. | |
| 371 virtual void SetAppTabHelperForTest(AppTabHelper* helper) OVERRIDE; | |
| 372 virtual void SetAppIconLoaderForTest( | |
| 373 extensions::AppIconLoader* loader) OVERRIDE; | |
| 374 virtual const std::string& GetAppIdFromLauncherIdForTest( | |
| 375 ash::LauncherID id) OVERRIDE; | |
| 376 | |
| 377 private: | |
| 378 friend class ChromeLauncherControllerPerAppTest; | |
| 379 friend class LauncherPerAppAppBrowserTest; | |
| 380 friend class LauncherPlatformPerAppAppBrowserTest; | |
| 381 | |
| 382 // Creates a new app shortcut item and controller on the launcher at |index|. | |
| 383 // Use kInsertItemAtEnd to add a shortcut as the last item. | |
| 384 virtual ash::LauncherID CreateAppShortcutLauncherItemWithType( | |
| 385 const std::string& app_id, | |
| 386 int index, | |
| 387 ash::LauncherItemType launcher_item_type); | |
| 388 | |
| 389 // Updates the activation state of the Broswer item. | |
| 390 void UpdateBrowserItemStatus(); | |
| 391 | |
| 392 typedef std::map<ash::LauncherID, LauncherItemController*> | |
| 393 IDToItemControllerMap; | |
| 394 typedef std::list<content::WebContents*> WebContentsList; | |
| 395 typedef std::map<std::string, WebContentsList> AppIDToWebContentsListMap; | |
| 396 typedef std::map<content::WebContents*, std::string> WebContentsToAppIDMap; | |
| 397 | |
| 398 // Returns the profile used for new windows. | |
| 399 Profile* GetProfileForNewWindows(); | |
| 400 | |
| 401 // Invoked when the associated browser or app is closed. | |
| 402 void LauncherItemClosed(ash::LauncherID id); | |
| 403 | |
| 404 // Internal helpers for pinning and unpinning that handle both | |
| 405 // client-triggered and internal pinning operations. | |
| 406 void DoPinAppWithID(const std::string& app_id); | |
| 407 void DoUnpinAppsWithID(const std::string& app_id); | |
| 408 | |
| 409 // Re-syncs launcher model with prefs::kPinnedLauncherApps. | |
| 410 void UpdateAppLaunchersFromPref(); | |
| 411 | |
| 412 // Persists the shelf auto-hide behavior to prefs. | |
| 413 void SetShelfAutoHideBehaviorPrefs(ash::ShelfAutoHideBehavior behavior, | |
| 414 aura::RootWindow* root_window); | |
| 415 | |
| 416 // Sets the shelf auto-hide behavior from prefs. | |
| 417 void SetShelfAutoHideBehaviorFromPrefs(); | |
| 418 | |
| 419 // Sets the shelf alignment from prefs. | |
| 420 void SetShelfAlignmentFromPrefs(); | |
| 421 | |
| 422 // Sets both of auto-hide behavior and alignment from prefs. | |
| 423 void SetShelfBehaviorsFromPrefs(); | |
| 424 | |
| 425 // Returns the most recently active web contents for an app. | |
| 426 content::WebContents* GetLastActiveWebContents(const std::string& app_id); | |
| 427 | |
| 428 // Creates an app launcher to insert at |index|. Note that |index| may be | |
| 429 // adjusted by the model to meet ordering constraints. | |
| 430 // The |launcher_item_type| will be set into the LauncherModel. | |
| 431 ash::LauncherID InsertAppLauncherItem( | |
| 432 LauncherItemController* controller, | |
| 433 const std::string& app_id, | |
| 434 ash::LauncherItemStatus status, | |
| 435 int index, | |
| 436 ash::LauncherItemType launcher_item_type); | |
| 437 | |
| 438 bool HasItemController(ash::LauncherID id) const; | |
| 439 | |
| 440 // Enumerate all Web contents which match a given shortcut |controller|. | |
| 441 std::vector<content::WebContents*> GetV1ApplicationsFromController( | |
| 442 LauncherItemController* controller); | |
| 443 | |
| 444 // Create LauncherItem for Browser Shortcut. | |
| 445 ash::LauncherID CreateBrowserShortcutLauncherItem(); | |
| 446 | |
| 447 // Check if the given |web_contents| is in incognito mode. | |
| 448 bool IsIncognito(content::WebContents* web_contents) const; | |
| 449 | |
| 450 // Update browser shortcut's index. | |
| 451 void PersistChromeItemIndex(int index); | |
| 452 | |
| 453 // Get browser shortcut's index from pref. | |
| 454 int GetChromeIconIndexFromPref() const; | |
| 455 | |
| 456 // Close all windowed V1 applications of a certain extension which was already | |
| 457 // deleted. | |
| 458 void CloseWindowedAppsFromRemovedExtension(const std::string& app_id); | |
| 459 | |
| 460 // Move a launcher item ignoring the pinned state changes from |index| to | |
| 461 // |target_index|. | |
| 462 void MoveItemWithoutPinnedStateChangeNotification(int source_index, | |
| 463 int target_index); | |
| 464 | |
| 465 ash::LauncherModel* model_; | |
| 466 | |
| 467 // Profile used for prefs and loading extensions. This is NOT necessarily the | |
| 468 // profile new windows are created with. | |
| 469 Profile* profile_; | |
| 470 | |
| 471 IDToItemControllerMap id_to_item_controller_map_; | |
| 472 | |
| 473 // Maintains activation order of web contents for each app. | |
| 474 AppIDToWebContentsListMap app_id_to_web_contents_list_; | |
| 475 | |
| 476 // Direct access to app_id for a web contents. | |
| 477 WebContentsToAppIDMap web_contents_to_app_id_; | |
| 478 | |
| 479 // Used to track shell windows. | |
| 480 scoped_ptr<ShellWindowLauncherController> shell_window_controller_; | |
| 481 | |
| 482 // Used to get app info for tabs. | |
| 483 scoped_ptr<AppTabHelper> app_tab_helper_; | |
| 484 | |
| 485 // Used to load the image for an app item. | |
| 486 scoped_ptr<extensions::AppIconLoader> app_icon_loader_; | |
| 487 | |
| 488 content::NotificationRegistrar notification_registrar_; | |
| 489 | |
| 490 PrefChangeRegistrar pref_change_registrar_; | |
| 491 | |
| 492 AppSyncUIState* app_sync_ui_state_; | |
| 493 | |
| 494 scoped_ptr<ExtensionEnableFlow> extension_enable_flow_; | |
| 495 | |
| 496 // Launchers that are currently being observed. | |
| 497 std::set<ash::Launcher*> launchers_; | |
| 498 | |
| 499 // The owned browser shortcut item. | |
| 500 scoped_ptr<BrowserShortcutLauncherItemController> browser_item_controller_; | |
| 501 | |
| 502 // If true, incoming pinned state changes should be ignored. | |
| 503 bool ignore_persist_pinned_state_change_; | |
| 504 | |
| 505 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherControllerPerApp); | |
| 506 }; | |
| 507 | |
| 508 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_PER_APP_H_ | |
| OLD | NEW |