| Index: chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
|
| diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
|
| index b81ad446cc5ab7b71d271dcb72e95bf4d121113e..dc5f45bc9b63b380495fd31d1f4fbec3a7ebc3fe 100644
|
| --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
|
| +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc
|
| @@ -222,6 +222,15 @@ void update_pinned_apps(const std::string& app_id,
|
| }
|
| }
|
|
|
| +const char* const kPinProhibitedExtensionIds[] = {
|
| +#if defined(OS_CHROMEOS)
|
| + "cnbgggchhmkkdmeppjobngjoejnihlei", // Arc Support
|
| +#endif
|
| +};
|
| +
|
| +const size_t kPinProhibitedExtensionIdsLength =
|
| + arraysize(kPinProhibitedExtensionIds);
|
| +
|
| } // namespace
|
|
|
| #if defined(OS_CHROMEOS)
|
| @@ -503,20 +512,26 @@ void ChromeLauncherController::CloseLauncherItem(ash::ShelfID id) {
|
| }
|
| }
|
|
|
| -bool ChromeLauncherController::CanPin(const std::string& app_id) {
|
| +AppListControllerDelegate::Pinnable ChromeLauncherController::GetPinnable(
|
| + const std::string& app_id) {
|
| + for (size_t i = 0; i < kPinProhibitedExtensionIdsLength; ++i) {
|
| + if (kPinProhibitedExtensionIds[i] == app_id)
|
| + return AppListControllerDelegate::NO_PIN;
|
| + }
|
| +
|
| const base::ListValue* pref =
|
| profile_->GetPrefs()->GetList(prefs::kPolicyPinnedLauncherApps);
|
| if (!pref)
|
| - return true;
|
| + return AppListControllerDelegate::PIN_EDITABLE;
|
| for (size_t index = 0; index < pref->GetSize(); ++index) {
|
| const base::DictionaryValue* app = nullptr;
|
| std::string the_app_id;
|
| if (pref->GetDictionary(index, &app) &&
|
| app->GetString(ash::kPinnedAppsPrefAppIDPath, &the_app_id) &&
|
| app_id == the_app_id)
|
| - return false;
|
| + return AppListControllerDelegate::PIN_FIXED;
|
| }
|
| - return true;
|
| + return AppListControllerDelegate::PIN_EDITABLE;
|
| }
|
|
|
| void ChromeLauncherController::Pin(ash::ShelfID id) {
|
| @@ -542,7 +557,7 @@ void ChromeLauncherController::Pin(ash::ShelfID id) {
|
| void ChromeLauncherController::Unpin(ash::ShelfID id) {
|
| LauncherItemController* controller = GetLauncherItemController(id);
|
| CHECK(controller);
|
| - bool can_pin = controller->CanPin();
|
| + const bool can_pin = controller->CanPin();
|
|
|
| if (controller->type() == LauncherItemController::TYPE_APP ||
|
| controller->locked()) {
|
| @@ -791,7 +806,7 @@ bool ChromeLauncherController::IsWindowedAppInLauncher(
|
| }
|
|
|
| void ChromeLauncherController::PinAppWithID(const std::string& app_id) {
|
| - if (CanPin(app_id))
|
| + if (GetPinnable(app_id) == AppListControllerDelegate::PIN_EDITABLE)
|
| DoPinAppWithID(app_id);
|
| else
|
| NOTREACHED();
|
| @@ -808,7 +823,7 @@ void ChromeLauncherController::SetLaunchType(
|
| }
|
|
|
| void ChromeLauncherController::UnpinAppWithID(const std::string& app_id) {
|
| - if (CanPin(app_id))
|
| + if (GetPinnable(app_id) == AppListControllerDelegate::PIN_EDITABLE)
|
| DoUnpinAppWithID(app_id);
|
| else
|
| NOTREACHED();
|
| @@ -1452,7 +1467,7 @@ void ChromeLauncherController::DoPinAppWithID(const std::string& app_id) {
|
| } else {
|
| // Otherwise, create a shortcut item for it.
|
| shelf_id = CreateAppShortcutLauncherItem(app_id, model_->item_count());
|
| - if (CanPin(app_id))
|
| + if (GetPinnable(app_id) == AppListControllerDelegate::PIN_EDITABLE)
|
| PersistPinnedState();
|
| }
|
| }
|
|
|