Chromium Code Reviews| Index: chrome/browser/ui/extensions/extension_message_bubble_factory.cc |
| diff --git a/chrome/browser/ui/extensions/extension_message_bubble_factory.cc b/chrome/browser/ui/extensions/extension_message_bubble_factory.cc |
| index b4a67c183501b2aad73be436984849385bf32baa..8d9e2a6c9a9f8a5f74313a739ecf3e085ff62722 100644 |
| --- a/chrome/browser/ui/extensions/extension_message_bubble_factory.cc |
| +++ b/chrome/browser/ui/extensions/extension_message_bubble_factory.cc |
| @@ -4,14 +4,19 @@ |
| #include "chrome/browser/ui/extensions/extension_message_bubble_factory.h" |
| +#include "base/command_line.h" |
| #include "base/lazy_instance.h" |
| +#include "base/metrics/field_trial.h" |
| #include "chrome/browser/extensions/dev_mode_bubble_controller.h" |
| #include "chrome/browser/extensions/extension_message_bubble_controller.h" |
| +#include "chrome/browser/extensions/install_verifier.h" |
| #include "chrome/browser/extensions/proxy_overridden_bubble_controller.h" |
| #include "chrome/browser/extensions/settings_api_bubble_controller.h" |
| #include "chrome/browser/extensions/settings_api_helpers.h" |
| #include "chrome/browser/extensions/suspicious_extension_bubble_controller.h" |
| #include "chrome/browser/profiles/profile.h" |
| +#include "chrome/common/chrome_switches.h" |
| +#include "extensions/common/feature_switch.h" |
| namespace { |
| @@ -21,13 +26,56 @@ namespace { |
| base::LazyInstance<std::set<Profile*> > g_profiles_evaluated = |
| LAZY_INSTANCE_INITIALIZER; |
| -// Currently, we only show these bubbles on windows platforms. This can be |
| -// overridden for testing purposes. |
| -#if defined(OS_WIN) |
| -bool g_enabled = true; |
| -#else |
| +// This is used to turn on all bubbles for testing. |
| bool g_enabled = false; |
|
Devlin
2015/05/08 16:06:35
Since this is only ever used in testing now, it sh
asargent_no_longer_on_chrome
2015/05/08 16:29:48
Done. I used 'g_enabled_for_tests' because that is
|
| + |
| +const char kEnableDevModeWarningExperimentName[] = |
| + "ExtensionDeveloperModeWarning"; |
| + |
| +const char kEnableProxyWarningExperimentName[] = |
| + "ExtensionProxyWarning"; |
| + |
| +bool IsExperimentEnabled(const char* experiment_name) { |
| + // Don't allow turning it off via command line. |
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| + if (command_line->HasSwitch(switches::kForceFieldTrials)) { |
| + std::string forced_trials = |
| + command_line->GetSwitchValueASCII(switches::kForceFieldTrials); |
| + if (forced_trials.find(experiment_name)) |
| + return true; |
| + } |
| + return base::FieldTrialList::FindFullName(experiment_name) == "Enabled"; |
| +} |
| + |
| +bool EnableSuspiciousExtensionsBubble() { |
| + return g_enabled || extensions::InstallVerifier::ShouldEnforce(); |
| +} |
| + |
| +bool EnableSettingsApiBubble() { |
| +#if defined(OS_WIN) |
| + return true; |
| +#endif |
| + return g_enabled; |
| +} |
| + |
| +bool EnableProxyOverrideBubble() { |
| +#if defined(OS_WIN) |
| + return true; |
| #endif |
| + return g_enabled || IsExperimentEnabled(kEnableProxyWarningExperimentName); |
| +} |
| + |
| +bool EnableDevModeBubble() { |
| + if (extensions::FeatureSwitch::force_dev_mode_highlighting()->IsEnabled()) |
| + return true; |
| + |
| +#if defined(OS_WIN) |
| + if (chrome::VersionInfo::GetChannel() >= chrome::VersionInfo::CHANNEL_BETA) |
| + return true; |
| +#endif |
| + |
| + return g_enabled || IsExperimentEnabled(kEnableDevModeWarningExperimentName); |
| +} |
| } // namespace |
| @@ -40,9 +88,6 @@ ExtensionMessageBubbleFactory::~ExtensionMessageBubbleFactory() { |
| scoped_ptr<extensions::ExtensionMessageBubbleController> |
| ExtensionMessageBubbleFactory::GetController() { |
| - if (!g_enabled) |
| - return scoped_ptr<extensions::ExtensionMessageBubbleController>(); |
| - |
| Profile* original_profile = profile_->GetOriginalProfile(); |
| std::set<Profile*>& profiles_evaluated = g_profiles_evaluated.Get(); |
| bool is_initial_check = profiles_evaluated.count(original_profile) == 0; |
| @@ -56,14 +101,14 @@ ExtensionMessageBubbleFactory::GetController() { |
| // The dev mode bubble is not time sensitive like the other two so we'll catch |
| // the dev mode extensions on the next startup/next window that opens. That |
| // way, we're not too spammy with the bubbles. |
| - { |
| + if (EnableSuspiciousExtensionsBubble()) { |
| scoped_ptr<extensions::SuspiciousExtensionBubbleController> controller( |
| new extensions::SuspiciousExtensionBubbleController(profile_)); |
| if (controller->ShouldShow()) |
| return controller.Pass(); |
| } |
| - { |
| + if (EnableSettingsApiBubble()) { |
| // No use showing this if it's not the startup of the profile. |
| if (is_initial_check) { |
| scoped_ptr<extensions::SettingsApiBubbleController> controller( |
| @@ -74,7 +119,7 @@ ExtensionMessageBubbleFactory::GetController() { |
| } |
| } |
| - { |
| + if (EnableProxyOverrideBubble()) { |
| // TODO(devlin): Move the "GetExtensionOverridingProxy" part into the |
| // proxy bubble controller. |
| const extensions::Extension* extension = |
| @@ -87,7 +132,7 @@ ExtensionMessageBubbleFactory::GetController() { |
| } |
| } |
| - { |
| + if (EnableDevModeBubble()) { |
| scoped_ptr<extensions::DevModeBubbleController> controller( |
| new extensions::DevModeBubbleController(profile_)); |
| if (controller->ShouldShow()) |