OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ | 5 #ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ |
6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ | 6 #define CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ |
7 | 7 |
8 #include <list> | 8 #include <list> |
9 #include <map> | 9 #include <map> |
10 #include <set> | 10 #include <set> |
(...skipping 28 matching lines...) Expand all Loading... |
39 class BrowserShortcutLauncherItemController; | 39 class BrowserShortcutLauncherItemController; |
40 class BrowserStatusMonitor; | 40 class BrowserStatusMonitor; |
41 class ExtensionEnableFlow; | 41 class ExtensionEnableFlow; |
42 class GURL; | 42 class GURL; |
43 class LauncherItemController; | 43 class LauncherItemController; |
44 class Profile; | 44 class Profile; |
45 class ShellWindowLauncherController; | 45 class ShellWindowLauncherController; |
46 class TabContents; | 46 class TabContents; |
47 | 47 |
48 namespace ash { | 48 namespace ash { |
49 class LauncherItemDelegateManager; | |
50 class LauncherModel; | 49 class LauncherModel; |
51 } | 50 } |
52 | 51 |
53 namespace aura { | 52 namespace aura { |
54 class Window; | 53 class Window; |
55 } | 54 } |
56 | 55 |
57 namespace content { | 56 namespace content { |
58 class NotificationRegistrar; | 57 class NotificationRegistrar; |
59 class WebContents; | 58 class WebContents; |
(...skipping 19 matching lines...) Expand all Loading... |
79 }; | 78 }; |
80 | 79 |
81 // ChromeLauncherController manages the launcher items needed for content | 80 // ChromeLauncherController manages the launcher items needed for content |
82 // windows. Launcher items have a type, an optional app id, and a controller. | 81 // windows. Launcher items have a type, an optional app id, and a controller. |
83 // This incarnation groups running tabs/windows in application specific lists. | 82 // This incarnation groups running tabs/windows in application specific lists. |
84 // * Browser app windows have BrowserLauncherItemController, owned by the | 83 // * Browser app windows have BrowserLauncherItemController, owned by the |
85 // BrowserView instance. | 84 // BrowserView instance. |
86 // * App shell windows have ShellWindowLauncherItemController, owned by | 85 // * App shell windows have ShellWindowLauncherItemController, owned by |
87 // ShellWindowLauncherController. | 86 // ShellWindowLauncherController. |
88 // * Shortcuts have no LauncherItemController. | 87 // * Shortcuts have no LauncherItemController. |
| 88 // TODO(simon.hong81): Move LauncherItemDelegate out from |
| 89 // ChromeLauncherController and makes separate subclass with it. |
89 class ChromeLauncherController : public ash::LauncherDelegate, | 90 class ChromeLauncherController : public ash::LauncherDelegate, |
| 91 public ash::LauncherItemDelegate, |
90 public ash::LauncherModelObserver, | 92 public ash::LauncherModelObserver, |
91 public ash::ShellObserver, | 93 public ash::ShellObserver, |
92 public ash::DisplayController::Observer, | 94 public ash::DisplayController::Observer, |
93 public content::NotificationObserver, | 95 public content::NotificationObserver, |
94 public extensions::AppIconLoader::Delegate, | 96 public extensions::AppIconLoader::Delegate, |
95 public PrefServiceSyncableObserver, | 97 public PrefServiceSyncableObserver, |
96 public AppSyncUIStateObserver, | 98 public AppSyncUIStateObserver, |
97 public ExtensionEnableFlowDelegate, | 99 public ExtensionEnableFlowDelegate, |
98 public ash::ShelfLayoutManagerObserver { | 100 public ash::ShelfLayoutManagerObserver { |
99 public: | 101 public: |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
287 virtual void OnLauncherCreated(ash::Launcher* launcher) OVERRIDE; | 289 virtual void OnLauncherCreated(ash::Launcher* launcher) OVERRIDE; |
288 virtual void OnLauncherDestroyed(ash::Launcher* launcher) OVERRIDE; | 290 virtual void OnLauncherDestroyed(ash::Launcher* launcher) OVERRIDE; |
289 virtual ash::LauncherID GetLauncherIDForAppID( | 291 virtual ash::LauncherID GetLauncherIDForAppID( |
290 const std::string& app_id) OVERRIDE; | 292 const std::string& app_id) OVERRIDE; |
291 virtual const std::string& GetAppIDForLauncherID(ash::LauncherID id) OVERRIDE; | 293 virtual const std::string& GetAppIDForLauncherID(ash::LauncherID id) OVERRIDE; |
292 virtual void PinAppWithID(const std::string& app_id) OVERRIDE; | 294 virtual void PinAppWithID(const std::string& app_id) OVERRIDE; |
293 virtual bool IsAppPinned(const std::string& app_id) OVERRIDE; | 295 virtual bool IsAppPinned(const std::string& app_id) OVERRIDE; |
294 virtual bool CanPin() const OVERRIDE; | 296 virtual bool CanPin() const OVERRIDE; |
295 virtual void UnpinAppWithID(const std::string& app_id) OVERRIDE; | 297 virtual void UnpinAppWithID(const std::string& app_id) OVERRIDE; |
296 | 298 |
| 299 // ash::LauncherItemDelegate overrides: |
| 300 virtual void ItemSelected(const ash::LauncherItem& item, |
| 301 const ui::Event& event) OVERRIDE; |
| 302 virtual string16 GetTitle(const ash::LauncherItem& item) OVERRIDE; |
| 303 virtual ui::MenuModel* CreateContextMenu( |
| 304 const ash::LauncherItem& item, aura::RootWindow* root) OVERRIDE; |
| 305 virtual ash::LauncherMenuModel* CreateApplicationMenu( |
| 306 const ash::LauncherItem& item, |
| 307 int event_flags) OVERRIDE; |
| 308 virtual bool IsDraggable(const ash::LauncherItem& item) OVERRIDE; |
| 309 virtual bool ShouldShowTooltip(const ash::LauncherItem& item) OVERRIDE; |
| 310 |
297 // ash::LauncherModelObserver overrides: | 311 // ash::LauncherModelObserver overrides: |
298 virtual void LauncherItemAdded(int index) OVERRIDE; | 312 virtual void LauncherItemAdded(int index) OVERRIDE; |
299 virtual void LauncherItemRemoved(int index, ash::LauncherID id) OVERRIDE; | 313 virtual void LauncherItemRemoved(int index, ash::LauncherID id) OVERRIDE; |
300 virtual void LauncherItemMoved(int start_index, int target_index) OVERRIDE; | 314 virtual void LauncherItemMoved(int start_index, int target_index) OVERRIDE; |
301 virtual void LauncherItemChanged(int index, | 315 virtual void LauncherItemChanged(int index, |
302 const ash::LauncherItem& old_item) OVERRIDE; | 316 const ash::LauncherItem& old_item) OVERRIDE; |
303 virtual void LauncherStatusChanged() OVERRIDE; | 317 virtual void LauncherStatusChanged() OVERRIDE; |
304 | 318 |
305 // content::NotificationObserver overrides: | 319 // content::NotificationObserver overrides: |
306 virtual void Observe(int type, | 320 virtual void Observe(int type, |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 gfx::Image GetAppListIcon(content::WebContents* web_contents) const; | 378 gfx::Image GetAppListIcon(content::WebContents* web_contents) const; |
365 | 379 |
366 // Get the title for the applicatoin list entry for |web_contents|. | 380 // Get the title for the applicatoin list entry for |web_contents|. |
367 // If |web_contents| has not loaded, returns "Net Tab". | 381 // If |web_contents| has not loaded, returns "Net Tab". |
368 string16 GetAppListTitle(content::WebContents* web_contents) const; | 382 string16 GetAppListTitle(content::WebContents* web_contents) const; |
369 | 383 |
370 // Returns the LauncherItemController of BrowserShortcut. | 384 // Returns the LauncherItemController of BrowserShortcut. |
371 BrowserShortcutLauncherItemController* | 385 BrowserShortcutLauncherItemController* |
372 GetBrowserShortcutLauncherItemController(); | 386 GetBrowserShortcutLauncherItemController(); |
373 | 387 |
374 LauncherItemController* GetLauncherItemController(const ash::LauncherID id); | |
375 | |
376 protected: | 388 protected: |
377 // Creates a new app shortcut item and controller on the launcher at |index|. | 389 // Creates a new app shortcut item and controller on the launcher at |index|. |
378 // Use kInsertItemAtEnd to add a shortcut as the last item. | 390 // Use kInsertItemAtEnd to add a shortcut as the last item. |
379 ash::LauncherID CreateAppShortcutLauncherItem(const std::string& app_id, | 391 ash::LauncherID CreateAppShortcutLauncherItem(const std::string& app_id, |
380 int index); | 392 int index); |
381 | 393 |
382 // Sets the AppTabHelper/AppIconLoader, taking ownership of the helper class. | 394 // Sets the AppTabHelper/AppIconLoader, taking ownership of the helper class. |
383 // These are intended for testing. | 395 // These are intended for testing. |
384 void SetAppTabHelperForTest(AppTabHelper* helper); | 396 void SetAppTabHelperForTest(AppTabHelper* helper); |
385 void SetAppIconLoaderForTest(extensions::AppIconLoader* loader); | 397 void SetAppIconLoaderForTest(extensions::AppIconLoader* loader); |
386 const std::string& GetAppIdFromLauncherIdForTest(ash::LauncherID id); | 398 const std::string& GetAppIdFromLauncherIdForTest(ash::LauncherID id); |
387 | 399 |
388 // Sets the ash::LauncherItemDelegateManager only for unittests and doesn't | |
389 // take an ownership of it. | |
390 void SetLauncherItemDelegateManagerForTest( | |
391 ash::LauncherItemDelegateManager* manager); | |
392 | |
393 private: | 400 private: |
394 friend class ChromeLauncherControllerTest; | 401 friend class ChromeLauncherControllerTest; |
395 friend class LauncherAppBrowserTest; | 402 friend class LauncherAppBrowserTest; |
396 friend class LauncherPlatformAppBrowserTest; | 403 friend class LauncherPlatformAppBrowserTest; |
397 | 404 |
398 typedef std::map<ash::LauncherID, LauncherItemController*> | 405 typedef std::map<ash::LauncherID, LauncherItemController*> |
399 IDToItemControllerMap; | 406 IDToItemControllerMap; |
400 typedef std::list<content::WebContents*> WebContentsList; | 407 typedef std::list<content::WebContents*> WebContentsList; |
401 typedef std::map<std::string, WebContentsList> AppIDToWebContentsListMap; | 408 typedef std::map<std::string, WebContentsList> AppIDToWebContentsListMap; |
402 typedef std::map<content::WebContents*, std::string> WebContentsToAppIDMap; | 409 typedef std::map<content::WebContents*, std::string> WebContentsToAppIDMap; |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
494 // configuration of pinned and known (but not running) apps. | 501 // configuration of pinned and known (but not running) apps. |
495 int GetChromeIconIndexForCreation(); | 502 int GetChromeIconIndexForCreation(); |
496 | 503 |
497 // Get the list of pinned programs from the preferences. | 504 // Get the list of pinned programs from the preferences. |
498 std::vector<std::string> GetListOfPinnedAppsAndBrowser(); | 505 std::vector<std::string> GetListOfPinnedAppsAndBrowser(); |
499 | 506 |
500 // Close all windowed V1 applications of a certain extension which was already | 507 // Close all windowed V1 applications of a certain extension which was already |
501 // deleted. | 508 // deleted. |
502 void CloseWindowedAppsFromRemovedExtension(const std::string& app_id); | 509 void CloseWindowedAppsFromRemovedExtension(const std::string& app_id); |
503 | 510 |
504 // Set LauncherItemDelegate |item_delegate| for |id| and take an ownership. | 511 // Register LauncherItemDelegate. |
505 // TODO(simon.hong81): Make this take a scoped_ptr of |item_delegate|. | 512 void RegisterLauncherItemDelegate(); |
506 void SetLauncherItemDelegate(ash::LauncherID id, | |
507 ash::LauncherItemDelegate* item_delegate); | |
508 | 513 |
509 // Attach to a specific profile. | 514 // Attach to a specific profile. |
510 void AttachProfile(Profile* proifile); | 515 void AttachProfile(Profile* proifile); |
511 | 516 |
512 // Forget the current profile to allow attaching to a new one. | 517 // Forget the current profile to allow attaching to a new one. |
513 void ReleaseProfile(); | 518 void ReleaseProfile(); |
514 | 519 |
515 static ChromeLauncherController* instance_; | 520 static ChromeLauncherController* instance_; |
516 | 521 |
517 ash::LauncherModel* model_; | 522 ash::LauncherModel* model_; |
518 | 523 |
519 ash::LauncherItemDelegateManager* item_delegate_manager_; | |
520 | |
521 // Profile used for prefs and loading extensions. This is NOT necessarily the | 524 // Profile used for prefs and loading extensions. This is NOT necessarily the |
522 // profile new windows are created with. | 525 // profile new windows are created with. |
523 Profile* profile_; | 526 Profile* profile_; |
524 | 527 |
525 IDToItemControllerMap id_to_item_controller_map_; | 528 IDToItemControllerMap id_to_item_controller_map_; |
526 | 529 |
527 // Maintains activation order of web contents for each app. | 530 // Maintains activation order of web contents for each app. |
528 AppIDToWebContentsListMap app_id_to_web_contents_list_; | 531 AppIDToWebContentsListMap app_id_to_web_contents_list_; |
529 | 532 |
530 // Direct access to app_id for a web contents. | 533 // Direct access to app_id for a web contents. |
(...skipping 12 matching lines...) Expand all Loading... |
543 | 546 |
544 PrefChangeRegistrar pref_change_registrar_; | 547 PrefChangeRegistrar pref_change_registrar_; |
545 | 548 |
546 AppSyncUIState* app_sync_ui_state_; | 549 AppSyncUIState* app_sync_ui_state_; |
547 | 550 |
548 scoped_ptr<ExtensionEnableFlow> extension_enable_flow_; | 551 scoped_ptr<ExtensionEnableFlow> extension_enable_flow_; |
549 | 552 |
550 // Launchers that are currently being observed. | 553 // Launchers that are currently being observed. |
551 std::set<ash::Launcher*> launchers_; | 554 std::set<ash::Launcher*> launchers_; |
552 | 555 |
| 556 // The owned browser shortcut item. |
| 557 scoped_ptr<BrowserShortcutLauncherItemController> browser_item_controller_; |
| 558 |
553 // The owned browser status monitor. | 559 // The owned browser status monitor. |
554 scoped_ptr<BrowserStatusMonitor> browser_status_monitor_; | 560 scoped_ptr<BrowserStatusMonitor> browser_status_monitor_; |
555 | 561 |
556 // A special observer class to detect user switches. | 562 // A special observer class to detect user switches. |
557 scoped_ptr<ChromeLauncherControllerUserSwitchObserver> user_switch_observer_; | 563 scoped_ptr<ChromeLauncherControllerUserSwitchObserver> user_switch_observer_; |
558 | 564 |
559 // If true, incoming pinned state changes should be ignored. | 565 // If true, incoming pinned state changes should be ignored. |
560 bool ignore_persist_pinned_state_change_; | 566 bool ignore_persist_pinned_state_change_; |
561 | 567 |
562 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherController); | 568 DISALLOW_COPY_AND_ASSIGN(ChromeLauncherController); |
563 }; | 569 }; |
564 | 570 |
565 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ | 571 #endif // CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ |
OLD | NEW |