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..b86dc7d113a9ca0e450c232a88c20d2bc59d59ac 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 |isWildcard| flag is optional. If found, ensure it is a valid boolean. |
+ bool is_wildcard = false; |
+ if (datadict->HasKey("isWildcard")) { |
+ if (!datadict->GetBoolean("isWildcard", &is_wildcard)) { |
+ 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_wildcard, feature_name, expiry_timestamp)); |
} |
bool TrialToken::ValidateOrigin(const url::Origin& origin) const { |
+ if (is_wildcard_origin_) { |
+ return origin.scheme() == origin_.scheme() && |
+ origin.DomainIs(origin_.host()) && |
+ origin.port() == origin_.port(); |
+ } |
return origin == origin_; |
} |
@@ -203,9 +216,11 @@ bool TrialToken::ValidateSignature(base::StringPiece signature, |
} |
TrialToken::TrialToken(const url::Origin& origin, |
+ bool is_wildcard_origin, |
const std::string& feature_name, |
uint64_t expiry_timestamp) |
: origin_(origin), |
+ is_wildcard_origin_(is_wildcard_origin), |
feature_name_(feature_name), |
expiry_time_(base::Time::FromDoubleT(expiry_timestamp)) {} |