summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbenwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-22 09:20:47 +0000
committerbenwells@chromium.org <benwells@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-11-22 09:20:47 +0000
commitf5ea096be691b901a607cb6af1e862b844ef7913 (patch)
tree54cc5a71e67397f548ad657a89c605513f2c02ef
parent40f169221e9c702ba4689ceb71bd9ce2d9845638 (diff)
downloadchromium_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
-rw-r--r--chrome/browser/extensions/app_icon_loader_impl.cc5
-rw-r--r--chrome/browser/extensions/extension_prefs.cc2
-rw-r--r--chrome/browser/extensions/extension_prefs.h2
-rw-r--r--chrome/browser/extensions/extension_service.cc6
-rw-r--r--chrome/browser/extensions/extension_service.h3
-rw-r--r--chrome/browser/extensions/extension_util.cc13
-rw-r--r--chrome/browser/extensions/extension_util.h9
-rw-r--r--chrome/browser/ui/app_list/app_list_controller_delegate.cc3
-rw-r--r--chrome/browser/ui/app_list/extension_app_item.cc5
-rw-r--r--chrome/browser/ui/app_list/search/app_result.cc7
-rw-r--r--chrome/browser/ui/ash/chrome_new_window_delegate_chromeos.cc6
-rw-r--r--chrome/browser/ui/ash/launcher/chrome_launcher_controller.cc3
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;