Chromium Code Reviews| Index: content/common/origin_trials/trial_token.cc |
| diff --git a/content/common/origin_trials/trial_token.cc b/content/common/origin_trials/trial_token.cc |
| index 2935d9cc87642a195871f365e8d9e04ad20efbe2..ae11999ee3a6e3293d04f03499152459ae44ca3c 100644 |
| --- a/content/common/origin_trials/trial_token.cc |
| +++ b/content/common/origin_trials/trial_token.cc |
| @@ -157,6 +157,14 @@ std::unique_ptr<TrialToken> TrialToken::Parse( |
| return nullptr; |
| } |
| + // The |isSubdomain| flag is optional. If found, ensure it is a valid boolean. |
| + bool is_subdomain = false; |
| + if (datadict->HasKey("isSubdomain")) { |
| + if (!datadict->GetBoolean("isSubdomain", &is_subdomain)) { |
| + return nullptr; |
| + } |
| + } |
| + |
| // Ensure that the feature name is a valid string. |
| if (feature_name.empty()) { |
| return nullptr; |
| @@ -168,10 +176,15 @@ std::unique_ptr<TrialToken> TrialToken::Parse( |
| } |
| return base::WrapUnique( |
| - new TrialToken(origin, feature_name, expiry_timestamp)); |
| + new TrialToken(origin, is_subdomain, feature_name, expiry_timestamp)); |
| } |
| bool TrialToken::ValidateOrigin(const url::Origin& origin) const { |
| + if (match_subdomains_) { |
| + return origin.scheme() == origin_.scheme() && |
| + origin.DomainIs(origin_.host()) && |
|
estark
2016/10/18 19:48:54
Is token issuance restricted by the Public Suffix
|
| + origin.port() == origin_.port(); |
| + } |
| return origin == origin_; |
| } |
| @@ -203,9 +216,11 @@ bool TrialToken::ValidateSignature(base::StringPiece signature, |
| } |
| TrialToken::TrialToken(const url::Origin& origin, |
| + bool match_subdomains, |
| const std::string& feature_name, |
| uint64_t expiry_timestamp) |
| : origin_(origin), |
| + match_subdomains_(match_subdomains), |
| feature_name_(feature_name), |
| expiry_time_(base::Time::FromDoubleT(expiry_timestamp)) {} |