Index: chrome/browser/extensions/error_console/error_console_unittest.cc |
diff --git a/chrome/browser/extensions/error_console/error_console_unittest.cc b/chrome/browser/extensions/error_console/error_console_unittest.cc |
index 981a0ffcb3808f677e66fa1f32a538988ac5f04d..e8afc580a6a3b79e921eada21233850702dbd509 100644 |
--- a/chrome/browser/extensions/error_console/error_console_unittest.cc |
+++ b/chrome/browser/extensions/error_console/error_console_unittest.cc |
@@ -8,13 +8,17 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/prefs/pref_service.h" |
#include "base/strings/string_number_conversions.h" |
+#include "chrome/common/extensions/features/feature_channel.h" |
#include "chrome/common/pref_names.h" |
#include "chrome/test/base/testing_profile.h" |
#include "extensions/browser/extension_error.h" |
#include "extensions/browser/extension_error_test_util.h" |
+#include "extensions/browser/extension_registry.h" |
#include "extensions/common/constants.h" |
+#include "extensions/common/extension_builder.h" |
#include "extensions/common/feature_switch.h" |
#include "extensions/common/id_util.h" |
+#include "extensions/common/value_builder.h" |
#include "testing/gtest/include/gtest/gtest.h" |
namespace extensions { |
@@ -44,6 +48,81 @@ class ErrorConsoleUnitTest : public testing::Test { |
ErrorConsole* error_console_; |
}; |
+// Test that the error console is enabled/disabled appropriately. |
+TEST_F(ErrorConsoleUnitTest, EnableAndDisableErrorConsole) { |
+ // Start in Dev Channel, without the feature switch. |
+ scoped_ptr<ScopedCurrentChannel> channel_override( |
+ new ScopedCurrentChannel(chrome::VersionInfo::CHANNEL_DEV)); |
+ ASSERT_EQ(chrome::VersionInfo::CHANNEL_DEV, GetCurrentChannel()); |
+ FeatureSwitch::error_console()->SetOverrideValue( |
+ FeatureSwitch::OVERRIDE_DISABLED); |
+ |
+ // At the start, the error console should be enabled, and specifically |
+ // enabled for the chrome:extensions page. |
+ EXPECT_TRUE(error_console_->enabled()); |
+ EXPECT_TRUE(error_console_->IsEnabledForChromeExtensionsPage()); |
+ EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); |
+ |
+ // If we disable developer mode, we should disable error console. |
+ profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, false); |
+ EXPECT_FALSE(error_console_->enabled()); |
+ EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); |
+ EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); |
+ |
+ // Similarly, if we change the current to less fun than Dev, ErrorConsole |
+ // should be disabled. |
+ channel_override.reset(); |
+ channel_override.reset( |
+ new ScopedCurrentChannel(chrome::VersionInfo::CHANNEL_BETA)); |
+ profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); |
+ EXPECT_FALSE(error_console_->enabled()); |
+ EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); |
+ EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); |
+ |
+ // But if we add the feature switch, that should override the channel. |
+ FeatureSwitch::error_console()->SetOverrideValue( |
+ FeatureSwitch::OVERRIDE_ENABLED); |
+ ASSERT_TRUE(FeatureSwitch::error_console()->IsEnabled()); |
+ // We use a pref mod to "poke" the ErrorConsole, because it needs an |
+ // indication that something changed (FeatureSwitches don't change in a real |
+ // environment, so ErrorConsole doesn't listen for them). |
+ profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, false); |
+ profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); |
+ EXPECT_TRUE(error_console_->enabled()); |
+ EXPECT_TRUE(error_console_->IsEnabledForChromeExtensionsPage()); |
+ EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); |
+ |
+ // Next, remove the feature switch (turning error console off), and install |
+ // the Apps Developer Tools. If we have Apps Developer Tools, Error Console |
+ // should be enabled by default. |
+ FeatureSwitch::error_console()->SetOverrideValue( |
+ FeatureSwitch::OVERRIDE_DISABLED); |
+ const char kAppsDeveloperToolsExtensionId[] = |
+ "ohmmkhmmmpcnpikjeljgnaoabkaalbgc"; |
+ scoped_refptr<Extension> adt = |
+ ExtensionBuilder() |
+ .SetManifest( |
+ DictionaryBuilder().Set("name", "apps dev tools") |
+ .Set("version", "0.2.0") |
+ .Set("manifest_version", 2) |
+ .Build()) |
+ .SetID(kAppsDeveloperToolsExtensionId) |
+ .Build(); |
+ ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get()); |
+ registry->AddEnabled(adt); |
+ registry->TriggerOnLoaded(adt); |
+ EXPECT_TRUE(error_console_->enabled()); |
+ EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); |
+ EXPECT_TRUE(error_console_->IsEnabledForAppsDeveloperTools()); |
+ |
+ // Unloading the Apps Developer Tools should disable error console. |
+ registry->RemoveEnabled(adt->id()); |
+ registry->TriggerOnUnloaded(adt); |
+ EXPECT_FALSE(error_console_->enabled()); |
+ EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); |
+ EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); |
+} |
+ |
// Test that errors are successfully reported. This is a simple test, since it |
// is tested more thoroughly in extensions/browser/error_map_unittest.cc |
TEST_F(ErrorConsoleUnitTest, ReportErrors) { |