| 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)) {}
|
|
|
|
|