Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller.h |
diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h |
index 6188d404b04332630576f863a5aaf6ce0f22a108..373d7b3941e1d6a32e3d61346aa003db0e4c7f0a 100644 |
--- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h |
+++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.h |
@@ -5,23 +5,29 @@ |
#ifndef CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ |
#define CHROME_BROWSER_UI_ASH_LAUNCHER_CHROME_LAUNCHER_CONTROLLER_H_ |
+#include <memory> |
#include <string> |
#include <vector> |
#include "ash/common/shelf/shelf_item_delegate.h" |
#include "ash/common/shelf/shelf_item_types.h" |
+#include "ash/public/interfaces/shelf.mojom.h" |
#include "base/memory/scoped_vector.h" |
+#include "chrome/browser/ui/app_icon_loader.h" |
+#include "chrome/browser/ui/app_icon_loader_delegate.h" |
#include "chrome/browser/ui/app_list/app_list_controller_delegate.h" |
#include "chrome/browser/ui/ash/launcher/chrome_launcher_app_menu_item.h" |
#include "chrome/browser/ui/ash/launcher/chrome_launcher_types.h" |
#include "chrome/browser/ui/ash/launcher/settings_window_observer.h" |
#include "extensions/common/constants.h" |
+#include "mojo/public/cpp/bindings/associated_binding.h" |
class AccountId; |
class ArcAppDeferredLauncherController; |
class Browser; |
class BrowserShortcutLauncherItemController; |
class GURL; |
+class LauncherControllerHelper; |
class LauncherItemController; |
namespace ash { |
@@ -45,9 +51,9 @@ typedef ScopedVector<ChromeLauncherAppMenuItem> ChromeLauncherAppMenuItems; |
// ChromeLauncherController manages the launcher items needed for content |
// windows. Launcher items have a type, an optional app id, and a controller. |
-// There are different kinds of launcher item controllers, all extending the |
-// LauncherItemController class. |
-class ChromeLauncherController { |
+// Implements mojom::ShelfObserver and is a client of mojom::ShelfController. |
+class ChromeLauncherController : public ash::mojom::ShelfObserver, |
+ private AppIconLoaderDelegate { |
sky
2016/10/07 16:10:18
private->public
msw
2016/10/07 22:45:58
Done.
|
public: |
// Used to update the state of non plaform apps, as web contents change. |
enum AppState { |
@@ -65,7 +71,13 @@ class ChromeLauncherController { |
// Returns the single ChromeLauncherController instance. |
static ChromeLauncherController* instance() { return instance_; } |
- virtual ~ChromeLauncherController(); |
+ Profile* profile() const { return profile_; } |
+ |
+ LauncherControllerHelper* launcher_controller_helper() { |
+ return launcher_controller_helper_.get(); |
+ } |
+ |
+ ~ChromeLauncherController() override; |
// Initializes this ChromeLauncherController. |
virtual void Init() = 0; |
@@ -129,9 +141,9 @@ class ChromeLauncherController { |
// Opens a new instance of the application identified by |app_id|. |
// Used by the app-list, and by pinned-app shelf items. |
- virtual void LaunchApp(const std::string& app_id, |
- ash::LaunchSource source, |
- int event_flags) = 0; |
+ void LaunchApp(const std::string& app_id, |
+ ash::LaunchSource source, |
+ int event_flags); |
// If |app_id| is running, reactivates the app's most recently active window, |
// otherwise launches and activates the app. |
@@ -155,10 +167,6 @@ class ChromeLauncherController { |
virtual void SetLaunchType(ash::ShelfID id, |
extensions::LaunchType launch_type) = 0; |
- // Accessor to the currently loaded profile. Note that in multi profile use |
- // cases this might change over time. |
- virtual Profile* GetProfile() = 0; |
- |
// Notify the controller that the state of an non platform app's tabs |
// have changed, |
virtual void UpdateAppState(content::WebContents* contents, |
@@ -244,14 +252,70 @@ class ChromeLauncherController { |
// Controller to launch Arc apps in deferred mode. |
virtual ArcAppDeferredLauncherController* GetArcDeferredLauncher() = 0; |
+ AppIconLoader* GetAppIconLoaderForApp(const std::string& app_id); |
+ |
+ // Sets the shelf auto-hide and/or alignment behavior from prefs. |
+ void SetShelfAutoHideBehaviorFromPrefs(); |
+ void SetShelfAlignmentFromPrefs(); |
+ void SetShelfBehaviorsFromPrefs(); |
+ |
+ // Sets LauncherControllerHelper or AppIconLoader for test, taking ownership. |
+ void SetLauncherControllerHelperForTest( |
+ std::unique_ptr<LauncherControllerHelper> helper); |
+ void SetAppIconLoadersForTest( |
+ std::vector<std::unique_ptr<AppIconLoader>>& loaders); |
+ |
+ void SetProfileForTest(Profile* profile); |
+ |
protected: |
ChromeLauncherController(); |
+ // Connects or reconnects to the mojom::ShelfController interface in ash. |
+ // Returns true if connected and returns false in unit tests. |
+ bool ConnectToShelfController(); |
+ |
+ // Accessor for subclasses to interact with the shelf controller. |
+ ash::mojom::ShelfControllerPtr& shelf_controller() { |
+ return shelf_controller_; |
+ } |
+ |
+ // Attach to a specific profile. |
+ virtual void AttachProfile(Profile* profile); |
+ |
+ // ash::mojom::ShelfObserver: |
+ void OnShelfCreated(int64_t display_id) override; |
+ void OnAlignmentChanged(ash::ShelfAlignment alignment, |
+ int64_t display_id) override; |
+ void OnAutoHideBehaviorChanged(ash::ShelfAutoHideBehavior auto_hide, |
+ int64_t display_id) override; |
+ |
private: |
+ // AppIconLoaderDelegate: |
+ void OnAppImageUpdated(const std::string& app_id, |
+ const gfx::ImageSkia& image) override; |
+ |
static ChromeLauncherController* instance_; |
+ // The currently loaded profile used for prefs and loading extensions. This is |
+ // NOT necessarily the profile new windows are created with. Note that in |
+ // multi-profile use cases this might change over time. |
+ Profile* profile_; |
+ |
+ // Ash's mojom::ShelfController used to change shelf state. |
+ ash::mojom::ShelfControllerPtr shelf_controller_; |
+ |
+ // The binding this instance uses to implment mojom::ShelfObserver |
+ mojo::AssociatedBinding<ash::mojom::ShelfObserver> observer_binding_; |
+ |
+ // Used to get app info for tabs. |
+ std::unique_ptr<LauncherControllerHelper> launcher_controller_helper_; |
+ |
+ // An observer that manages the shelf title and icon for settings windows. |
SettingsWindowObserver settings_window_observer_; |
+ // Used to load the images for app items. |
+ std::vector<std::unique_ptr<AppIconLoader>> app_icon_loaders_; |
+ |
DISALLOW_COPY_AND_ASSIGN(ChromeLauncherController); |
}; |