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

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

Issue 8176001: Warn user in case extension delays network traffic too much. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Merged with ToT Created 9 years, 2 months 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_set_unittest.cc
diff --git a/chrome/browser/extensions/extension_warning_set_unittest.cc b/chrome/browser/extensions/extension_warning_set_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..0831e5fd87419c19e96b20ed35d9ff23af60facb
--- /dev/null
+++ b/chrome/browser/extensions/extension_warning_set_unittest.cc
@@ -0,0 +1,142 @@
+// Copyright (c) 2011 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_set.h"
+
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+class ExtensionglobalError;
+
+namespace {
+
+class MockExtensionWarningSet : public ExtensionWarningSet {
+ public:
+ MockExtensionWarningSet() : ExtensionWarningSet(NULL) {
+ ON_CALL(*this, ActivateBadge()).WillByDefault(
+ testing::Invoke(this, &MockExtensionWarningSet::ActivateBadgeImpl));
+ ON_CALL(*this, DeactivateBadge()).WillByDefault(
+ testing::Invoke(this, &MockExtensionWarningSet::DeactivateBadgeImpl));
+ }
+ virtual ~MockExtensionWarningSet() {}
+
+ MOCK_METHOD0(NotifyWarningsChanged, void());
+ MOCK_METHOD0(ActivateBadge, void());
+ MOCK_METHOD0(DeactivateBadge, void());
+
+ void ActivateBadgeImpl() {
+ // Just fill the value so that we see that something would be there
+ // in a non-mocked execution.
+ extension_global_error_badge_ =
+ reinterpret_cast<ExtensionGlobalErrorBadge*>(1);
+ }
+ void DeactivateBadgeImpl() {
+ extension_global_error_badge_ = NULL;
+ }
+};
+
+const char* ext1_id = "extension1";
+const char* ext2_id = "extension2";
+
+} // namespace
+
+// Check that inserting a warning triggers notifications, whereas inserting
+// the same warning again is silent.
+TEST(ExtensionWarningSet, SetWarning) {
+ MockExtensionWarningSet warnings;
+
+ // Insert warning for the first time.
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ EXPECT_CALL(warnings, ActivateBadge());
+ warnings.SetWarning(ExtensionWarningSet::kNetworkDelay, ext1_id);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Second insertion of same warning does not trigger anything.
+ warnings.SetWarning(ExtensionWarningSet::kNetworkDelay, ext1_id);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+}
+
+// Check that ClearWarnings deletes exactly the specified warnings and
+// triggers notifications where appropriate.
+TEST(ExtensionWarningSet, ClearWarnings) {
+ MockExtensionWarningSet warnings;
+
+ // TODO(battre): Replace kInvalid with something else once we have additional
+ // warning types.
+ ExtensionWarningSet::WarningType type1 = ExtensionWarningSet::kNetworkDelay;
+ ExtensionWarningSet::WarningType type2 = ExtensionWarningSet::kInvalid;
+
+ // Insert two unique warnings.
+ EXPECT_CALL(warnings, NotifyWarningsChanged()).Times(2);
+ EXPECT_CALL(warnings, ActivateBadge()).Times(1);
+ warnings.SetWarning(type1, ext1_id);
+ warnings.SetWarning(type2, ext2_id);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Remove the one warning and check that the badge remains.
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ std::set<ExtensionWarningSet::WarningType> to_clear;
+ to_clear.insert(ExtensionWarningSet::kInvalid);
+ warnings.ClearWarnings(to_clear);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Check that the correct warnings appear in |warnings|.
+ std::set<ExtensionWarningSet::WarningType> existing_warnings;
+ warnings.GetWarningsAffectingExtension(ext1_id, &existing_warnings);
+ EXPECT_EQ(1u, existing_warnings.size());
+ warnings.GetWarningsAffectingExtension(ext2_id, &existing_warnings);
+ EXPECT_EQ(0u, existing_warnings.size());
+
+ // Remove the other one warning and check that badge disappears.
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ EXPECT_CALL(warnings, DeactivateBadge());
+ to_clear.insert(ExtensionWarningSet::kNetworkDelay);
+ warnings.ClearWarnings(to_clear);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Check that not warnings remain.
+ warnings.GetWarningsAffectingExtension(ext1_id, &existing_warnings);
+ EXPECT_EQ(0u, existing_warnings.size());
+ warnings.GetWarningsAffectingExtension(ext2_id, &existing_warnings);
+ EXPECT_EQ(0u, existing_warnings.size());
+}
+
+// Check that no badge appears if it has been suppressed for a specific
+// warning.
+TEST(ExtensionWarningSet, SuppressBadgeForCurrentWarnings) {
+ MockExtensionWarningSet warnings;
+ // TODO(battre): Replace kInvalid with something else once we have additional
+ // warning types.
+ ExtensionWarningSet::WarningType type1 = ExtensionWarningSet::kNetworkDelay;
+ ExtensionWarningSet::WarningType type2 = ExtensionWarningSet::kInvalid;
+
+ // Insert first warning.
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ EXPECT_CALL(warnings, ActivateBadge());
+ warnings.SetWarning(type1, ext1_id);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Suppress first warning.
+ EXPECT_CALL(warnings, DeactivateBadge());
+ warnings.SuppressBadgeForCurrentWarnings();
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Simulate deinstallation of extension.
+ std::set<ExtensionWarningSet::WarningType> to_clear;
+ warnings.GetWarningsAffectingExtension(ext1_id, &to_clear);
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ warnings.ClearWarnings(to_clear);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Set first warning again and verify that not badge is shown this time.
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ warnings.SetWarning(type1, ext1_id);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+
+ // Set second warning and verify that it shows a badge.
+ EXPECT_CALL(warnings, NotifyWarningsChanged());
+ EXPECT_CALL(warnings, ActivateBadge());
+ warnings.SetWarning(type2, ext2_id);
+ testing::Mock::VerifyAndClearExpectations(&warnings);
+}
« no previous file with comments | « chrome/browser/extensions/extension_warning_set.cc ('k') | chrome/browser/extensions/extension_webrequest_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698