| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/android/data_usage/data_use_matcher.h" | 5 #include "chrome/browser/android/data_usage/data_use_matcher.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/macros.h" | 13 #include "base/macros.h" |
| 14 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 15 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
| 16 #include "base/test/histogram_tester.h" |
| 16 #include "base/time/tick_clock.h" | 17 #include "base/time/tick_clock.h" |
| 17 #include "base/time/time.h" | 18 #include "base/time/time.h" |
| 18 #include "chrome/browser/android/data_usage/external_data_use_observer.h" | 19 #include "chrome/browser/android/data_usage/external_data_use_observer.h" |
| 19 #include "content/public/browser/browser_thread.h" | 20 #include "content/public/browser/browser_thread.h" |
| 20 #include "content/public/test/test_browser_thread_bundle.h" | 21 #include "content/public/test/test_browser_thread_bundle.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 22 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "url/gurl.h" | 23 #include "url/gurl.h" |
| 23 | 24 |
| 24 namespace { | 25 namespace { |
| 25 | 26 |
| 27 const char kUMAMatchingRulesCountValidHistogram[] = |
| 28 "DataUsage.MatchingRulesCount.Valid"; |
| 29 const char kUMAMatchingRulesCountInvalidHistogram[] = |
| 30 "DataUsage.MatchingRulesCount.Invalid"; |
| 31 const char kUMAURLRegexMatchDurationHistogram[] = |
| 32 "DataUsage.Perf.URLRegexMatchDuration"; |
| 33 |
| 26 const char kRegexFoo[] = "http://foo.com/"; | 34 const char kRegexFoo[] = "http://foo.com/"; |
| 27 const char kLabelFoo[] = "label_foo"; | 35 const char kLabelFoo[] = "label_foo"; |
| 28 const char kAppFoo[] = "com.example.foo"; | 36 const char kAppFoo[] = "com.example.foo"; |
| 29 | 37 |
| 30 const uint32_t kDefaultMatchingRuleExpirationDurationSeconds = | 38 const uint32_t kDefaultMatchingRuleExpirationDurationSeconds = |
| 31 60 * 60 * 24; // 24 hours. | 39 60 * 60 * 24; // 24 hours. |
| 32 | 40 |
| 33 class NowTestTickClock : public base::TickClock { | 41 class NowTestTickClock : public base::TickClock { |
| 34 public: | 42 public: |
| 35 NowTestTickClock() {} | 43 NowTestTickClock() {} |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 content::TestBrowserThreadBundle thread_bundle_; | 95 content::TestBrowserThreadBundle thread_bundle_; |
| 88 DataUseMatcher data_use_matcher_; | 96 DataUseMatcher data_use_matcher_; |
| 89 DISALLOW_COPY_AND_ASSIGN(DataUseMatcherTest); | 97 DISALLOW_COPY_AND_ASSIGN(DataUseMatcherTest); |
| 90 }; | 98 }; |
| 91 | 99 |
| 92 TEST_F(DataUseMatcherTest, SingleRegex) { | 100 TEST_F(DataUseMatcherTest, SingleRegex) { |
| 93 const struct { | 101 const struct { |
| 94 std::string url; | 102 std::string url; |
| 95 std::string regex; | 103 std::string regex; |
| 96 bool expect_match; | 104 bool expect_match; |
| 105 int expect_count_valid_rules; |
| 106 int expect_count_url_match_duration_samples; |
| 97 } tests[] = { | 107 } tests[] = { |
| 98 {"http://www.google.com", "http://www.google.com/", true}, | 108 {"http://www.google.com", "http://www.google.com/", true, 1, 1}, |
| 99 {"http://www.Google.com", "http://www.google.com/", true}, | 109 {"http://www.Google.com", "http://www.google.com/", true, 1, 1}, |
| 100 {"http://www.googleacom", "http://www.google.com/", true}, | 110 {"http://www.googleacom", "http://www.google.com/", true, 1, 1}, |
| 101 {"http://www.googleaacom", "http://www.google.com/", false}, | 111 {"http://www.googleaacom", "http://www.google.com/", false, 1, 1}, |
| 102 {"http://www.google.com", "https://www.google.com/", false}, | 112 {"http://www.google.com", "https://www.google.com/", false, 1, 1}, |
| 103 {"http://www.google.com", "{http|https}://www[.]google[.]com/search.*", | 113 {"http://www.google.com", "{http|https}://www[.]google[.]com/search.*", |
| 104 false}, | 114 false, 1, 1}, |
| 105 {"https://www.google.com/search=test", | 115 {"https://www.google.com/search=test", |
| 106 "https://www[.]google[.]com/search.*", true}, | 116 "https://www[.]google[.]com/search.*", true, 1, 1}, |
| 107 {"https://www.googleacom/search=test", | 117 {"https://www.googleacom/search=test", |
| 108 "https://www[.]google[.]com/search.*", false}, | 118 "https://www[.]google[.]com/search.*", false, 1, 1}, |
| 109 {"https://www.google.com/Search=test", | 119 {"https://www.google.com/Search=test", |
| 110 "https://www[.]google[.]com/search.*", true}, | 120 "https://www[.]google[.]com/search.*", true, 1, 1}, |
| 111 {"www.google.com", "http://www.google.com", false}, | 121 {"www.google.com", "http://www.google.com", false, 1, 0}, |
| 112 {"www.google.com:80", "http://www.google.com", false}, | 122 {"www.google.com:80", "http://www.google.com", false, 1, 1}, |
| 113 {"http://www.google.com:80", "http://www.google.com", false}, | 123 {"http://www.google.com:80", "http://www.google.com", false, 1, 1}, |
| 114 {"http://www.google.com:80/", "http://www.google.com/", true}, | 124 {"http://www.google.com:80/", "http://www.google.com/", true, 1, 1}, |
| 115 {"", "http://www.google.com", false}, | 125 {"", "http://www.google.com", false, 1, 0}, |
| 116 {"", "", false}, | 126 {"", "", false, 0, 0}, |
| 117 {"https://www.google.com", "http://www.google.com", false}, | 127 {"https://www.google.com", "http://www.google.com", false, 1, 1}, |
| 128 {"https://www.google.com", "[", false, 0}, |
| 129 {"https://www.google.com", "]", false, 1, 1}, |
| 118 }; | 130 }; |
| 119 | 131 |
| 120 for (size_t i = 0; i < arraysize(tests); ++i) { | 132 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 133 base::HistogramTester histogram_tester; |
| 121 std::string label(""); | 134 std::string label(""); |
| 122 RegisterURLRegexes( | 135 RegisterURLRegexes( |
| 123 // App package name not specified in the matching rule. | 136 // App package name not specified in the matching rule. |
| 124 std::vector<std::string>(1, std::string()), | 137 std::vector<std::string>(1, std::string()), |
| 125 std::vector<std::string>(1, tests[i].regex), | 138 std::vector<std::string>(1, tests[i].regex), |
| 126 std::vector<std::string>(1, "label")); | 139 std::vector<std::string>(1, "label")); |
| 140 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, |
| 141 tests[i].expect_count_valid_rules, 1); |
| 142 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, |
| 143 1 - tests[i].expect_count_valid_rules, |
| 144 1); |
| 127 EXPECT_EQ(tests[i].expect_match, | 145 EXPECT_EQ(tests[i].expect_match, |
| 128 data_use_matcher()->MatchesURL(GURL(tests[i].url), &label)) | 146 data_use_matcher()->MatchesURL(GURL(tests[i].url), &label)) |
| 129 << i; | 147 << i; |
| 148 histogram_tester.ExpectTotalCount( |
| 149 kUMAURLRegexMatchDurationHistogram, |
| 150 tests[i].expect_count_url_match_duration_samples); |
| 130 | 151 |
| 131 // Verify label matches the expected label. | 152 // Verify label matches the expected label. |
| 132 std::string expected_label = ""; | 153 std::string expected_label = ""; |
| 133 if (tests[i].expect_match) | 154 if (tests[i].expect_match) |
| 134 expected_label = "label"; | 155 expected_label = "label"; |
| 135 | 156 |
| 136 EXPECT_EQ(expected_label, label); | 157 EXPECT_EQ(expected_label, label); |
| 137 EXPECT_FALSE(data_use_matcher()->MatchesAppPackageName( | 158 EXPECT_FALSE(data_use_matcher()->MatchesAppPackageName( |
| 138 "com.example.helloworld", &label)) | 159 "com.example.helloworld", &label)) |
| 139 << i; | 160 << i; |
| 140 // Empty package name should not match against empty package name in the | 161 // Empty package name should not match against empty package name in the |
| 141 // matching rule. | 162 // matching rule. |
| 142 EXPECT_FALSE( | 163 EXPECT_FALSE( |
| 143 data_use_matcher()->MatchesAppPackageName(std::string(), &label)) | 164 data_use_matcher()->MatchesAppPackageName(std::string(), &label)) |
| 144 << i; | 165 << i; |
| 145 } | 166 } |
| 146 } | 167 } |
| 147 | 168 |
| 148 TEST_F(DataUseMatcherTest, TwoRegex) { | 169 TEST_F(DataUseMatcherTest, TwoRegex) { |
| 149 const struct { | 170 const struct { |
| 150 std::string url; | 171 std::string url; |
| 151 std::string regex1; | 172 std::string regex1; |
| 152 std::string regex2; | 173 std::string regex2; |
| 153 bool expect_match; | 174 bool expect_match; |
| 175 int expect_count_valid_rules; |
| 176 int expect_count_url_match_duration_samples; |
| 154 } tests[] = { | 177 } tests[] = { |
| 155 {"http://www.google.com", "http://www.google.com/", | 178 {"http://www.google.com", "http://www.google.com/", |
| 156 "https://www.google.com/", true}, | 179 "https://www.google.com/", true, 1, 1}, |
| 157 {"http://www.googleacom", "http://www.google.com/", | 180 {"http://www.googleacom", "http://www.google.com/", |
| 158 "http://www.google.com/", true}, | 181 "http://www.google.com/", true, 1, 1}, |
| 159 {"https://www.google.com", "http://www.google.com/", | 182 {"https://www.google.com", "http://www.google.com/", |
| 160 "https://www.google.com/", true}, | 183 "https://www.google.com/", true, 1, 1}, |
| 161 {"https://www.googleacom", "http://www.google.com/", | 184 {"https://www.googleacom", "http://www.google.com/", |
| 162 "https://www.google.com/", true}, | 185 "https://www.google.com/", true, 1, 1}, |
| 163 {"http://www.google.com", "{http|https}://www[.]google[.]com/search.*", | 186 {"http://www.google.com", "{http|https}://www[.]google[.]com/search.*", |
| 164 "", false}, | 187 "", false, 1, 1}, |
| 165 {"http://www.google.com/search=test", | 188 {"http://www.google.com/search=test", |
| 166 "http://www[.]google[.]com/search.*", | 189 "http://www[.]google[.]com/search.*", |
| 167 "https://www[.]google[.]com/search.*", true}, | 190 "https://www[.]google[.]com/search.*", true, 1, 1}, |
| 168 {"https://www.google.com/search=test", | 191 {"https://www.google.com/search=test", |
| 169 "http://www[.]google[.]com/search.*", | 192 "http://www[.]google[.]com/search.*", |
| 170 "https://www[.]google[.]com/search.*", true}, | 193 "https://www[.]google[.]com/search.*", true, 1, 1}, |
| 171 {"http://google.com/search=test", "http://www[.]google[.]com/search.*", | 194 {"http://google.com/search=test", "http://www[.]google[.]com/search.*", |
| 172 "https://www[.]google[.]com/search.*", false}, | 195 "https://www[.]google[.]com/search.*", false, 1, 1}, |
| 173 {"https://www.googleacom/search=test", "", | 196 {"https://www.googleacom/search=test", "", |
| 174 "https://www[.]google[.]com/search.*", false}, | 197 "https://www[.]google[.]com/search.*", false, 1, 1}, |
| 175 {"https://www.google.com/Search=test", "", | 198 {"https://www.google.com/Search=test", "", |
| 176 "https://www[.]google[.]com/search.*", true}, | 199 "https://www[.]google[.]com/search.*", true, 1, 1}, |
| 177 {"www.google.com", "http://www.google.com", "", false}, | 200 {"www.google.com", "http://www.google.com", "", false, 1, 0}, |
| 178 {"www.google.com:80", "http://www.google.com", "", false}, | 201 {"www.google.com:80", "http://www.google.com", "", false, 1, 1}, |
| 179 {"http://www.google.com:80", "http://www.google.com", "", false}, | 202 {"http://www.google.com:80", "http://www.google.com", "", false, 1, 1}, |
| 180 {"", "http://www.google.com", "", false}, | 203 {"", "http://www.google.com", "", false, 1, 0}, |
| 181 {"https://www.google.com", "http://www.google.com", "", false}, | 204 {"https://www.google.com", "http://www.google.com", "", false, 1, 1}, |
| 182 }; | 205 }; |
| 183 | 206 |
| 184 for (size_t i = 0; i < arraysize(tests); ++i) { | 207 for (size_t i = 0; i < arraysize(tests); ++i) { |
| 208 base::HistogramTester histogram_tester; |
| 185 std::string got_label(""); | 209 std::string got_label(""); |
| 186 std::vector<std::string> url_regexes; | 210 std::vector<std::string> url_regexes; |
| 187 url_regexes.push_back(tests[i].regex1 + "|" + tests[i].regex2); | 211 url_regexes.push_back(tests[i].regex1 + "|" + tests[i].regex2); |
| 188 const std::string label("label"); | 212 const std::string label("label"); |
| 189 RegisterURLRegexes( | 213 RegisterURLRegexes( |
| 190 std::vector<std::string>(url_regexes.size(), "com.example.helloworld"), | 214 std::vector<std::string>(url_regexes.size(), "com.example.helloworld"), |
| 191 url_regexes, std::vector<std::string>(url_regexes.size(), label)); | 215 url_regexes, std::vector<std::string>(url_regexes.size(), label)); |
| 216 histogram_tester.ExpectTotalCount(kUMAMatchingRulesCountValidHistogram, 1); |
| 217 histogram_tester.ExpectTotalCount(kUMAMatchingRulesCountInvalidHistogram, |
| 218 1); |
| 219 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, |
| 220 tests[i].expect_count_valid_rules, 1); |
| 221 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, |
| 222 1 - tests[i].expect_count_valid_rules, |
| 223 1); |
| 192 EXPECT_EQ(tests[i].expect_match, | 224 EXPECT_EQ(tests[i].expect_match, |
| 193 data_use_matcher()->MatchesURL(GURL(tests[i].url), &got_label)) | 225 data_use_matcher()->MatchesURL(GURL(tests[i].url), &got_label)) |
| 194 << i; | 226 << i; |
| 227 histogram_tester.ExpectTotalCount( |
| 228 kUMAURLRegexMatchDurationHistogram, |
| 229 tests[i].expect_count_url_match_duration_samples); |
| 195 const std::string expected_label = | 230 const std::string expected_label = |
| 196 tests[i].expect_match ? label : std::string(); | 231 tests[i].expect_match ? label : std::string(); |
| 197 EXPECT_EQ(expected_label, got_label); | 232 EXPECT_EQ(expected_label, got_label); |
| 198 | 233 |
| 199 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName( | 234 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName( |
| 200 "com.example.helloworld", &got_label)) | 235 "com.example.helloworld", &got_label)) |
| 201 << i; | 236 << i; |
| 202 EXPECT_EQ(label, got_label); | 237 EXPECT_EQ(label, got_label); |
| 203 } | 238 } |
| 204 } | 239 } |
| 205 | 240 |
| 206 TEST_F(DataUseMatcherTest, MultipleRegex) { | 241 TEST_F(DataUseMatcherTest, MultipleRegex) { |
| 242 base::HistogramTester histogram_tester; |
| 207 std::vector<std::string> url_regexes; | 243 std::vector<std::string> url_regexes; |
| 208 url_regexes.push_back( | 244 url_regexes.push_back( |
| 209 "https?://www[.]google[.]com/#q=.*|https?://www[.]google[.]com[.]ph/" | 245 "https?://www[.]google[.]com/#q=.*|https?://www[.]google[.]com[.]ph/" |
| 210 "#q=.*|https?://www[.]google[.]com[.]ph/[?]gws_rd=ssl#q=.*"); | 246 "#q=.*|https?://www[.]google[.]com[.]ph/[?]gws_rd=ssl#q=.*"); |
| 211 RegisterURLRegexes( | 247 RegisterURLRegexes( |
| 212 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 248 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
| 213 std::vector<std::string>(url_regexes.size(), "label")); | 249 std::vector<std::string>(url_regexes.size(), "label")); |
| 250 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, 1, |
| 251 1); |
| 252 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, 0, |
| 253 1); |
| 214 | 254 |
| 215 const struct { | 255 const struct { |
| 216 std::string url; | 256 std::string url; |
| 217 bool expect_match; | 257 bool expect_match; |
| 218 } tests[] = { | 258 } tests[] = { |
| 219 {"", false}, | 259 {"", false}, |
| 220 {"http://www.google.com", false}, | 260 {"http://www.google.com", false}, |
| 221 {"http://www.googleacom", false}, | 261 {"http://www.googleacom", false}, |
| 222 {"https://www.google.com", false}, | 262 {"https://www.google.com", false}, |
| 223 {"https://www.googleacom", false}, | 263 {"https://www.googleacom", false}, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, | 318 std::vector<std::string>(url_regexes.size(), std::string()), url_regexes, |
| 279 std::vector<std::string>(url_regexes.size(), "label")); | 319 std::vector<std::string>(url_regexes.size(), "label")); |
| 280 EXPECT_FALSE(data_use_matcher()->MatchesURL(GURL(""), &label)); | 320 EXPECT_FALSE(data_use_matcher()->MatchesURL(GURL(""), &label)); |
| 281 EXPECT_FALSE(data_use_matcher()->MatchesURL( | 321 EXPECT_FALSE(data_use_matcher()->MatchesURL( |
| 282 GURL("http://www.google.com#q=abc"), &label)); | 322 GURL("http://www.google.com#q=abc"), &label)); |
| 283 EXPECT_TRUE(data_use_matcher()->MatchesURL( | 323 EXPECT_TRUE(data_use_matcher()->MatchesURL( |
| 284 GURL("http://www.google.co.in#q=abc"), &label)); | 324 GURL("http://www.google.co.in#q=abc"), &label)); |
| 285 } | 325 } |
| 286 | 326 |
| 287 TEST_F(DataUseMatcherTest, MultipleAppPackageName) { | 327 TEST_F(DataUseMatcherTest, MultipleAppPackageName) { |
| 328 base::HistogramTester histogram_tester; |
| 288 std::vector<std::string> url_regexes; | 329 std::vector<std::string> url_regexes; |
| 289 url_regexes.push_back( | 330 url_regexes.push_back( |
| 290 "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*"); | 331 "http://www[.]foo[.]com/#q=.*|https://www[.]foo[.]com/#q=.*"); |
| 291 url_regexes.push_back( | 332 url_regexes.push_back( |
| 292 "http://www[.]bar[.]com/#q=.*|https://www[.]bar[.]com/#q=.*"); | 333 "http://www[.]bar[.]com/#q=.*|https://www[.]bar[.]com/#q=.*"); |
| 293 url_regexes.push_back(""); | 334 url_regexes.push_back(""); |
| 294 | 335 |
| 295 std::vector<std::string> labels; | 336 std::vector<std::string> labels; |
| 296 const char kLabelBar[] = "label_bar"; | 337 const char kLabelBar[] = "label_bar"; |
| 297 const char kLabelBaz[] = "label_baz"; | 338 const char kLabelBaz[] = "label_baz"; |
| 298 labels.push_back(kLabelFoo); | 339 labels.push_back(kLabelFoo); |
| 299 labels.push_back(kLabelBar); | 340 labels.push_back(kLabelBar); |
| 300 labels.push_back(kLabelBaz); | 341 labels.push_back(kLabelBaz); |
| 301 | 342 |
| 302 std::vector<std::string> app_package_names; | 343 std::vector<std::string> app_package_names; |
| 303 const char kAppBar[] = "com.example.bar"; | 344 const char kAppBar[] = "com.example.bar"; |
| 304 const char kAppBaz[] = "com.example.baz"; | 345 const char kAppBaz[] = "com.example.baz"; |
| 305 app_package_names.push_back(kAppFoo); | 346 app_package_names.push_back(kAppFoo); |
| 306 app_package_names.push_back(kAppBar); | 347 app_package_names.push_back(kAppBar); |
| 307 app_package_names.push_back(kAppBaz); | 348 app_package_names.push_back(kAppBaz); |
| 308 | 349 |
| 309 RegisterURLRegexes(app_package_names, url_regexes, labels); | 350 RegisterURLRegexes(app_package_names, url_regexes, labels); |
| 351 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, 3, |
| 352 1); |
| 353 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, 0, |
| 354 1); |
| 310 | 355 |
| 311 // Test if labels are matched properly for app package names. | 356 // Test if labels are matched properly for app package names. |
| 312 std::string got_label; | 357 std::string got_label; |
| 313 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppFoo, &got_label)); | 358 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppFoo, &got_label)); |
| 314 EXPECT_EQ(kLabelFoo, got_label); | 359 EXPECT_EQ(kLabelFoo, got_label); |
| 315 | 360 |
| 316 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppBar, &got_label)); | 361 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppBar, &got_label)); |
| 317 EXPECT_EQ(kLabelBar, got_label); | 362 EXPECT_EQ(kLabelBar, got_label); |
| 318 | 363 |
| 319 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppBaz, &got_label)); | 364 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppBaz, &got_label)); |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 380 << test.app_package_name; | 425 << test.app_package_name; |
| 381 DCHECK_EQ(base::TimeTicks::UnixEpoch() + test.expected_expiration_duration, | 426 DCHECK_EQ(base::TimeTicks::UnixEpoch() + test.expected_expiration_duration, |
| 382 expiration) | 427 expiration) |
| 383 << test.app_package_name; | 428 << test.app_package_name; |
| 384 } | 429 } |
| 385 } | 430 } |
| 386 | 431 |
| 387 // Tests if the expiration time encoded as milliseconds since epoch is parsed | 432 // Tests if the expiration time encoded as milliseconds since epoch is parsed |
| 388 // correctly. | 433 // correctly. |
| 389 TEST_F(DataUseMatcherTest, EncodeExpirationTimeInPackageName) { | 434 TEST_F(DataUseMatcherTest, EncodeExpirationTimeInPackageName) { |
| 435 base::HistogramTester histogram_tester; |
| 390 NowTestTickClock* tick_clock = new NowTestTickClock(); | 436 NowTestTickClock* tick_clock = new NowTestTickClock(); |
| 391 | 437 |
| 392 // |tick_clock| will be owned by |data_use_matcher_|. | 438 // |tick_clock| will be owned by |data_use_matcher_|. |
| 393 data_use_matcher()->tick_clock_.reset(tick_clock); | 439 data_use_matcher()->tick_clock_.reset(tick_clock); |
| 394 | 440 |
| 395 std::vector<std::string> url_regexes, labels, app_package_names; | 441 std::vector<std::string> url_regexes, labels, app_package_names; |
| 396 url_regexes.push_back(kRegexFoo); | 442 url_regexes.push_back(kRegexFoo); |
| 397 labels.push_back(kLabelFoo); | 443 labels.push_back(kLabelFoo); |
| 398 | 444 |
| 399 // Set current time to to Epoch. | 445 // Set current time to Epoch. |
| 400 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch()); | 446 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch()); |
| 401 | 447 |
| 402 app_package_names.push_back(base::StringPrintf("%s|%d", kAppFoo, 10000)); | 448 app_package_names.push_back(base::StringPrintf("%s|%d", kAppFoo, 10000)); |
| 403 RegisterURLRegexes(app_package_names, url_regexes, labels); | 449 RegisterURLRegexes(app_package_names, url_regexes, labels); |
| 404 EXPECT_FALSE(IsExpired(0)); | 450 EXPECT_FALSE(IsExpired(0)); |
| 451 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, 1, |
| 452 1); |
| 453 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, 0, |
| 454 1); |
| 405 // Fast forward 10 seconds, and matching rule expires. | 455 // Fast forward 10 seconds, and matching rule expires. |
| 406 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + | 456 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + |
| 407 base::TimeDelta::FromMilliseconds(10000 + 1)); | 457 base::TimeDelta::FromMilliseconds(10000 + 1)); |
| 408 EXPECT_TRUE(IsExpired(0)); | 458 EXPECT_TRUE(IsExpired(0)); |
| 409 | 459 |
| 410 // Empty app package name. | 460 // Empty app package name. |
| 411 app_package_names.clear(); | 461 app_package_names.clear(); |
| 412 app_package_names.push_back(base::StringPrintf("|%d", 20000)); | 462 app_package_names.push_back(base::StringPrintf("|%d", 20000)); |
| 413 RegisterURLRegexes(app_package_names, url_regexes, labels); | 463 RegisterURLRegexes(app_package_names, url_regexes, labels); |
| 414 EXPECT_FALSE(IsExpired(0)); | 464 EXPECT_FALSE(IsExpired(0)); |
| 415 // Fast forward 20 seconds, and matching rule expires. | 465 // Fast forward 20 seconds, and matching rule expires. |
| 416 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + | 466 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + |
| 417 base::TimeDelta::FromMilliseconds(20000 + 1)); | 467 base::TimeDelta::FromMilliseconds(20000 + 1)); |
| 418 EXPECT_TRUE(IsExpired(0)); | 468 EXPECT_TRUE(IsExpired(0)); |
| 419 } | 469 } |
| 420 | 470 |
| 421 // Tests if the expiration time encoded in Java format is parsed correctly. | 471 // Tests if the expiration time encoded in Java format is parsed correctly. |
| 422 TEST_F(DataUseMatcherTest, EncodeJavaExpirationTimeInPackageName) { | 472 TEST_F(DataUseMatcherTest, EncodeJavaExpirationTimeInPackageName) { |
| 473 base::HistogramTester histogram_tester; |
| 423 std::vector<std::string> url_regexes, labels, app_package_names; | 474 std::vector<std::string> url_regexes, labels, app_package_names; |
| 424 url_regexes.push_back(kRegexFoo); | 475 url_regexes.push_back(kRegexFoo); |
| 425 labels.push_back(kLabelFoo); | 476 labels.push_back(kLabelFoo); |
| 426 | 477 |
| 427 base::TimeTicks start_ticks = base::TimeTicks::Now(); | 478 base::TimeTicks start_ticks = base::TimeTicks::Now(); |
| 428 base::Time expiration_time = | 479 base::Time expiration_time = |
| 429 base::Time::Now() + base::TimeDelta::FromMilliseconds(10000); | 480 base::Time::Now() + base::TimeDelta::FromMilliseconds(10000); |
| 430 | 481 |
| 431 app_package_names.push_back(base::StringPrintf( | 482 app_package_names.push_back(base::StringPrintf( |
| 432 "%s|%lld", kAppFoo, | 483 "%s|%lld", kAppFoo, |
| 433 static_cast<long long int>(expiration_time.ToJavaTime()))); | 484 static_cast<long long int>(expiration_time.ToJavaTime()))); |
| 434 RegisterURLRegexes(app_package_names, url_regexes, labels); | 485 RegisterURLRegexes(app_package_names, url_regexes, labels); |
| 435 EXPECT_FALSE(IsExpired(0)); | 486 EXPECT_FALSE(IsExpired(0)); |
| 487 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, 1, |
| 488 1); |
| 489 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, 0, |
| 490 1); |
| 436 | 491 |
| 437 // Check if expiration duration is close to 10 seconds. | 492 // Check if expiration duration is close to 10 seconds. |
| 438 EXPECT_GE(base::TimeDelta::FromMilliseconds(10001), | 493 EXPECT_GE(base::TimeDelta::FromMilliseconds(10001), |
| 439 data_use_matcher()->matching_rules_[0]->expiration() - | 494 data_use_matcher()->matching_rules_[0]->expiration() - |
| 440 data_use_matcher()->tick_clock_->NowTicks()); | 495 data_use_matcher()->tick_clock_->NowTicks()); |
| 441 EXPECT_LE(base::TimeDelta::FromMilliseconds(9999), | 496 EXPECT_LE(base::TimeDelta::FromMilliseconds(9999), |
| 442 data_use_matcher()->matching_rules_[0]->expiration() - start_ticks); | 497 data_use_matcher()->matching_rules_[0]->expiration() - start_ticks); |
| 443 } | 498 } |
| 444 | 499 |
| 445 // Tests that expired matching rules are ignored by MatchesURL and | 500 // Tests that expired matching rules are ignored by MatchesURL and |
| 446 // MatchesAppPackageName. | 501 // MatchesAppPackageName. |
| 447 TEST_F(DataUseMatcherTest, MatchesIgnoresExpiredRules) { | 502 TEST_F(DataUseMatcherTest, MatchesIgnoresExpiredRules) { |
| 503 base::HistogramTester histogram_tester; |
| 448 std::vector<std::string> url_regexes, labels, app_package_names; | 504 std::vector<std::string> url_regexes, labels, app_package_names; |
| 449 std::string got_label; | 505 std::string got_label; |
| 450 NowTestTickClock* tick_clock = new NowTestTickClock(); | 506 NowTestTickClock* tick_clock = new NowTestTickClock(); |
| 451 | 507 |
| 452 // |tick_clock| will be owned by |data_use_matcher_|. | 508 // |tick_clock| will be owned by |data_use_matcher_|. |
| 453 data_use_matcher()->tick_clock_.reset(tick_clock); | 509 data_use_matcher()->tick_clock_.reset(tick_clock); |
| 454 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch()); | 510 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch()); |
| 455 | 511 |
| 456 url_regexes.push_back(kRegexFoo); | 512 url_regexes.push_back(kRegexFoo); |
| 457 labels.push_back(kLabelFoo); | 513 labels.push_back(kLabelFoo); |
| 458 app_package_names.push_back(base::StringPrintf("%s|%d", kAppFoo, 10000)); | 514 app_package_names.push_back(base::StringPrintf("%s|%d", kAppFoo, 10000)); |
| 459 RegisterURLRegexes(app_package_names, url_regexes, labels); | 515 RegisterURLRegexes(app_package_names, url_regexes, labels); |
| 516 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountValidHistogram, 1, |
| 517 1); |
| 518 histogram_tester.ExpectUniqueSample(kUMAMatchingRulesCountInvalidHistogram, 0, |
| 519 1); |
| 460 | 520 |
| 461 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + | 521 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + |
| 462 base::TimeDelta::FromMilliseconds(1)); | 522 base::TimeDelta::FromMilliseconds(1)); |
| 463 | 523 |
| 464 EXPECT_FALSE(IsExpired(0)); | 524 EXPECT_FALSE(IsExpired(0)); |
| 465 EXPECT_TRUE(data_use_matcher()->MatchesURL(GURL(kRegexFoo), &got_label)); | 525 EXPECT_TRUE(data_use_matcher()->MatchesURL(GURL(kRegexFoo), &got_label)); |
| 466 EXPECT_EQ(kLabelFoo, got_label); | 526 EXPECT_EQ(kLabelFoo, got_label); |
| 467 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppFoo, &got_label)); | 527 EXPECT_TRUE(data_use_matcher()->MatchesAppPackageName(kAppFoo, &got_label)); |
| 468 EXPECT_EQ(kLabelFoo, got_label); | 528 EXPECT_EQ(kLabelFoo, got_label); |
| 469 | 529 |
| 470 // Advance time to make it expired. | 530 // Advance time to make it expired. |
| 471 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + | 531 tick_clock->set_now_ticks(base::TimeTicks::UnixEpoch() + |
| 472 base::TimeDelta::FromMilliseconds(10001)); | 532 base::TimeDelta::FromMilliseconds(10001)); |
| 473 | 533 |
| 474 EXPECT_TRUE(IsExpired(0)); | 534 EXPECT_TRUE(IsExpired(0)); |
| 475 EXPECT_FALSE(data_use_matcher()->MatchesURL(GURL(kRegexFoo), &got_label)); | 535 EXPECT_FALSE(data_use_matcher()->MatchesURL(GURL(kRegexFoo), &got_label)); |
| 476 EXPECT_FALSE(data_use_matcher()->MatchesAppPackageName(kAppFoo, &got_label)); | 536 EXPECT_FALSE(data_use_matcher()->MatchesAppPackageName(kAppFoo, &got_label)); |
| 477 } | 537 } |
| 478 | 538 |
| 479 } // namespace android | 539 } // namespace android |
| 480 | 540 |
| 481 } // namespace chrome | 541 } // namespace chrome |
| OLD | NEW |