error_console_unittest.cc revision 03b57e008b61dfcb1fbad3aea950ae0e001748b0
1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Copyright 2013 The Chromium Authors. All rights reserved. 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Use of this source code is governed by a BSD-style license that can be 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// found in the LICENSE file. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "chrome/browser/extensions/error_console/error_console.h" 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "base/logging.h" 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "base/memory/ref_counted.h" 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "base/memory/scoped_ptr.h" 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "base/prefs/pref_service.h" 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "base/strings/string_number_conversions.h" 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "chrome/common/extensions/features/feature_channel.h" 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "chrome/common/pref_names.h" 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "chrome/test/base/testing_profile.h" 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "components/crx_file/id_util.h" 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/browser/extension_error.h" 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/browser/extension_error_test_util.h" 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/browser/extension_registry.h" 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/common/constants.h" 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/common/extension_builder.h" 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/common/feature_switch.h" 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "extensions/common/value_builder.h" 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include "testing/gtest/include/gtest/gtest.h" 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectnamespace extensions { 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectusing error_test_util::CreateNewManifestError; 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectusing error_test_util::CreateNewRuntimeError; 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectclass ErrorConsoleUnitTest : public testing::Test { 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project public: 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ErrorConsoleUnitTest() : error_console_(NULL) { } 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual ~ErrorConsoleUnitTest() { } 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project virtual void SetUp() OVERRIDE { 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project testing::Test::SetUp(); 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Errors are only kept if we have the FeatureSwitch and have Developer Mode 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // enabled. 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::error_console()->SetOverrideValue( 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::OVERRIDE_ENABLED); 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project profile_.reset(new TestingProfile); 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_ = ErrorConsole::Get(profile_.get()); 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project protected: 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project scoped_ptr<TestingProfile> profile_; 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ErrorConsole* error_console_; 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project}; 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Test that the error console is enabled/disabled appropriately. 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTEST_F(ErrorConsoleUnitTest, EnableAndDisableErrorConsole) { 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Start in Dev Channel, without the feature switch. 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project scoped_ptr<ScopedCurrentChannel> channel_override( 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project new ScopedCurrentChannel(chrome::VersionInfo::CHANNEL_DEV)); 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(chrome::VersionInfo::CHANNEL_DEV, GetCurrentChannel()); 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::error_console()->SetOverrideValue( 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::OVERRIDE_DISABLED); 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 61e45f106cb6b47af1f21efe76e933bdea2f5dd1caNagendra Modadugu // At the start, the error console should be enabled, and specifically 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // enabled for the chrome:extensions page. 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->enabled()); 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->IsEnabledForChromeExtensionsPage()); 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // If we disable developer mode, we should disable error console. 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, false); 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->enabled()); 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); 72656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Similarly, if we change the current to less fun than Dev, ErrorConsole 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // should be disabled. 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project channel_override.reset(); 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project channel_override.reset( 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project new ScopedCurrentChannel(chrome::VersionInfo::CHANNEL_BETA)); 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->enabled()); 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // But if we add the feature switch, that should override the channel. 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::error_console()->SetOverrideValue( 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::OVERRIDE_ENABLED); 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_TRUE(FeatureSwitch::error_console()->IsEnabled()); 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // We use a pref mod to "poke" the ErrorConsole, because it needs an 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // indication that something changed (FeatureSwitches don't change in a real 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // environment, so ErrorConsole doesn't listen for them). 90656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, false); 91656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->enabled()); 93656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->IsEnabledForChromeExtensionsPage()); 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Next, remove the feature switch (turning error console off), and install 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // the Apps Developer Tools. If we have Apps Developer Tools, Error Console 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // should be enabled by default. 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::error_console()->SetOverrideValue( 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project FeatureSwitch::OVERRIDE_DISABLED); 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const char kAppsDeveloperToolsExtensionId[] = 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project "ohmmkhmmmpcnpikjeljgnaoabkaalbgc"; 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project scoped_refptr<Extension> adt = 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionBuilder() 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetManifest( 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project DictionaryBuilder().Set("name", "apps dev tools") 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("version", "0.2.0") 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("manifest_version", 2) 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Build()) 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetID(kAppsDeveloperToolsExtensionId) 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Build(); 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get()); 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project registry->AddEnabled(adt); 114656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project registry->TriggerOnLoaded(adt); 115656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->enabled()); 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->IsEnabledForAppsDeveloperTools()); 118656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Unloading the Apps Developer Tools should disable error console. 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project registry->RemoveEnabled(adt->id()); 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project registry->TriggerOnUnloaded(adt, UnloadedExtensionInfo::REASON_DISABLE); 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->enabled()); 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForChromeExtensionsPage()); 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsEnabledForAppsDeveloperTools()); 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Test that errors are successfully reported. This is a simple test, since it 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// is tested more thoroughly in extensions/browser/error_map_unittest.cc 129656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTEST_F(ErrorConsoleUnitTest, ReportErrors) { 130656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const size_t kNumTotalErrors = 6; 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const std::string kId = crx_file::id_util::GenerateId("id"); 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->set_default_reporting_for_test(ExtensionError::MANIFEST_ERROR, 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project true); 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId).size()); 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (size_t i = 0; i < kNumTotalErrors; ++i) { 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewManifestError(kId, base::UintToString(i))); 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(kNumTotalErrors, error_console_->GetErrorsForExtension(kId).size()); 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 143656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 144656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTEST_F(ErrorConsoleUnitTest, DontStoreErrorsWithoutEnablingType) { 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Disable default runtime error reporting, and enable default manifest error 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // reporting. 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->set_default_reporting_for_test(ExtensionError::RUNTIME_ERROR, 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project false); 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->set_default_reporting_for_test(ExtensionError::MANIFEST_ERROR, 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project true); 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const std::string kId = crx_file::id_util::GenerateId("id"); 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Try to report a runtime error - it should be ignored. 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewRuntimeError(kId, "a")); 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId).size()); 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 158656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Check that manifest errors are reported successfully. 159656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewManifestError(kId, "b")); 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(1u, error_console_->GetErrorsForExtension(kId).size()); 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // We should still ignore runtime errors. 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewRuntimeError(kId, "c")); 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(1u, error_console_->GetErrorsForExtension(kId).size()); 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Enable runtime errors specifically for this extension, and disable the use 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // of the default mask. 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->SetReportingForExtension( 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project kId, ExtensionError::RUNTIME_ERROR, true); 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // We should now accept runtime and manifest errors. 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewManifestError(kId, "d")); 173656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(2u, error_console_->GetErrorsForExtension(kId).size()); 174656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewRuntimeError(kId, "e")); 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(3u, error_console_->GetErrorsForExtension(kId).size()); 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // All other extensions should still use the default mask, and ignore runtime 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // errors but report manifest errors. 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project const std::string kId2 = crx_file::id_util::GenerateId("id2"); 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewRuntimeError(kId2, "f")); 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId2).size()); 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewManifestError(kId2, "g")); 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(1u, error_console_->GetErrorsForExtension(kId2).size()); 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // By reverting to default reporting, we should again allow manifest errors, 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // but not runtime errors. 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->UseDefaultReportingForExtension(kId); 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewManifestError(kId, "h")); 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(4u, error_console_->GetErrorsForExtension(kId).size()); 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError(CreateNewRuntimeError(kId, "i")); 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ASSERT_EQ(4u, error_console_->GetErrorsForExtension(kId).size()); 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// Test that we only store errors by default for unpacked extensions, and that 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project// assigning a preference to any extension overrides the defaults. 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectTEST_F(ErrorConsoleUnitTest, TestDefaultStoringPrefs) { 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // For this, we need actual extensions. 198656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project scoped_refptr<const Extension> unpacked_extension = 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionBuilder() 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetManifest(DictionaryBuilder() 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("name", "unpacked") 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("version", "0.0.1") 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("manifest_version", 2) 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Build()) 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetLocation(Manifest::UNPACKED) 206656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetID(crx_file::id_util::GenerateId("unpacked")) 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Build(); 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project scoped_refptr<const Extension> packed_extension = 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionBuilder() 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetManifest(DictionaryBuilder() 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("name", "packed") 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("version", "0.0.1") 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Set("manifest_version", 2) 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Build()) 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetLocation(Manifest::INTERNAL) 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .SetID(crx_file::id_util::GenerateId("packed")) 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project .Build(); 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionRegistry* registry = ExtensionRegistry::Get(profile_.get()); 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project registry->AddEnabled(unpacked_extension); 221656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project registry->AddEnabled(packed_extension); 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // We should start with a clean slate. 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_EQ(0u, error_console_->GetErrorsForExtension( 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unpacked_extension->id()).size()); 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_EQ(0u, error_console_->GetErrorsForExtension( 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project packed_extension->id()).size()); 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Errors should be ignored by default for the packed extension. 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewManifestError(packed_extension->id(), "manifest error 1")); 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewRuntimeError(packed_extension->id(), "runtime error 1")); 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_EQ(0u, error_console_->GetErrorsForExtension( 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project packed_extension->id()).size()); 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Also check that reporting settings are correctly returned. 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsReportingEnabledForExtension( 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project packed_extension->id())); 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Errors should be reported by default for the unpacked extension. 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewManifestError(unpacked_extension->id(), "manifest error 2")); 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewRuntimeError(unpacked_extension->id(), "runtime error 2")); 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_EQ(2u, error_console_->GetErrorsForExtension( 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unpacked_extension->id()).size()); 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Also check that reporting settings are correctly returned. 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->IsReportingEnabledForExtension( 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unpacked_extension->id())); 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // Registering a preference should override this for both types of extensions 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // (should be able to enable errors for packed, or disable errors for 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project // unpacked). 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->SetReportingForExtension(packed_extension->id(), 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionError::RUNTIME_ERROR, 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project true); 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewRuntimeError(packed_extension->id(), "runtime error 3")); 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_EQ(1u, error_console_->GetErrorsForExtension( 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project packed_extension->id()).size()); 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_TRUE(error_console_->IsReportingEnabledForExtension( 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project packed_extension->id())); 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->SetReportingForExtension(unpacked_extension->id(), 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ExtensionError::RUNTIME_ERROR, 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project false); 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->ReportError( 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CreateNewRuntimeError(packed_extension->id(), "runtime error 4")); 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_EQ(2u, // We should still have the first two errors. 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project error_console_->GetErrorsForExtension( 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unpacked_extension->id()).size()); 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project EXPECT_FALSE(error_console_->IsReportingEnabledForExtension( 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project unpacked_extension->id())); 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project} // namespace extensions 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project