Chromium Code Reviews| 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 "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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |