OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/safe_browsing/permission_reporter.h" | 5 #include "chrome/browser/safe_browsing/permission_reporter.h" |
6 | 6 |
7 #include "base/feature_list.h" | 7 #include "base/feature_list.h" |
8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/test/simple_test_clock.h" | 10 #include "base/test/simple_test_clock.h" |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
100 // Owned by |permission_reporter_|. | 100 // Owned by |permission_reporter_|. |
101 base::SimpleTestClock* clock_; | 101 base::SimpleTestClock* clock_; |
102 | 102 |
103 std::unique_ptr<PermissionReporter> permission_reporter_; | 103 std::unique_ptr<PermissionReporter> permission_reporter_; |
104 }; | 104 }; |
105 | 105 |
106 // Test that PermissionReporter::SendReport sends a serialized report string to | 106 // Test that PermissionReporter::SendReport sends a serialized report string to |
107 // SafeBrowsing CSD servers. | 107 // SafeBrowsing CSD servers. |
108 TEST_F(PermissionReporterTest, SendReport) { | 108 TEST_F(PermissionReporterTest, SendReport) { |
109 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 109 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
110 kDummyAction, kDummySourceUI); | 110 kDummyAction, kDummySourceUI, |
| 111 false /* user_gesture */); |
111 | 112 |
112 PermissionReport permission_report; | 113 PermissionReport permission_report; |
113 ASSERT_TRUE( | 114 ASSERT_TRUE( |
114 permission_report.ParseFromString(mock_report_sender_->latest_report())); | 115 permission_report.ParseFromString(mock_report_sender_->latest_report())); |
115 EXPECT_EQ(PermissionReport::GEOLOCATION, permission_report.permission()); | 116 EXPECT_EQ(PermissionReport::GEOLOCATION, permission_report.permission()); |
116 EXPECT_EQ(PermissionReport::GRANTED, permission_report.action()); | 117 EXPECT_EQ(PermissionReport::GRANTED, permission_report.action()); |
117 EXPECT_EQ(PermissionReport::PROMPT, permission_report.source_ui()); | 118 EXPECT_EQ(PermissionReport::PROMPT, permission_report.source_ui()); |
118 EXPECT_EQ(kDummyOriginOne, permission_report.origin()); | 119 EXPECT_EQ(kDummyOriginOne, permission_report.origin()); |
| 120 EXPECT_TRUE(permission_report.request_trigger().empty()); |
119 #if defined(OS_ANDROID) | 121 #if defined(OS_ANDROID) |
120 EXPECT_EQ(PermissionReport::ANDROID_PLATFORM, | 122 EXPECT_EQ(PermissionReport::ANDROID_PLATFORM, |
121 permission_report.platform_type()); | 123 permission_report.platform_type()); |
122 #elif defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_CHROMEOS) || \ | 124 #elif defined(OS_MACOSX) || defined(OS_WIN) || defined(OS_CHROMEOS) || \ |
123 defined(OS_LINUX) | 125 defined(OS_LINUX) |
124 EXPECT_EQ(PermissionReport::DESKTOP_PLATFORM, | 126 EXPECT_EQ(PermissionReport::DESKTOP_PLATFORM, |
125 permission_report.platform_type()); | 127 permission_report.platform_type()); |
126 #endif | 128 #endif |
127 | 129 |
128 EXPECT_EQ(GURL(kPermissionActionReportingUploadUrl), | 130 EXPECT_EQ(GURL(kPermissionActionReportingUploadUrl), |
129 mock_report_sender_->latest_report_uri()); | 131 mock_report_sender_->latest_report_uri()); |
130 } | 132 } |
131 | 133 |
132 // Test that PermissionReporter::SendReport sends a serialized report string | 134 // Test that PermissionReporter::SendReport sends a serialized report string |
| 135 // with request trigger to SafeBrowsing CSD servers. |
| 136 TEST_F(PermissionReporterTest, SendReportWithRequestTrigger) { |
| 137 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
| 138 kDummyAction, kDummySourceUI, |
| 139 true /* user_gesture */); |
| 140 |
| 141 PermissionReport permission_report; |
| 142 ASSERT_TRUE( |
| 143 permission_report.ParseFromString(mock_report_sender_->latest_report())); |
| 144 EXPECT_EQ(1, permission_report.request_trigger().size()); |
| 145 EXPECT_EQ(PermissionReport::AFTER_GESTURE, |
| 146 static_cast<PermissionReport::RequestTrigger>( |
| 147 permission_report.request_trigger(0))); |
| 148 } |
| 149 |
| 150 // Test that PermissionReporter::SendReport sends a serialized report string |
133 // with field trials to SafeBrowsing CSD servers. | 151 // with field trials to SafeBrowsing CSD servers. |
134 TEST_F(PermissionReporterTest, SendReportWithFieldTrials) { | 152 TEST_F(PermissionReporterTest, SendReportWithFieldTrials) { |
135 typedef std::set<variations::ActiveGroupId, variations::ActiveGroupIdCompare> | 153 typedef std::set<variations::ActiveGroupId, variations::ActiveGroupIdCompare> |
136 ActiveGroupIdSet; | 154 ActiveGroupIdSet; |
137 | 155 |
138 // Add and activate dummy field trials. | 156 // Add and activate dummy field trials. |
139 base::FieldTrialList field_trial_list(nullptr); | 157 base::FieldTrialList field_trial_list(nullptr); |
140 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); | 158 std::unique_ptr<base::FeatureList> feature_list(new base::FeatureList); |
141 base::FieldTrial* trial_one = | 159 base::FieldTrial* trial_one = |
142 base::FieldTrialList::CreateFieldTrial(kDummyTrialOne, kDummyGroupOne); | 160 base::FieldTrialList::CreateFieldTrial(kDummyTrialOne, kDummyGroupOne); |
(...skipping 11 matching lines...) Expand all Loading... |
154 base::FeatureList::SetInstance(std::move(feature_list)); | 172 base::FeatureList::SetInstance(std::move(feature_list)); |
155 | 173 |
156 // This is necessary to activate both field trials. | 174 // This is necessary to activate both field trials. |
157 base::FeatureList::IsEnabled(kFeatureOnByDefault); | 175 base::FeatureList::IsEnabled(kFeatureOnByDefault); |
158 base::FeatureList::IsEnabled(kFeatureOffByDefault); | 176 base::FeatureList::IsEnabled(kFeatureOffByDefault); |
159 | 177 |
160 EXPECT_TRUE(base::FieldTrialList::IsTrialActive(trial_one->trial_name())); | 178 EXPECT_TRUE(base::FieldTrialList::IsTrialActive(trial_one->trial_name())); |
161 EXPECT_TRUE(base::FieldTrialList::IsTrialActive(trial_two->trial_name())); | 179 EXPECT_TRUE(base::FieldTrialList::IsTrialActive(trial_two->trial_name())); |
162 | 180 |
163 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 181 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
164 kDummyAction, kDummySourceUI); | 182 kDummyAction, kDummySourceUI, |
| 183 false /* user_gesture */); |
165 | 184 |
166 PermissionReport permission_report; | 185 PermissionReport permission_report; |
167 ASSERT_TRUE( | 186 ASSERT_TRUE( |
168 permission_report.ParseFromString(mock_report_sender_->latest_report())); | 187 permission_report.ParseFromString(mock_report_sender_->latest_report())); |
169 | 188 |
170 variations::ActiveGroupId field_trial_one = | 189 variations::ActiveGroupId field_trial_one = |
171 variations::MakeActiveGroupId(kDummyTrialOne, kDummyGroupOne); | 190 variations::MakeActiveGroupId(kDummyTrialOne, kDummyGroupOne); |
172 variations::ActiveGroupId field_trial_two = | 191 variations::ActiveGroupId field_trial_two = |
173 variations::MakeActiveGroupId(kDummyTrialTwo, kDummyGroupTwo); | 192 variations::MakeActiveGroupId(kDummyTrialTwo, kDummyGroupTwo); |
174 ActiveGroupIdSet expected_group_ids = {field_trial_one, field_trial_two}; | 193 ActiveGroupIdSet expected_group_ids = {field_trial_one, field_trial_two}; |
175 | 194 |
176 EXPECT_EQ(2, permission_report.field_trials().size()); | 195 EXPECT_EQ(2, permission_report.field_trials().size()); |
177 for (auto field_trial : permission_report.field_trials()) { | 196 for (auto field_trial : permission_report.field_trials()) { |
178 variations::ActiveGroupId group_id = {field_trial.name_id(), | 197 variations::ActiveGroupId group_id = {field_trial.name_id(), |
179 field_trial.group_id()}; | 198 field_trial.group_id()}; |
180 EXPECT_EQ(1U, expected_group_ids.erase(group_id)); | 199 EXPECT_EQ(1U, expected_group_ids.erase(group_id)); |
181 } | 200 } |
182 EXPECT_EQ(0U, expected_group_ids.size()); | 201 EXPECT_EQ(0U, expected_group_ids.size()); |
183 } | 202 } |
184 | 203 |
185 // Test that PermissionReporter::IsReportThresholdExceeded returns false only | 204 // Test that PermissionReporter::IsReportThresholdExceeded returns false only |
186 // when the number of reports sent in the last one minute per origin per | 205 // when the number of reports sent in the last one minute per origin per |
187 // permission is under a threshold. | 206 // permission is under a threshold. |
188 TEST_F(PermissionReporterTest, IsReportThresholdExceeded) { | 207 TEST_F(PermissionReporterTest, IsReportThresholdExceeded) { |
189 EXPECT_EQ(0, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 208 EXPECT_EQ(0, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
190 | 209 |
191 int reports_to_send = kMaximumReportsPerOriginPerPermissionPerMinute; | 210 int reports_to_send = kMaximumReportsPerOriginPerPermissionPerMinute; |
192 while (reports_to_send--) | 211 while (reports_to_send--) |
193 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 212 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
194 kDummyAction, kDummySourceUI); | 213 kDummyAction, kDummySourceUI, |
| 214 false /* user_gesture */); |
195 EXPECT_EQ(5, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 215 EXPECT_EQ(5, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
196 | 216 |
197 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 217 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
198 kDummyAction, kDummySourceUI); | 218 kDummyAction, kDummySourceUI, |
| 219 false /* user_gesture */); |
199 EXPECT_EQ(0, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 220 EXPECT_EQ(0, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
200 | 221 |
201 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionTwo, | 222 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionTwo, |
202 kDummyAction, kDummySourceUI); | 223 kDummyAction, kDummySourceUI, |
| 224 false /* user_gesture */); |
203 EXPECT_EQ(1, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 225 EXPECT_EQ(1, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
204 | 226 |
205 permission_reporter_->SendReport(GURL(kDummyOriginTwo), kDummyPermissionOne, | 227 permission_reporter_->SendReport(GURL(kDummyOriginTwo), kDummyPermissionOne, |
206 kDummyAction, kDummySourceUI); | 228 kDummyAction, kDummySourceUI, |
| 229 false /* user_gesture */); |
207 EXPECT_EQ(1, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 230 EXPECT_EQ(1, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
208 | 231 |
209 clock_->Advance(base::TimeDelta::FromMinutes(1)); | 232 clock_->Advance(base::TimeDelta::FromMinutes(1)); |
210 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 233 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
211 kDummyAction, kDummySourceUI); | 234 kDummyAction, kDummySourceUI, |
| 235 false /* user_gesture */); |
212 EXPECT_EQ(0, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 236 EXPECT_EQ(0, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
213 | 237 |
214 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); | 238 clock_->Advance(base::TimeDelta::FromMicroseconds(1)); |
215 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 239 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
216 kDummyAction, kDummySourceUI); | 240 kDummyAction, kDummySourceUI, |
| 241 false /* user_gesture */); |
217 EXPECT_EQ(1, mock_report_sender_->GetAndResetNumberOfReportsSent()); | 242 EXPECT_EQ(1, mock_report_sender_->GetAndResetNumberOfReportsSent()); |
218 | 243 |
219 clock_->Advance(base::TimeDelta::FromMinutes(1)); | 244 clock_->Advance(base::TimeDelta::FromMinutes(1)); |
220 reports_to_send = 12; | 245 reports_to_send = 12; |
221 while (reports_to_send--) { | 246 while (reports_to_send--) { |
222 clock_->Advance(base::TimeDelta::FromSeconds(5)); | 247 clock_->Advance(base::TimeDelta::FromSeconds(5)); |
223 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, | 248 permission_reporter_->SendReport(GURL(kDummyOriginOne), kDummyPermissionOne, |
224 kDummyAction, kDummySourceUI); | 249 kDummyAction, kDummySourceUI, |
| 250 false /* user_gesture */); |
225 } | 251 } |
226 EXPECT_EQ(kMaximumReportsPerOriginPerPermissionPerMinute, | 252 EXPECT_EQ(kMaximumReportsPerOriginPerPermissionPerMinute, |
227 mock_report_sender_->GetAndResetNumberOfReportsSent()); | 253 mock_report_sender_->GetAndResetNumberOfReportsSent()); |
228 } | 254 } |
229 | 255 |
230 } // namespace safe_browsing | 256 } // namespace safe_browsing |
OLD | NEW |