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

Side by Side Diff: content/common/origin_trials/trial_token_unittest.cc

Issue 2411803002: Support subdomain matching in trial tokens (Closed)
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
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 "content/common/origin_trials/trial_token.h" 5 #include "content/common/origin_trials/trial_token.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/strings/string_piece.h" 10 #include "base/strings/string_piece.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 // Generate this token with the command (in tools/origin_trials): 60 // Generate this token with the command (in tools/origin_trials):
61 // generate_token.py valid.example.com Frobulate --expire-timestamp=1458766277 61 // generate_token.py valid.example.com Frobulate --expire-timestamp=1458766277
62 const char* kSampleToken = 62 const char* kSampleToken =
63 "Ap+Q/Qm0ELadZql+dlEGSwnAVsFZKgCEtUZg8idQC3uekkIeSZIY1tftoYdrwhqj" 63 "Ap+Q/Qm0ELadZql+dlEGSwnAVsFZKgCEtUZg8idQC3uekkIeSZIY1tftoYdrwhqj"
64 "7FO5L22sNvkZZnacLvmfNwsAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l" 64 "7FO5L22sNvkZZnacLvmfNwsAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
65 "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5" 65 "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5"
66 "IjogMTQ1ODc2NjI3N30="; 66 "IjogMTQ1ODc2NjI3N30=";
67 67
68 const char* kExpectedFeatureName = "Frobulate"; 68 const char* kExpectedFeatureName = "Frobulate";
69 const char* kExpectedOrigin = "https://valid.example.com"; 69 const char* kExpectedOrigin = "https://valid.example.com";
70 const char* kExpectedWildcardOrigin = "https://example.com";
71 const char* kExpectedMultipleSubdomainOrigin =
72 "https://part1.part2.part3.example.com";
70 const uint64_t kExpectedExpiry = 1458766277; 73 const uint64_t kExpectedExpiry = 1458766277;
71 74
72 // The token should not be valid for this origin, or for this feature. 75 // The token should not be valid for this origin, or for this feature.
73 const char* kInvalidOrigin = "https://invalid.example.com"; 76 const char* kInvalidOrigin = "https://invalid.example.com";
74 const char* kInsecureOrigin = "http://valid.example.com"; 77 const char* kInsecureOrigin = "http://valid.example.com";
78 const char* kIncorrectPortOrigin = "https://valid.example.com:444";
79 const char* kIncorrectDomainOrigin = "https://valid.example2.com";
iclelland 2016/10/12 04:18:16 Can you add one more bad domain for wildcard testi
75 const char* kInvalidFeatureName = "Grokalyze"; 80 const char* kInvalidFeatureName = "Grokalyze";
76 81
77 // The token should be valid if the current time is kValidTimestamp or earlier. 82 // The token should be valid if the current time is kValidTimestamp or earlier.
78 double kValidTimestamp = 1458766276.0; 83 double kValidTimestamp = 1458766276.0;
79 84
80 // The token should be invalid if the current time is kInvalidTimestamp or 85 // The token should be invalid if the current time is kInvalidTimestamp or
81 // later. 86 // later.
82 double kInvalidTimestamp = 1458766278.0; 87 double kInvalidTimestamp = 1458766278.0;
83 88
84 // Well-formed trial token with an invalid signature. 89 // Well-formed trial token with an invalid signature.
(...skipping 20 matching lines...) Expand all
105 const char kIncorrectVersionToken[] = 110 const char kIncorrectVersionToken[] =
106 "KlH8wVLT5o59uDvlJESorMDjzgWnvG1hmIn/GiT9Ng3f45ratVeiXCNTeaJheOaG" 111 "KlH8wVLT5o59uDvlJESorMDjzgWnvG1hmIn/GiT9Ng3f45ratVeiXCNTeaJheOaG"
107 "A6kX4ir4Amv8aHVC+OJHZQkAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l" 112 "A6kX4ir4Amv8aHVC+OJHZQkAAABZeyJvcmlnaW4iOiAiaHR0cHM6Ly92YWxpZC5l"
108 "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5" 113 "eGFtcGxlLmNvbTo0NDMiLCAiZmVhdHVyZSI6ICJGcm9idWxhdGUiLCAiZXhwaXJ5"
109 "IjogMTQ1ODc2NjI3N30="; 114 "IjogMTQ1ODc2NjI3N30=";
110 115
111 const char kSampleTokenJSON[] = 116 const char kSampleTokenJSON[] =
112 "{\"origin\": \"https://valid.example.com:443\", \"feature\": " 117 "{\"origin\": \"https://valid.example.com:443\", \"feature\": "
113 "\"Frobulate\", \"expiry\": 1458766277}"; 118 "\"Frobulate\", \"expiry\": 1458766277}";
114 119
120 const char kSampleNonWildcardTokenJSON[] =
121 "{\"origin\": \"https://valid.example.com:443\", \"isWildcard\": false, "
122 "\"feature\": \"Frobulate\", \"expiry\": 1458766277}";
123
124 const char kSampleWildcardTokenJSON[] =
125 "{\"origin\": \"https://example.com:443\", \"isWildcard\": true, "
126 "\"feature\": \"Frobulate\", \"expiry\": 1458766277}";
127
115 // Various ill-formed trial tokens. These should all fail to parse. 128 // Various ill-formed trial tokens. These should all fail to parse.
116 const char* kInvalidTokens[] = { 129 const char* kInvalidTokens[] = {
117 // Invalid - Not JSON at all 130 // Invalid - Not JSON at all
118 "abcde", 131 "abcde",
119 // Invalid JSON 132 // Invalid JSON
120 "{", 133 "{",
121 // Not an object 134 // Not an object
122 "\"abcde\"", 135 "\"abcde\"",
123 "123.4", 136 "123.4",
124 "[0, 1, 2]", 137 "[0, 1, 2]",
125 // Missing keys 138 // Missing keys
126 "{}", 139 "{}",
127 "{\"something\": 1}", 140 "{\"something\": 1}",
128 "{\"origin\": \"https://a.a\"}", 141 "{\"origin\": \"https://a.a\"}",
129 "{\"origin\": \"https://a.a\", \"feature\": \"a\"}" 142 "{\"origin\": \"https://a.a\", \"feature\": \"a\"}",
iclelland 2016/10/12 04:18:16 Good catch
130 "{\"origin\": \"https://a.a\", \"expiry\": 1458766277}", 143 "{\"origin\": \"https://a.a\", \"expiry\": 1458766277}",
131 "{\"feature\": \"FeatureName\", \"expiry\": 1458766277}", 144 "{\"feature\": \"FeatureName\", \"expiry\": 1458766277}",
132 // Incorrect types 145 // Incorrect types
133 "{\"origin\": 1, \"feature\": \"a\", \"expiry\": 1458766277}", 146 "{\"origin\": 1, \"feature\": \"a\", \"expiry\": 1458766277}",
134 "{\"origin\": \"https://a.a\", \"feature\": 1, \"expiry\": 1458766277}", 147 "{\"origin\": \"https://a.a\", \"feature\": 1, \"expiry\": 1458766277}",
135 "{\"origin\": \"https://a.a\", \"feature\": \"a\", \"expiry\": \"1\"}", 148 "{\"origin\": \"https://a.a\", \"feature\": \"a\", \"expiry\": \"1\"}",
149 "{\"origin\": \"https://a.a\", \"isWildcard\": \"true\", \"feature\": "
150 "\"a\", \"expiry\": 1458766277}",
151 "{\"origin\": \"https://a.a\", \"isWildcard\": 1, \"feature\": \"a\", "
152 "\"expiry\": 1458766277}",
136 // Negative expiry timestamp 153 // Negative expiry timestamp
137 "{\"origin\": \"https://a.a\", \"feature\": \"a\", \"expiry\": -1}", 154 "{\"origin\": \"https://a.a\", \"feature\": \"a\", \"expiry\": -1}",
138 // Origin not a proper origin URL 155 // Origin not a proper origin URL
139 "{\"origin\": \"abcdef\", \"feature\": \"a\", \"expiry\": 1458766277}", 156 "{\"origin\": \"abcdef\", \"feature\": \"a\", \"expiry\": 1458766277}",
140 "{\"origin\": \"data:text/plain,abcdef\", \"feature\": \"a\", \"expiry\": " 157 "{\"origin\": \"data:text/plain,abcdef\", \"feature\": \"a\", \"expiry\": "
141 "1458766277}", 158 "1458766277}",
142 "{\"origin\": \"javascript:alert(1)\", \"feature\": \"a\", \"expiry\": " 159 "{\"origin\": \"javascript:alert(1)\", \"feature\": \"a\", \"expiry\": "
143 "1458766277}"}; 160 "1458766277}",
161 };
144 162
145 } // namespace 163 } // namespace
146 164
147 class TrialTokenTest : public testing::TestWithParam<const char*> { 165 class TrialTokenTest : public testing::TestWithParam<const char*> {
148 public: 166 public:
149 TrialTokenTest() 167 TrialTokenTest()
150 : expected_origin_(GURL(kExpectedOrigin)), 168 : expected_origin_(GURL(kExpectedOrigin)),
169 expected_wildcard_origin_(GURL(kExpectedWildcardOrigin)),
170 expected_multiple_subdomain_origin_(
171 GURL(kExpectedMultipleSubdomainOrigin)),
151 invalid_origin_(GURL(kInvalidOrigin)), 172 invalid_origin_(GURL(kInvalidOrigin)),
152 insecure_origin_(GURL(kInsecureOrigin)), 173 insecure_origin_(GURL(kInsecureOrigin)),
174 incorrect_port_origin_(GURL(kIncorrectPortOrigin)),
175 incorrect_domain_origin_(GURL(kIncorrectDomainOrigin)),
153 expected_expiry_(base::Time::FromDoubleT(kExpectedExpiry)), 176 expected_expiry_(base::Time::FromDoubleT(kExpectedExpiry)),
154 valid_timestamp_(base::Time::FromDoubleT(kValidTimestamp)), 177 valid_timestamp_(base::Time::FromDoubleT(kValidTimestamp)),
155 invalid_timestamp_(base::Time::FromDoubleT(kInvalidTimestamp)), 178 invalid_timestamp_(base::Time::FromDoubleT(kInvalidTimestamp)),
156 correct_public_key_( 179 correct_public_key_(
157 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey), 180 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey),
158 arraysize(kTestPublicKey))), 181 arraysize(kTestPublicKey))),
159 incorrect_public_key_( 182 incorrect_public_key_(
160 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey2), 183 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey2),
161 arraysize(kTestPublicKey2))) {} 184 arraysize(kTestPublicKey2))) {}
162 185
(...skipping 24 matching lines...) Expand all
187 } 210 }
188 211
189 bool ValidateDate(TrialToken* token, const base::Time& now) { 212 bool ValidateDate(TrialToken* token, const base::Time& now) {
190 return token->ValidateDate(now); 213 return token->ValidateDate(now);
191 } 214 }
192 215
193 base::StringPiece correct_public_key() { return correct_public_key_; } 216 base::StringPiece correct_public_key() { return correct_public_key_; }
194 base::StringPiece incorrect_public_key() { return incorrect_public_key_; } 217 base::StringPiece incorrect_public_key() { return incorrect_public_key_; }
195 218
196 const url::Origin expected_origin_; 219 const url::Origin expected_origin_;
220 const url::Origin expected_wildcard_origin_;
221 const url::Origin expected_multiple_subdomain_origin_;
197 const url::Origin invalid_origin_; 222 const url::Origin invalid_origin_;
198 const url::Origin insecure_origin_; 223 const url::Origin insecure_origin_;
224 const url::Origin incorrect_port_origin_;
225 const url::Origin incorrect_domain_origin_;
199 226
200 const base::Time expected_expiry_; 227 const base::Time expected_expiry_;
201 const base::Time valid_timestamp_; 228 const base::Time valid_timestamp_;
202 const base::Time invalid_timestamp_; 229 const base::Time invalid_timestamp_;
203 230
204 private: 231 private:
205 base::StringPiece correct_public_key_; 232 base::StringPiece correct_public_key_;
206 base::StringPiece incorrect_public_key_; 233 base::StringPiece incorrect_public_key_;
207 }; 234 };
208 235
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 std::unique_ptr<TrialToken> empty_token = Parse(GetParam()); 294 std::unique_ptr<TrialToken> empty_token = Parse(GetParam());
268 EXPECT_FALSE(empty_token) << "Invalid trial token should not parse."; 295 EXPECT_FALSE(empty_token) << "Invalid trial token should not parse.";
269 } 296 }
270 297
271 INSTANTIATE_TEST_CASE_P(, TrialTokenTest, ::testing::ValuesIn(kInvalidTokens)); 298 INSTANTIATE_TEST_CASE_P(, TrialTokenTest, ::testing::ValuesIn(kInvalidTokens));
272 299
273 TEST_F(TrialTokenTest, ParseValidToken) { 300 TEST_F(TrialTokenTest, ParseValidToken) {
274 std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON); 301 std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON);
275 ASSERT_TRUE(token); 302 ASSERT_TRUE(token);
276 EXPECT_EQ(kExpectedFeatureName, token->feature_name()); 303 EXPECT_EQ(kExpectedFeatureName, token->feature_name());
304 EXPECT_FALSE(token->is_wildcard_origin());
277 EXPECT_EQ(expected_origin_, token->origin()); 305 EXPECT_EQ(expected_origin_, token->origin());
278 EXPECT_EQ(expected_expiry_, token->expiry_time()); 306 EXPECT_EQ(expected_expiry_, token->expiry_time());
279 } 307 }
280 308
309 TEST_F(TrialTokenTest, ParseValidNonWildcardToken) {
310 std::unique_ptr<TrialToken> token = Parse(kSampleNonWildcardTokenJSON);
311 ASSERT_TRUE(token);
312 EXPECT_EQ(kExpectedFeatureName, token->feature_name());
313 EXPECT_FALSE(token->is_wildcard_origin());
314 EXPECT_EQ(expected_origin_, token->origin());
315 EXPECT_EQ(expected_expiry_, token->expiry_time());
316 }
317
318 TEST_F(TrialTokenTest, ParseValidWildcardToken) {
319 std::unique_ptr<TrialToken> token = Parse(kSampleWildcardTokenJSON);
320 ASSERT_TRUE(token);
321 EXPECT_EQ(kExpectedFeatureName, token->feature_name());
322 EXPECT_TRUE(token->is_wildcard_origin());
323 EXPECT_EQ(kExpectedWildcardOrigin, token->origin().Serialize());
324 EXPECT_EQ(expected_wildcard_origin_, token->origin());
325 EXPECT_EQ(expected_expiry_, token->expiry_time());
326 }
327
281 TEST_F(TrialTokenTest, ValidateValidToken) { 328 TEST_F(TrialTokenTest, ValidateValidToken) {
282 std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON); 329 std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON);
283 ASSERT_TRUE(token); 330 ASSERT_TRUE(token);
284 EXPECT_TRUE(ValidateOrigin(token.get(), expected_origin_)); 331 EXPECT_TRUE(ValidateOrigin(token.get(), expected_origin_));
285 EXPECT_FALSE(ValidateOrigin(token.get(), invalid_origin_)); 332 EXPECT_FALSE(ValidateOrigin(token.get(), invalid_origin_));
286 EXPECT_FALSE(ValidateOrigin(token.get(), insecure_origin_)); 333 EXPECT_FALSE(ValidateOrigin(token.get(), insecure_origin_));
334 EXPECT_FALSE(ValidateOrigin(token.get(), incorrect_port_origin_));
335 EXPECT_FALSE(ValidateOrigin(token.get(), incorrect_domain_origin_));
287 EXPECT_TRUE(ValidateFeatureName(token.get(), kExpectedFeatureName)); 336 EXPECT_TRUE(ValidateFeatureName(token.get(), kExpectedFeatureName));
288 EXPECT_FALSE(ValidateFeatureName(token.get(), kInvalidFeatureName)); 337 EXPECT_FALSE(ValidateFeatureName(token.get(), kInvalidFeatureName));
289 EXPECT_FALSE(ValidateFeatureName( 338 EXPECT_FALSE(ValidateFeatureName(
290 token.get(), base::ToUpperASCII(kExpectedFeatureName).c_str())); 339 token.get(), base::ToUpperASCII(kExpectedFeatureName).c_str()));
291 EXPECT_FALSE(ValidateFeatureName( 340 EXPECT_FALSE(ValidateFeatureName(
292 token.get(), base::ToLowerASCII(kExpectedFeatureName).c_str())); 341 token.get(), base::ToLowerASCII(kExpectedFeatureName).c_str()));
293 EXPECT_TRUE(ValidateDate(token.get(), valid_timestamp_)); 342 EXPECT_TRUE(ValidateDate(token.get(), valid_timestamp_));
294 EXPECT_FALSE(ValidateDate(token.get(), invalid_timestamp_)); 343 EXPECT_FALSE(ValidateDate(token.get(), invalid_timestamp_));
295 } 344 }
296 345
346 TEST_F(TrialTokenTest, ValidateValidWildcardToken) {
347 std::unique_ptr<TrialToken> token = Parse(kSampleWildcardTokenJSON);
348 ASSERT_TRUE(token);
349 EXPECT_TRUE(ValidateOrigin(token.get(), expected_origin_));
350 EXPECT_TRUE(ValidateOrigin(token.get(), expected_wildcard_origin_));
351 EXPECT_TRUE(ValidateOrigin(token.get(), expected_multiple_subdomain_origin_));
352 EXPECT_FALSE(ValidateOrigin(token.get(), insecure_origin_));
353 EXPECT_FALSE(ValidateOrigin(token.get(), incorrect_port_origin_));
354 EXPECT_FALSE(ValidateOrigin(token.get(), incorrect_domain_origin_));
355 }
356
297 TEST_F(TrialTokenTest, TokenIsValid) { 357 TEST_F(TrialTokenTest, TokenIsValid) {
298 std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON); 358 std::unique_ptr<TrialToken> token = Parse(kSampleTokenJSON);
299 ASSERT_TRUE(token); 359 ASSERT_TRUE(token);
300 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success, 360 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success,
301 token->IsValid(expected_origin_, valid_timestamp_)); 361 token->IsValid(expected_origin_, valid_timestamp_));
302 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin, 362 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
303 token->IsValid(invalid_origin_, valid_timestamp_)); 363 token->IsValid(invalid_origin_, valid_timestamp_));
304 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin, 364 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
305 token->IsValid(insecure_origin_, valid_timestamp_)); 365 token->IsValid(insecure_origin_, valid_timestamp_));
366 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
367 token->IsValid(incorrect_port_origin_, valid_timestamp_));
306 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Expired, 368 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Expired,
307 token->IsValid(expected_origin_, invalid_timestamp_)); 369 token->IsValid(expected_origin_, invalid_timestamp_));
308 } 370 }
371
372 TEST_F(TrialTokenTest, WildcardTokenIsValid) {
373 std::unique_ptr<TrialToken> token = Parse(kSampleWildcardTokenJSON);
374 ASSERT_TRUE(token);
375 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success,
376 token->IsValid(expected_origin_, valid_timestamp_));
377 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success,
378 token->IsValid(expected_wildcard_origin_, valid_timestamp_));
379 EXPECT_EQ(
380 blink::WebOriginTrialTokenStatus::Success,
381 token->IsValid(expected_multiple_subdomain_origin_, valid_timestamp_));
382 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
383 token->IsValid(incorrect_domain_origin_, valid_timestamp_));
384 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
385 token->IsValid(insecure_origin_, valid_timestamp_));
386 EXPECT_EQ(blink::WebOriginTrialTokenStatus::WrongOrigin,
387 token->IsValid(incorrect_port_origin_, valid_timestamp_));
388 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Expired,
389 token->IsValid(expected_origin_, invalid_timestamp_));
390 }
309 391
310 // Test overall extraction, to ensure output status matches returned token 392 // Test overall extraction, to ensure output status matches returned token
311 TEST_F(TrialTokenTest, ExtractValidToken) { 393 TEST_F(TrialTokenTest, ExtractValidToken) {
312 blink::WebOriginTrialTokenStatus status; 394 blink::WebOriginTrialTokenStatus status;
313 std::unique_ptr<TrialToken> token = 395 std::unique_ptr<TrialToken> token =
314 TrialToken::From(kSampleToken, correct_public_key(), &status); 396 TrialToken::From(kSampleToken, correct_public_key(), &status);
315 EXPECT_TRUE(token); 397 EXPECT_TRUE(token);
316 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success, status); 398 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Success, status);
317 } 399 }
318 400
319 TEST_F(TrialTokenTest, ExtractInvalidSignature) { 401 TEST_F(TrialTokenTest, ExtractInvalidSignature) {
320 blink::WebOriginTrialTokenStatus status; 402 blink::WebOriginTrialTokenStatus status;
321 std::unique_ptr<TrialToken> token = 403 std::unique_ptr<TrialToken> token =
322 TrialToken::From(kSampleToken, incorrect_public_key(), &status); 404 TrialToken::From(kSampleToken, incorrect_public_key(), &status);
323 EXPECT_FALSE(token); 405 EXPECT_FALSE(token);
324 EXPECT_EQ(blink::WebOriginTrialTokenStatus::InvalidSignature, status); 406 EXPECT_EQ(blink::WebOriginTrialTokenStatus::InvalidSignature, status);
325 } 407 }
326 408
327 TEST_F(TrialTokenTest, ExtractMalformedToken) { 409 TEST_F(TrialTokenTest, ExtractMalformedToken) {
328 blink::WebOriginTrialTokenStatus status; 410 blink::WebOriginTrialTokenStatus status;
329 std::unique_ptr<TrialToken> token = 411 std::unique_ptr<TrialToken> token =
330 TrialToken::From(kIncorrectLengthToken, correct_public_key(), &status); 412 TrialToken::From(kIncorrectLengthToken, correct_public_key(), &status);
331 EXPECT_FALSE(token); 413 EXPECT_FALSE(token);
332 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Malformed, status); 414 EXPECT_EQ(blink::WebOriginTrialTokenStatus::Malformed, status);
333 } 415 }
334 416
335 } // namespace content 417 } // namespace content
OLDNEW
« content/common/origin_trials/trial_token.h ('K') | « content/common/origin_trials/trial_token.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698