error_console_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// found in the LICENSE file. 4558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 5558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/browser/extensions/error_console/error_console.h" 6558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 7ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/logging.h" 8558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/memory/scoped_ptr.h" 9424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "base/prefs/pref_service.h" 10ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "base/strings/string_number_conversions.h" 11424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "chrome/common/pref_names.h" 12558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "chrome/test/base/testing_profile.h" 13ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "extensions/browser/extension_error.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_error_test_util.h" 15ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "extensions/common/constants.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/feature_switch.h" 17424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "extensions/common/id_util.h" 18558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 19558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 20558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochnamespace extensions { 21558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using error_test_util::CreateNewManifestError; 235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using error_test_util::CreateNewRuntimeError; 24558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 25558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ErrorConsoleUnitTest : public testing::Test { 26558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch public: 27424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ErrorConsoleUnitTest() : error_console_(NULL) { } 28558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~ErrorConsoleUnitTest() { } 29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 30424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) virtual void SetUp() OVERRIDE { 31424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) testing::Test::SetUp(); 32424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 33424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Errors are only kept if we have the FeatureSwitch and have Developer Mode 34424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // enabled. 35424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FeatureSwitch::error_console()->SetOverrideValue( 36424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) FeatureSwitch::OVERRIDE_ENABLED); 37424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) profile_.reset(new TestingProfile); 38424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) profile_->GetPrefs()->SetBoolean(prefs::kExtensionsUIDeveloperMode, true); 39424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) error_console_ = ErrorConsole::Get(profile_.get()); 40424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 41424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 42558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch protected: 43558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_ptr<TestingProfile> profile_; 44558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ErrorConsole* error_console_; 45558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch}; 46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Test that errors are successfully reported. This is a simple test, since it 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// is tested more thoroughly in extensions/browser/error_map_unittest.cc 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ErrorConsoleUnitTest, ReportErrors) { 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch const size_t kNumTotalErrors = 6; 51424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string kId = id_util::GenerateId("id"); 52ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId).size()); 53ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) for (size_t i = 0; i < kNumTotalErrors; ++i) { 55ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch error_console_->ReportError( 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateNewManifestError(kId, base::UintToString(i))); 57ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch } 58ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(kNumTotalErrors, error_console_->GetErrorsForExtension(kId).size()); 60424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)} 61424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)TEST_F(ErrorConsoleUnitTest, DontStoreErrorsWithoutEnablingType) { 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Disable default runtime error reporting. 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->set_default_reporting_for_test(ExtensionError::RUNTIME_ERROR, 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) false); 66424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const std::string kId = id_util::GenerateId("id"); 68424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Try to report a runtime error - it should be ignored. 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewRuntimeError(kId, "a")); 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId).size()); 72424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Check that manifest errors are reported successfully. 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewManifestError(kId, "b")); 755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1u, error_console_->GetErrorsForExtension(kId).size()); 765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We should still ignore runtime errors. 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewRuntimeError(kId, "c")); 795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1u, error_console_->GetErrorsForExtension(kId).size()); 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Enable runtime errors specifically for this extension, and disable the use 825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // of the default mask. 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->SetReportingForExtension( 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) kId, ExtensionError::RUNTIME_ERROR, true); 855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // We should now accept runtime and manifest errors. 875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewManifestError(kId, "d")); 885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(2u, error_console_->GetErrorsForExtension(kId).size()); 895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewRuntimeError(kId, "e")); 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(3u, error_console_->GetErrorsForExtension(kId).size()); 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // All other extensions should still use the default mask, and ignore runtime 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // errors but report manifest errors. 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string kId2 = id_util::GenerateId("id2"); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewRuntimeError(kId2, "f")); 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(0u, error_console_->GetErrorsForExtension(kId2).size()); 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewManifestError(kId2, "g")); 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(1u, error_console_->GetErrorsForExtension(kId2).size()); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // By reverting to default reporting, we should again allow manifest errors, 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // but not runtime errors. 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->UseDefaultReportingForExtension(kId); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewManifestError(kId, "h")); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(4u, error_console_->GetErrorsForExtension(kId).size()); 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) error_console_->ReportError(CreateNewRuntimeError(kId, "i")); 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ASSERT_EQ(4u, error_console_->GetErrorsForExtension(kId).size()); 107558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} 108558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 109558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch} // namespace extensions 110