blob: a7f5fe0dfc5aca6584865691724dfd0a11cfd68a [file] [log] [blame]
[email protected]b4d3771d2012-11-14 14:44:101// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
hanxic7e55202014-08-28 14:13:215#include "extensions/browser/warning_service.h"
[email protected]b4d3771d2012-11-14 14:44:106
hanxic7e55202014-08-28 14:13:217#include "content/public/test/test_browser_context.h"
8#include "extensions/browser/extensions_test.h"
[email protected]b4d3771d2012-11-14 14:44:109#include "testing/gmock/include/gmock/gmock.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12namespace extensions {
13
14namespace {
15
hanxic7e55202014-08-28 14:13:2116class TestWarningService : public WarningService {
[email protected]b4d3771d2012-11-14 14:44:1017 public:
hanxic7e55202014-08-28 14:13:2118 explicit TestWarningService(content::BrowserContext* browser_context)
19 : WarningService(browser_context) {
[email protected]b4d3771d2012-11-14 14:44:1020 }
dcheng9168b2f2014-10-21 12:38:2421 ~TestWarningService() override {}
[email protected]b4d3771d2012-11-14 14:44:1022
hanxic7e55202014-08-28 14:13:2123 void AddWarning(const Warning& warning) {
24 WarningSet warnings;
[email protected]b4d3771d2012-11-14 14:44:1025 warnings.insert(warning);
26 AddWarnings(warnings);
27 }
28};
29
hanxic7e55202014-08-28 14:13:2130class MockObserver : public WarningService::Observer {
[email protected]b4d3771d2012-11-14 14:44:1031 public:
32 virtual ~MockObserver() {}
rdevlin.cronin7dd052902015-05-19 22:23:2233 MOCK_METHOD1(ExtensionWarningsChanged, void(const ExtensionIdSet&));
[email protected]b4d3771d2012-11-14 14:44:1034};
35
Lukasz Anforowicz58d0dac2018-03-23 15:48:1036using WarningServiceTest = ExtensionsTest;
hanxic7e55202014-08-28 14:13:2137
thestig041f756e2016-10-14 18:26:1838const char ext1_id[] = "extension1";
39const char ext2_id[] = "extension2";
rdevlin.cronin7dd052902015-05-19 22:23:2240const Warning::WarningType warning_1 = Warning::kNetworkDelay;
karandeepba1a134d42018-07-24 20:33:2841const Warning::WarningType warning_2 = Warning::kRepeatedCacheFlushes;
[email protected]b4d3771d2012-11-14 14:44:1042
43} // namespace
44
45// Check that inserting a warning triggers notifications, whereas inserting
46// the same warning again is silent.
hanxic7e55202014-08-28 14:13:2147TEST_F(WarningServiceTest, SetWarning) {
48 content::TestBrowserContext browser_context;
49 TestWarningService warning_service(&browser_context);
[email protected]b4d3771d2012-11-14 14:44:1050 MockObserver observer;
51 warning_service.AddObserver(&observer);
52
rdevlin.cronin7dd052902015-05-19 22:23:2253 ExtensionIdSet affected_extensions;
54 affected_extensions.insert(ext1_id);
[email protected]b4d3771d2012-11-14 14:44:1055 // Insert warning for the first time.
rdevlin.cronin7dd052902015-05-19 22:23:2256 EXPECT_CALL(observer, ExtensionWarningsChanged(affected_extensions));
[email protected]b4d3771d2012-11-14 14:44:1057 warning_service.AddWarning(
hanxic7e55202014-08-28 14:13:2158 Warning::CreateNetworkDelayWarning(ext1_id));
[email protected]b4d3771d2012-11-14 14:44:1059 testing::Mock::VerifyAndClearExpectations(&warning_service);
60
61 // Second insertion of same warning does not trigger anything.
rdevlin.cronin7dd052902015-05-19 22:23:2262 warning_service.AddWarning(Warning::CreateNetworkDelayWarning(ext1_id));
[email protected]b4d3771d2012-11-14 14:44:1063 testing::Mock::VerifyAndClearExpectations(&warning_service);
64
65 warning_service.RemoveObserver(&observer);
66}
67
68// Check that ClearWarnings deletes exactly the specified warnings and
69// triggers notifications where appropriate.
hanxic7e55202014-08-28 14:13:2170TEST_F(WarningServiceTest, ClearWarnings) {
71 content::TestBrowserContext browser_context;
72 TestWarningService warning_service(&browser_context);
[email protected]b4d3771d2012-11-14 14:44:1073 MockObserver observer;
74 warning_service.AddObserver(&observer);
75
76 // Insert two unique warnings in one batch.
rdevlin.cronin7dd052902015-05-19 22:23:2277 std::set<std::string> affected_extensions;
78 affected_extensions.insert(ext1_id);
79 affected_extensions.insert(ext2_id);
80 EXPECT_CALL(observer, ExtensionWarningsChanged(affected_extensions));
hanxic7e55202014-08-28 14:13:2181 WarningSet warning_set;
82 warning_set.insert(Warning::CreateNetworkDelayWarning(ext1_id));
karandeepba1a134d42018-07-24 20:33:2883 warning_set.insert(Warning::CreateRepeatedCacheFlushesWarning(ext2_id));
[email protected]b4d3771d2012-11-14 14:44:1084 warning_service.AddWarnings(warning_set);
85 testing::Mock::VerifyAndClearExpectations(&warning_service);
86
87 // Remove one warning and check that the badge remains.
rdevlin.cronin7dd052902015-05-19 22:23:2288 affected_extensions.clear();
89 affected_extensions.insert(ext2_id);
90 EXPECT_CALL(observer, ExtensionWarningsChanged(affected_extensions));
hanxic7e55202014-08-28 14:13:2191 std::set<Warning::WarningType> to_clear;
[email protected]b4d3771d2012-11-14 14:44:1092 to_clear.insert(warning_2);
93 warning_service.ClearWarnings(to_clear);
94 testing::Mock::VerifyAndClearExpectations(&warning_service);
95
96 // Check that the correct warnings appear in |warnings|.
hanxic7e55202014-08-28 14:13:2197 std::set<Warning::WarningType> existing_warnings =
[email protected]b4d3771d2012-11-14 14:44:1098 warning_service.GetWarningTypesAffectingExtension(ext1_id);
99 EXPECT_EQ(1u, existing_warnings.size());
100 existing_warnings =
101 warning_service.GetWarningTypesAffectingExtension(ext2_id);
102 EXPECT_EQ(0u, existing_warnings.size());
103
104 // Remove the other one warning.
rdevlin.cronin7dd052902015-05-19 22:23:22105 affected_extensions.clear();
106 affected_extensions.insert(ext1_id);
107 EXPECT_CALL(observer, ExtensionWarningsChanged(affected_extensions));
[email protected]b4d3771d2012-11-14 14:44:10108 to_clear.insert(warning_1);
109 warning_service.ClearWarnings(to_clear);
110 testing::Mock::VerifyAndClearExpectations(&warning_service);
111
rdevlin.cronin7dd052902015-05-19 22:23:22112 // Check that no warnings remain.
[email protected]b4d3771d2012-11-14 14:44:10113 existing_warnings =
114 warning_service.GetWarningTypesAffectingExtension(ext1_id);
115 EXPECT_EQ(0u, existing_warnings.size());
116 existing_warnings =
117 warning_service.GetWarningTypesAffectingExtension(ext2_id);
118 EXPECT_EQ(0u, existing_warnings.size());
119
120 warning_service.RemoveObserver(&observer);
121}
122
123} // namespace extensions