- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / extension_warning_service_unittest.cc
1 // 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
5 #include "chrome/browser/extensions/extension_warning_service.h"
6
7 #include "chrome/browser/profiles/profile.h"
8 #include "chrome/browser/ui/global_error/global_error_service.h"
9 #include "chrome/browser/ui/global_error/global_error_service_factory.h"
10 #include "chrome/test/base/testing_profile.h"
11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 namespace extensions {
15
16 namespace {
17
18 class TestExtensionWarningService : public ExtensionWarningService {
19  public:
20   explicit TestExtensionWarningService(Profile* profile)
21       : ExtensionWarningService(profile) {
22   }
23   virtual ~TestExtensionWarningService() {}
24
25   void AddWarning(const ExtensionWarning& warning) {
26     ExtensionWarningSet warnings;
27     warnings.insert(warning);
28     AddWarnings(warnings);
29   }
30 };
31
32 class MockObserver : public ExtensionWarningService::Observer {
33  public:
34   virtual ~MockObserver() {}
35   MOCK_METHOD0(ExtensionWarningsChanged, void());
36 };
37
38 const char* ext1_id = "extension1";
39 const char* ext2_id = "extension2";
40 const ExtensionWarning::WarningType warning_1 =
41     ExtensionWarning::kNetworkDelay;
42 const ExtensionWarning::WarningType warning_2 =
43     ExtensionWarning::kNetworkConflict;
44
45 }  // namespace
46
47 // Check that inserting a warning triggers notifications, whereas inserting
48 // the same warning again is silent.
49 TEST(ExtensionWarningServiceTest, SetWarning) {
50   TestingProfile profile;
51   TestExtensionWarningService warning_service(&profile);
52   MockObserver observer;
53   warning_service.AddObserver(&observer);
54
55   // Insert warning for the first time.
56   EXPECT_CALL(observer, ExtensionWarningsChanged());
57   warning_service.AddWarning(
58       ExtensionWarning::CreateNetworkDelayWarning(ext1_id));
59   testing::Mock::VerifyAndClearExpectations(&warning_service);
60
61   // Second insertion of same warning does not trigger anything.
62   warning_service.AddWarning(
63       ExtensionWarning::CreateNetworkDelayWarning(ext1_id));
64   testing::Mock::VerifyAndClearExpectations(&warning_service);
65
66   warning_service.RemoveObserver(&observer);
67 }
68
69 // Check that ClearWarnings deletes exactly the specified warnings and
70 // triggers notifications where appropriate.
71 TEST(ExtensionWarningServiceTest, ClearWarnings) {
72   TestingProfile profile;
73   TestExtensionWarningService warning_service(&profile);
74   MockObserver observer;
75   warning_service.AddObserver(&observer);
76
77   // Insert two unique warnings in one batch.
78   EXPECT_CALL(observer, ExtensionWarningsChanged());
79   ExtensionWarningSet warning_set;
80   warning_set.insert(ExtensionWarning::CreateNetworkDelayWarning(ext1_id));
81   warning_set.insert(ExtensionWarning::CreateNetworkConflictWarning(ext2_id));
82   warning_service.AddWarnings(warning_set);
83   testing::Mock::VerifyAndClearExpectations(&warning_service);
84
85   // Remove one warning and check that the badge remains.
86   EXPECT_CALL(observer, ExtensionWarningsChanged());
87   std::set<ExtensionWarning::WarningType> to_clear;
88   to_clear.insert(warning_2);
89   warning_service.ClearWarnings(to_clear);
90   testing::Mock::VerifyAndClearExpectations(&warning_service);
91
92   // Check that the correct warnings appear in |warnings|.
93   std::set<ExtensionWarning::WarningType> existing_warnings =
94       warning_service.GetWarningTypesAffectingExtension(ext1_id);
95   EXPECT_EQ(1u, existing_warnings.size());
96   existing_warnings =
97       warning_service.GetWarningTypesAffectingExtension(ext2_id);
98   EXPECT_EQ(0u, existing_warnings.size());
99
100   // Remove the other one warning.
101   EXPECT_CALL(observer, ExtensionWarningsChanged());
102   to_clear.insert(warning_1);
103   warning_service.ClearWarnings(to_clear);
104   testing::Mock::VerifyAndClearExpectations(&warning_service);
105
106   // Check that not warnings remain.
107   existing_warnings =
108       warning_service.GetWarningTypesAffectingExtension(ext1_id);
109   EXPECT_EQ(0u, existing_warnings.size());
110   existing_warnings =
111       warning_service.GetWarningTypesAffectingExtension(ext2_id);
112   EXPECT_EQ(0u, existing_warnings.size());
113
114   warning_service.RemoveObserver(&observer);
115 }
116
117 }  // namespace extensions