diff options
author | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-22 09:20:47 +0000 |
---|---|---|
committer | benwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-11-22 09:20:47 +0000 |
commit | f5ea096be691b901a607cb6af1e862b844ef7913 (patch) | |
tree | 54cc5a71e67397f548ad657a89c605513f2c02ef | |
parent | 40f169221e9c702ba4689ceb71bd9ce2d9845638 (diff) | |
download | chromium_src-f5ea096be691b901a607cb6af1e862b844ef7913.zip chromium_src-f5ea096be691b901a607cb6af1e862b844ef7913.tar.gz chromium_src-f5ea096be691b901a607cb6af1e862b844ef7913.tar.bz2 |
Stop showing disabled apps in the app launcher and shelf greyed out.
These apps can still be run, they just need to go through an enable
flow.
BUG=321502, 286479
TEST=Check that apps which have been updated in the store to have new
permissions can be launched properly, and are not shown greyed out.
Review URL: https://codereview.chromium.org/81333004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@236736 0039d316-1c4b-4281-b951-d872f2087c98
12 files changed, 43 insertions, 21 deletions
diff --git a/chrome/browser/extensions/app_icon_loader_impl.cc b/chrome/browser/extensions/app_icon_loader_impl.cc index 879033d..fefa33eb 100644 --- a/chrome/browser/extensions/app_icon_loader_impl.cc +++ b/chrome/browser/extensions/app_icon_loader_impl.cc @@ -7,6 +7,7 @@ #include "base/stl_util.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/common/extensions/manifest_handlers/icons_handler.h" @@ -106,8 +107,8 @@ void AppIconLoaderImpl::BuildImage(const std::string& id, const ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - const bool enabled = service->IsExtensionEnabledForLauncher(id); - if (!enabled) { + const bool can_launch = extension_util::IsAppLaunchable(id, service); + if (!can_launch) { const color_utils::HSL shift = {-1, 0, 0.6}; image = gfx::ImageSkiaOperations::CreateHSLShiftedImage(image, shift); } diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc index a76f691..ea9d003 100644 --- a/chrome/browser/extensions/extension_prefs.cc +++ b/chrome/browser/extensions/extension_prefs.cc @@ -716,7 +716,7 @@ void ExtensionPrefs::SetDidExtensionEscalatePermissions( new base::FundamentalValue(did_escalate)); } -int ExtensionPrefs::GetDisableReasons(const std::string& extension_id) { +int ExtensionPrefs::GetDisableReasons(const std::string& extension_id) const { int value = -1; if (ReadPrefAsInteger(extension_id, kPrefDisableReasons, &value) && value >= 0) { diff --git a/chrome/browser/extensions/extension_prefs.h b/chrome/browser/extensions/extension_prefs.h index f5e3bc2..253c128 100644 --- a/chrome/browser/extensions/extension_prefs.h +++ b/chrome/browser/extensions/extension_prefs.h @@ -241,7 +241,7 @@ class ExtensionPrefs : public ExtensionScopedPrefs, bool did_escalate); // Getter and setters for disabled reason. - int GetDisableReasons(const std::string& extension_id); + int GetDisableReasons(const std::string& extension_id) const; void AddDisableReason(const std::string& extension_id, Extension::DisableReason disable_reason); void RemoveDisableReason(const std::string& extension_id, diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index a6b2b8e..54f37b5 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -888,12 +888,6 @@ bool ExtensionService::IsExternalExtensionUninstalled( return extension_prefs_->IsExternalExtensionUninstalled(extension_id); } -bool ExtensionService::IsExtensionEnabledForLauncher( - const std::string& extension_id) const { - return IsExtensionEnabled(extension_id) && - !GetTerminatedExtension(extension_id); -} - void ExtensionService::EnableExtension(const std::string& extension_id) { CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 3ec9724..5d69ec9 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -277,9 +277,6 @@ class ExtensionService virtual bool IsExternalExtensionUninstalled( const std::string& extension_id) const OVERRIDE; - // Whether the extension should show as enabled state in launcher. - bool IsExtensionEnabledForLauncher(const std::string& extension_id) const; - // Enables the extension. If the extension is already enabled, does // nothing. virtual void EnableExtension(const std::string& extension_id); diff --git a/chrome/browser/extensions/extension_util.cc b/chrome/browser/extensions/extension_util.cc index 1192a0d..fb51962 100644 --- a/chrome/browser/extensions/extension_util.cc +++ b/chrome/browser/extensions/extension_util.cc @@ -124,4 +124,17 @@ void SetAllowFileAccess(const Extension* extension, service->ReloadExtension(extension->id()); } +bool IsAppLaunchable(const std::string& extension_id, + const ExtensionService* service) { + return !(service->extension_prefs()->GetDisableReasons(extension_id) & + Extension::DISABLE_UNSUPPORTED_REQUIREMENT); +} + +bool IsAppLaunchableWithoutEnabling(const std::string& extension_id, + const ExtensionService* service) { + const Extension* launchable_extension = service->GetExtensionById( + extension_id, ExtensionService::INCLUDE_ENABLED); + return launchable_extension != NULL; +} + } // namespace extension_util diff --git a/chrome/browser/extensions/extension_util.h b/chrome/browser/extensions/extension_util.h index fb9d74e..c61f535 100644 --- a/chrome/browser/extensions/extension_util.h +++ b/chrome/browser/extensions/extension_util.h @@ -44,6 +44,15 @@ void SetAllowFileAccess(const extensions::Extension* extension, ExtensionService* service, bool allow); +// Whether an app can be launched or not. Apps may require enabling first, +// but they will still be launchable. +bool IsAppLaunchable(const std::string& extension_id, + const ExtensionService* service); + +// Whether an app can be launched without being enabled first. +bool IsAppLaunchableWithoutEnabling(const std::string& extension_id, + const ExtensionService* service); + } // namespace extension_util #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_UTIL_H_ diff --git a/chrome/browser/ui/app_list/app_list_controller_delegate.cc b/chrome/browser/ui/app_list/app_list_controller_delegate.cc index 4b508b1..63b237f 100644 --- a/chrome/browser/ui/app_list/app_list_controller_delegate.cc +++ b/chrome/browser/ui/app_list/app_list_controller_delegate.cc @@ -6,6 +6,7 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/install_tracker_factory.h" #include "chrome/browser/extensions/management_policy.h" #include "chrome/browser/ui/app_list/extension_uninstaller.h" @@ -106,7 +107,7 @@ bool AppListControllerDelegate::HasOptionsPage( const ExtensionService* service = extensions::ExtensionSystem::Get(profile)->extension_service(); const extensions::Extension* extension = GetExtension(profile, app_id); - return service->IsExtensionEnabledForLauncher(app_id) && + return extension_util::IsAppLaunchableWithoutEnabling(app_id, service) && extension && !extensions::ManifestURL::GetOptionsPage(extension).is_empty(); } diff --git a/chrome/browser/ui/app_list/extension_app_item.cc b/chrome/browser/ui/app_list/extension_app_item.cc index 94ae775..686cacd 100644 --- a/chrome/browser/ui/app_list/extension_app_item.cc +++ b/chrome/browser/ui/app_list/extension_app_item.cc @@ -8,6 +8,7 @@ #include "chrome/browser/extensions/extension_prefs.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/app_list/app_context_menu.h" #include "chrome/browser/ui/app_list/app_list_controller_delegate.h" @@ -125,7 +126,7 @@ void ExtensionAppItem::UpdateIcon() { const ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - const bool enabled = service->IsExtensionEnabledForLauncher(extension_id_); + const bool enabled = extension_util::IsAppLaunchable(extension_id_, service); if (!enabled) { const color_utils::HSL shift = {-1, 0, 0.6}; icon = gfx::ImageSkiaOperations::CreateHSLShiftedImage(icon, shift); @@ -188,7 +189,7 @@ void ExtensionAppItem::LoadImage(const Extension* extension) { bool ExtensionAppItem::RunExtensionEnableFlow() { const ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - if (service->IsExtensionEnabledForLauncher(extension_id_)) + if (extension_util::IsAppLaunchableWithoutEnabling(extension_id_, service)) return false; if (!extension_enable_flow_) { diff --git a/chrome/browser/ui/app_list/search/app_result.cc b/chrome/browser/ui/app_list/search/app_result.cc index 4dddc6f..c66e6aa 100644 --- a/chrome/browser/ui/app_list/search/app_result.cc +++ b/chrome/browser/ui/app_list/search/app_result.cc @@ -6,6 +6,7 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system_factory.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/extensions/install_tracker.h" #include "chrome/browser/extensions/install_tracker_factory.h" #include "chrome/browser/profiles/profile.h" @@ -132,7 +133,7 @@ void AppResult::StopObservingInstall() { bool AppResult::RunExtensionEnableFlow() { const ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - if (service->IsExtensionEnabledForLauncher(app_id_)) + if (extension_util::IsAppLaunchableWithoutEnabling(app_id_, service)) return false; if (!extension_enable_flow_) { @@ -151,8 +152,8 @@ void AppResult::UpdateIcon() { const ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - const bool enabled = service->IsExtensionEnabledForLauncher(app_id_); - if (!enabled) { + const bool can_launch = extension_util::IsAppLaunchable(app_id_, service); + if (!can_launch) { const color_utils::HSL shift = {-1, 0, 0.6}; icon = gfx::ImageSkiaOperations::CreateHSLShiftedImage(icon, shift); } diff --git a/chrome/browser/ui/ash/chrome_new_window_delegate_chromeos.cc b/chrome/browser/ui/ash/chrome_new_window_delegate_chromeos.cc index e74eaf0..a5e64fe4 100644 --- a/chrome/browser/ui/ash/chrome_new_window_delegate_chromeos.cc +++ b/chrome/browser/ui/ash/chrome_new_window_delegate_chromeos.cc @@ -10,6 +10,7 @@ #include "chrome/browser/chromeos/file_manager/app_id.h" #include "chrome/browser/extensions/api/terminal/terminal_extension_helper.h" #include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/profiles/profile_manager.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" @@ -28,8 +29,11 @@ void ChromeNewWindowDelegateChromeos::OpenFileManager() { Profile* const profile = ProfileManager::GetDefaultProfileOrOffTheRecord(); const ExtensionService* const service = profile->GetExtensionService(); if (service == NULL || - !service->IsExtensionEnabledForLauncher(kFileManagerAppId)) + !extension_util::IsAppLaunchableWithoutEnabling(kFileManagerAppId, + service)) { return; + } + const extensions::Extension* const extension = service->GetInstalledExtension(kFileManagerAppId); // event_flags = 0 means this invokes the same behavior as the launcher diff --git a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc index 04d99fc..419a785 100644 --- a/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc +++ b/chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc @@ -28,6 +28,7 @@ #include "chrome/browser/extensions/app_icon_loader_impl.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_system.h" +#include "chrome/browser/extensions/extension_util.h" #include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/prefs/incognito_mode_prefs.h" #include "chrome/browser/prefs/pref_service_syncable.h" @@ -646,7 +647,7 @@ void ChromeLauncherController::LaunchApp(const std::string& app_id, const ExtensionService* service = extensions::ExtensionSystem::Get(profile_)->extension_service(); - if (!service->IsExtensionEnabledForLauncher(app_id)) { + if (!extension_util::IsAppLaunchableWithoutEnabling(app_id, service)) { // Do nothing if there is already a running enable flow. if (extension_enable_flow_) return; |