| // Copyright 2016 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_UI_ASH_SHELF_CHROME_SHELF_CONTROLLER_UTIL_H_ |
| #define CHROME_BROWSER_UI_ASH_SHELF_CHROME_SHELF_CONTROLLER_UTIL_H_ |
| |
| #include <string> |
| |
| #include "ash/public/cpp/shelf_types.h" |
| #include "chrome/browser/ash/app_list/app_list_controller_delegate.h" |
| #include "components/services/app_service/public/cpp/app_launch_util.h" |
| #include "components/services/app_service/public/cpp/app_types.h" |
| |
| class BrowserWindowInterface; |
| |
| namespace ash { |
| class ShelfModel; |
| } |
| |
| namespace extensions { |
| class Extension; |
| } |
| |
| // Returns the extension identified by |app_id|. |
| const extensions::Extension* GetExtensionForAppID(const std::string& app_id, |
| Profile* profile); |
| |
| // Returns whether the app can be pinned, and whether the pinned app are |
| // editable or fixed |
| AppListControllerDelegate::Pinnable GetPinnableForAppID( |
| const std::string& app_id, |
| Profile* profile); |
| |
| // Helper function to return whether the app with `app_id` should explicitly |
| // be hidden from shelf, as indicated by `AppUpdate::ShowInShelf()` app state. |
| bool IsAppHiddenFromShelf(Profile* profile, const std::string& app_id); |
| |
| // Helper function to return whether the promise app with `promise_package_id` |
| // should be visible in the shelf by reading the should_show field of the |
| // promise app in the PromiseAppRegistryCache. |
| bool IsPromiseAppReadyToShowInShelf(Profile* profile, |
| const std::string& promise_package_id); |
| |
| // Whether the pin state of the app with `app_id` is editable according to its |
| // `app_type`. |
| bool IsAppPinEditable(apps::AppType app_type, |
| const std::string& app_id, |
| Profile* profile); |
| |
| // Returns true when the given |browser| is listed in the browser |
| // application list. |
| bool IsBrowserRepresentedInBrowserList(BrowserWindowInterface* browser, |
| const ash::ShelfModel* model); |
| |
| // Pins an app to the shelf using only an app_id. |
| // If the app is already present in the shelf and is unpinned, mark it as |
| // pinned. |
| // If the app is already present in the shelf and is pinned, do nothing. |
| // If the app is not in the shelf, use ChromeShelfItemFactory to create a |
| // ShelfItem and ShelfItemDelegate, add it to the shelf, and mark it as pinned. |
| // If the app_id cannot be converted, does nothing. |
| void PinAppWithIDToShelf(const std::string& app_id); |
| |
| // Unpins an app from the shelf, if it is in the shelf. Otherwise does nothing. |
| void UnpinAppWithIDFromShelf(const std::string& app_id); |
| |
| apps::LaunchSource ShelfLaunchSourceToAppsLaunchSource( |
| ash::ShelfLaunchSource source); |
| |
| // Records an app launch from shelf event in `ScalableIph`. Note that |
| // `ScalableIph` records events for a subset of app ids. |
| void MaybeRecordAppLaunchForScalableIph(const std::string& app_id, |
| Profile* profile, |
| ash::ShelfLaunchSource source); |
| |
| #endif // CHROME_BROWSER_UI_ASH_SHELF_CHROME_SHELF_CONTROLLER_UTIL_H_ |