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/renderer/origin_trials/trial_token.h" | 5 #include "content/renderer/origin_trials/trial_token.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/strings/string_piece.h" | 9 #include "base/strings/string_piece.h" |
10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
106 "1|Signature|abcdef|FeatureName|1458766277", | 106 "1|Signature|abcdef|FeatureName|1458766277", |
107 "1|Signature|data:text/plain,abcdef|FeatureName|1458766277", | 107 "1|Signature|data:text/plain,abcdef|FeatureName|1458766277", |
108 "1|Signature|javascript:alert(1)|FeatureName|1458766277"}; | 108 "1|Signature|javascript:alert(1)|FeatureName|1458766277"}; |
109 const size_t kNumInvalidTokens = arraysize(kInvalidTokens); | 109 const size_t kNumInvalidTokens = arraysize(kInvalidTokens); |
110 | 110 |
111 } // namespace | 111 } // namespace |
112 | 112 |
113 class TrialTokenTest : public testing::Test { | 113 class TrialTokenTest : public testing::Test { |
114 public: | 114 public: |
115 TrialTokenTest() | 115 TrialTokenTest() |
116 : correct_public_key_( | 116 : expected_origin_(GURL(kExpectedOrigin)), |
| 117 invalid_origin_(GURL(kInvalidOrigin)), |
| 118 insecure_origin_(GURL(kInsecureOrigin)), |
| 119 correct_public_key_( |
117 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey), | 120 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey), |
118 arraysize(kTestPublicKey))), | 121 arraysize(kTestPublicKey))), |
119 incorrect_public_key_( | 122 incorrect_public_key_( |
120 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey2), | 123 base::StringPiece(reinterpret_cast<const char*>(kTestPublicKey2), |
121 arraysize(kTestPublicKey2))) {} | 124 arraysize(kTestPublicKey2))) {} |
122 | 125 |
123 protected: | 126 protected: |
124 bool ValidateOrigin(TrialToken* token, const char* origin) { | 127 bool ValidateOrigin(TrialToken* token, const url::Origin origin) { |
125 return token->ValidateOrigin(origin); | 128 return token->ValidateOrigin(origin); |
126 } | 129 } |
127 | 130 |
128 bool ValidateFeatureName(TrialToken* token, const char* feature_name) { | 131 bool ValidateFeatureName(TrialToken* token, const char* feature_name) { |
129 return token->ValidateFeatureName(feature_name); | 132 return token->ValidateFeatureName(feature_name); |
130 } | 133 } |
131 | 134 |
132 bool ValidateDate(TrialToken* token, const base::Time& now) { | 135 bool ValidateDate(TrialToken* token, const base::Time& now) { |
133 return token->ValidateDate(now); | 136 return token->ValidateDate(now); |
134 } | 137 } |
135 | 138 |
136 bool ValidateSignature(TrialToken* token, | 139 bool ValidateSignature(TrialToken* token, |
137 const base::StringPiece& public_key) { | 140 const base::StringPiece& public_key) { |
138 return token->ValidateSignature(public_key); | 141 return token->ValidateSignature(public_key); |
139 } | 142 } |
140 | 143 |
141 const base::StringPiece& correct_public_key() { return correct_public_key_; } | 144 base::StringPiece correct_public_key() { return correct_public_key_; } |
142 const base::StringPiece& incorrect_public_key() { | 145 base::StringPiece incorrect_public_key() { return incorrect_public_key_; } |
143 return incorrect_public_key_; | 146 |
144 } | 147 const url::Origin expected_origin_; |
| 148 const url::Origin invalid_origin_; |
| 149 const url::Origin insecure_origin_; |
145 | 150 |
146 private: | 151 private: |
147 base::StringPiece correct_public_key_; | 152 base::StringPiece correct_public_key_; |
148 base::StringPiece incorrect_public_key_; | 153 base::StringPiece incorrect_public_key_; |
149 }; | 154 }; |
150 | 155 |
151 TEST_F(TrialTokenTest, ParseEmptyString) { | 156 TEST_F(TrialTokenTest, ParseEmptyString) { |
152 scoped_ptr<TrialToken> empty_token = TrialToken::Parse(""); | 157 scoped_ptr<TrialToken> empty_token = TrialToken::Parse(""); |
153 EXPECT_FALSE(empty_token); | 158 EXPECT_FALSE(empty_token); |
154 } | 159 } |
155 | 160 |
156 TEST_F(TrialTokenTest, ParseInvalidStrings) { | 161 TEST_F(TrialTokenTest, ParseInvalidStrings) { |
157 for (size_t i = 0; i < kNumInvalidTokens; ++i) { | 162 for (size_t i = 0; i < kNumInvalidTokens; ++i) { |
158 scoped_ptr<TrialToken> empty_token = TrialToken::Parse(kInvalidTokens[i]); | 163 scoped_ptr<TrialToken> empty_token = TrialToken::Parse(kInvalidTokens[i]); |
159 EXPECT_FALSE(empty_token) << "Invalid trial token should not parse: " | 164 EXPECT_FALSE(empty_token) << "Invalid trial token should not parse: " |
160 << kInvalidTokens[i]; | 165 << kInvalidTokens[i]; |
161 } | 166 } |
162 } | 167 } |
163 | 168 |
164 TEST_F(TrialTokenTest, ParseValidToken) { | 169 TEST_F(TrialTokenTest, ParseValidToken) { |
165 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); | 170 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); |
166 ASSERT_TRUE(token); | 171 ASSERT_TRUE(token); |
167 EXPECT_EQ(kExpectedVersion, token->version()); | 172 EXPECT_EQ(kExpectedVersion, token->version()); |
168 EXPECT_EQ(kExpectedFeatureName, token->feature_name()); | 173 EXPECT_EQ(kExpectedFeatureName, token->feature_name()); |
169 EXPECT_EQ(kExpectedSignature, token->signature()); | 174 EXPECT_EQ(kExpectedSignature, token->signature()); |
170 EXPECT_EQ(kExpectedData, token->data()); | 175 EXPECT_EQ(kExpectedData, token->data()); |
171 EXPECT_EQ(GURL(kExpectedOrigin), token->origin()); | 176 EXPECT_EQ(expected_origin_, token->origin()); |
172 EXPECT_EQ(kExpectedExpiry, token->expiry_timestamp()); | 177 EXPECT_EQ(base::Time::FromDoubleT(kExpectedExpiry), token->expiry_time()); |
173 } | 178 } |
174 | 179 |
175 TEST_F(TrialTokenTest, ValidateValidToken) { | 180 TEST_F(TrialTokenTest, ValidateValidToken) { |
176 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); | 181 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); |
177 ASSERT_TRUE(token); | 182 ASSERT_TRUE(token); |
178 EXPECT_TRUE(ValidateOrigin(token.get(), kExpectedOrigin)); | 183 EXPECT_TRUE(ValidateOrigin(token.get(), expected_origin_)); |
179 EXPECT_FALSE(ValidateOrigin(token.get(), kInvalidOrigin)); | 184 EXPECT_FALSE(ValidateOrigin(token.get(), invalid_origin_)); |
180 EXPECT_FALSE(ValidateOrigin(token.get(), kInsecureOrigin)); | 185 EXPECT_FALSE(ValidateOrigin(token.get(), insecure_origin_)); |
181 EXPECT_TRUE(ValidateFeatureName(token.get(), kExpectedFeatureName)); | 186 EXPECT_TRUE(ValidateFeatureName(token.get(), kExpectedFeatureName)); |
182 EXPECT_FALSE(ValidateFeatureName(token.get(), kInvalidFeatureName)); | 187 EXPECT_FALSE(ValidateFeatureName(token.get(), kInvalidFeatureName)); |
183 EXPECT_FALSE(ValidateFeatureName( | 188 EXPECT_FALSE(ValidateFeatureName( |
184 token.get(), base::ToUpperASCII(kExpectedFeatureName).c_str())); | 189 token.get(), base::ToUpperASCII(kExpectedFeatureName).c_str())); |
185 EXPECT_FALSE(ValidateFeatureName( | 190 EXPECT_FALSE(ValidateFeatureName( |
186 token.get(), base::ToLowerASCII(kExpectedFeatureName).c_str())); | 191 token.get(), base::ToLowerASCII(kExpectedFeatureName).c_str())); |
187 EXPECT_TRUE( | 192 EXPECT_TRUE( |
188 ValidateDate(token.get(), base::Time::FromDoubleT(kValidTimestamp))); | 193 ValidateDate(token.get(), base::Time::FromDoubleT(kValidTimestamp))); |
189 EXPECT_FALSE( | 194 EXPECT_FALSE( |
190 ValidateDate(token.get(), base::Time::FromDoubleT(kInvalidTimestamp))); | 195 ValidateDate(token.get(), base::Time::FromDoubleT(kInvalidTimestamp))); |
191 } | 196 } |
192 | 197 |
193 TEST_F(TrialTokenTest, TokenIsAppropriateForOriginAndFeature) { | 198 TEST_F(TrialTokenTest, TokenIsAppropriateForOriginAndFeature) { |
194 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); | 199 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); |
195 ASSERT_TRUE(token); | 200 ASSERT_TRUE(token); |
196 EXPECT_TRUE(token->IsAppropriate(kExpectedOrigin, kExpectedFeatureName)); | 201 EXPECT_TRUE(token->IsAppropriate(expected_origin_, kExpectedFeatureName)); |
197 EXPECT_FALSE(token->IsAppropriate(kExpectedOrigin, | 202 EXPECT_FALSE(token->IsAppropriate(expected_origin_, |
198 base::ToUpperASCII(kExpectedFeatureName))); | 203 base::ToUpperASCII(kExpectedFeatureName))); |
199 EXPECT_FALSE(token->IsAppropriate(kExpectedOrigin, | 204 EXPECT_FALSE(token->IsAppropriate(expected_origin_, |
200 base::ToLowerASCII(kExpectedFeatureName))); | 205 base::ToLowerASCII(kExpectedFeatureName))); |
201 EXPECT_FALSE(token->IsAppropriate(kInvalidOrigin, kExpectedFeatureName)); | 206 EXPECT_FALSE(token->IsAppropriate(invalid_origin_, kExpectedFeatureName)); |
202 EXPECT_FALSE(token->IsAppropriate(kInsecureOrigin, kExpectedFeatureName)); | 207 EXPECT_FALSE(token->IsAppropriate(insecure_origin_, kExpectedFeatureName)); |
203 EXPECT_FALSE(token->IsAppropriate(kExpectedOrigin, kInvalidFeatureName)); | 208 EXPECT_FALSE(token->IsAppropriate(expected_origin_, kInvalidFeatureName)); |
204 } | 209 } |
205 | 210 |
206 TEST_F(TrialTokenTest, ValidateValidSignature) { | 211 TEST_F(TrialTokenTest, ValidateValidSignature) { |
207 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); | 212 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); |
208 ASSERT_TRUE(token); | 213 ASSERT_TRUE(token); |
209 EXPECT_TRUE(ValidateSignature(token.get(), correct_public_key())); | 214 EXPECT_TRUE(ValidateSignature(token.get(), correct_public_key())); |
210 } | 215 } |
211 | 216 |
212 TEST_F(TrialTokenTest, ValidateInvalidSignature) { | 217 TEST_F(TrialTokenTest, ValidateInvalidSignature) { |
213 scoped_ptr<TrialToken> token = TrialToken::Parse(kInvalidSignatureToken); | 218 scoped_ptr<TrialToken> token = TrialToken::Parse(kInvalidSignatureToken); |
(...skipping 14 matching lines...) Expand all Loading... |
228 EXPECT_FALSE(token->IsValid(base::Time::FromDoubleT(kValidTimestamp), | 233 EXPECT_FALSE(token->IsValid(base::Time::FromDoubleT(kValidTimestamp), |
229 incorrect_public_key())); | 234 incorrect_public_key())); |
230 } | 235 } |
231 | 236 |
232 TEST_F(TrialTokenTest, ValidateWhenNotExpired) { | 237 TEST_F(TrialTokenTest, ValidateWhenNotExpired) { |
233 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); | 238 scoped_ptr<TrialToken> token = TrialToken::Parse(kSampleToken); |
234 ASSERT_TRUE(token); | 239 ASSERT_TRUE(token); |
235 } | 240 } |
236 | 241 |
237 } // namespace content | 242 } // namespace content |
OLD | NEW |