Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1508)

Unified Diff: chrome/browser/extensions/extension_warning_service_unittest.cc

Issue 10407105: Improve error messaging of webRequest API in case of conflicts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed Evan's comments Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/extension_warning_service_unittest.cc
diff --git a/chrome/browser/extensions/extension_warning_service_unittest.cc b/chrome/browser/extensions/extension_warning_service_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..7ad5b82b9c0459b9461c78687537f05b3d2fbc17
--- /dev/null
+++ b/chrome/browser/extensions/extension_warning_service_unittest.cc
@@ -0,0 +1,117 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/extension_warning_service.h"
+
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/global_error/global_error_service.h"
+#include "chrome/browser/ui/global_error/global_error_service_factory.h"
+#include "chrome/test/base/testing_profile.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace extensions {
+
+namespace {
+
+class TestExtensionWarningService : public ExtensionWarningService {
+ public:
+ explicit TestExtensionWarningService(Profile* profile)
+ : ExtensionWarningService(profile) {
+ }
+ virtual ~TestExtensionWarningService() {}
+
+ void AddWarning(const ExtensionWarning& warning) {
+ ExtensionWarningSet warnings;
+ warnings.insert(warning);
+ AddWarnings(warnings);
+ }
+};
+
+class MockObserver : public ExtensionWarningService::Observer {
+ public:
+ virtual ~MockObserver() {}
+ MOCK_METHOD0(ExtensionWarningsChanged, void());
+};
+
+const char* ext1_id = "extension1";
+const char* ext2_id = "extension2";
+const ExtensionWarning::WarningType warning_1 =
+ ExtensionWarning::kNetworkDelay;
+const ExtensionWarning::WarningType warning_2 =
+ ExtensionWarning::kNetworkConflict;
+
+} // namespace
+
+// Check that inserting a warning triggers notifications, whereas inserting
+// the same warning again is silent.
+TEST(ExtensionWarningServiceTest, SetWarning) {
+ TestingProfile profile;
+ TestExtensionWarningService warning_service(&profile);
+ MockObserver observer;
+ warning_service.AddObserver(&observer);
+
+ // Insert warning for the first time.
+ EXPECT_CALL(observer, ExtensionWarningsChanged());
+ warning_service.AddWarning(
+ ExtensionWarning::CreateNetworkDelayWarning(ext1_id));
+ testing::Mock::VerifyAndClearExpectations(&warning_service);
+
+ // Second insertion of same warning does not trigger anything.
+ warning_service.AddWarning(
+ ExtensionWarning::CreateNetworkDelayWarning(ext1_id));
+ testing::Mock::VerifyAndClearExpectations(&warning_service);
+
+ warning_service.RemoveObserver(&observer);
+}
+
+// Check that ClearWarnings deletes exactly the specified warnings and
+// triggers notifications where appropriate.
+TEST(ExtensionWarningServiceTest, ClearWarnings) {
+ TestingProfile profile;
+ TestExtensionWarningService warning_service(&profile);
+ MockObserver observer;
+ warning_service.AddObserver(&observer);
+
+ // Insert two unique warnings in one batch.
+ EXPECT_CALL(observer, ExtensionWarningsChanged());
+ ExtensionWarningSet warning_set;
+ warning_set.insert(ExtensionWarning::CreateNetworkDelayWarning(ext1_id));
+ warning_set.insert(ExtensionWarning::CreateNetworkConflictWarning(ext2_id));
+ warning_service.AddWarnings(warning_set);
+ testing::Mock::VerifyAndClearExpectations(&warning_service);
+
+ // Remove one warning and check that the badge remains.
+ EXPECT_CALL(observer, ExtensionWarningsChanged());
+ std::set<ExtensionWarning::WarningType> to_clear;
+ to_clear.insert(warning_2);
+ warning_service.ClearWarnings(to_clear);
+ testing::Mock::VerifyAndClearExpectations(&warning_service);
+
+ // Check that the correct warnings appear in |warnings|.
+ std::set<ExtensionWarning::WarningType> existing_warnings =
+ warning_service.GetWarningTypesAffectingExtension(ext1_id);
+ EXPECT_EQ(1u, existing_warnings.size());
+ existing_warnings =
+ warning_service.GetWarningTypesAffectingExtension(ext2_id);
+ EXPECT_EQ(0u, existing_warnings.size());
+
+ // Remove the other one warning.
+ EXPECT_CALL(observer, ExtensionWarningsChanged());
+ to_clear.insert(warning_1);
+ warning_service.ClearWarnings(to_clear);
+ testing::Mock::VerifyAndClearExpectations(&warning_service);
+
+ // Check that not warnings remain.
+ existing_warnings =
+ warning_service.GetWarningTypesAffectingExtension(ext1_id);
+ EXPECT_EQ(0u, existing_warnings.size());
+ existing_warnings =
+ warning_service.GetWarningTypesAffectingExtension(ext2_id);
+ EXPECT_EQ(0u, existing_warnings.size());
+
+ warning_service.RemoveObserver(&observer);
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698