| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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_validator.h" | 5 #include "content/common/origin_trials/trial_token_validator.h" |
| 6 | 6 |
| 7 #include "base/feature_list.h" |
| 7 #include "base/time/time.h" | 8 #include "base/time/time.h" |
| 8 #include "content/common/origin_trials/trial_token.h" | 9 #include "content/common/origin_trials/trial_token.h" |
| 9 #include "content/public/common/content_client.h" | 10 #include "content/public/common/content_client.h" |
| 11 #include "content/public/common/content_features.h" |
| 10 #include "content/public/common/origin_trial_policy.h" | 12 #include "content/public/common/origin_trial_policy.h" |
| 13 #include "content/public/common/origin_util.h" |
| 14 #include "net/http/http_response_headers.h" |
| 15 #include "net/url_request/url_request.h" |
| 11 #include "third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h" | 16 #include "third_party/WebKit/public/platform/WebOriginTrialTokenStatus.h" |
| 12 | 17 |
| 13 namespace content { | 18 namespace content { |
| 14 | 19 |
| 15 blink::WebOriginTrialTokenStatus TrialTokenValidator::ValidateToken( | 20 blink::WebOriginTrialTokenStatus TrialTokenValidator::ValidateToken( |
| 16 const std::string& token, | 21 const std::string& token, |
| 17 const url::Origin& origin, | 22 const url::Origin& origin, |
| 18 std::string* feature_name) { | 23 std::string* feature_name) { |
| 19 ContentClient* content_client = GetContentClient(); | 24 ContentClient* content_client = GetContentClient(); |
| 20 const OriginTrialPolicy* origin_trial_policy = | 25 const OriginTrialPolicy* origin_trial_policy = |
| (...skipping 17 matching lines...) Expand all Loading... |
| 38 if (status != blink::WebOriginTrialTokenStatus::Success) | 43 if (status != blink::WebOriginTrialTokenStatus::Success) |
| 39 return status; | 44 return status; |
| 40 | 45 |
| 41 if (origin_trial_policy->IsFeatureDisabled(trial_token->feature_name())) | 46 if (origin_trial_policy->IsFeatureDisabled(trial_token->feature_name())) |
| 42 return blink::WebOriginTrialTokenStatus::FeatureDisabled; | 47 return blink::WebOriginTrialTokenStatus::FeatureDisabled; |
| 43 | 48 |
| 44 *feature_name = trial_token->feature_name(); | 49 *feature_name = trial_token->feature_name(); |
| 45 return blink::WebOriginTrialTokenStatus::Success; | 50 return blink::WebOriginTrialTokenStatus::Success; |
| 46 } | 51 } |
| 47 | 52 |
| 53 bool TrialTokenValidator::RequestEnablesFeature( |
| 54 const net::URLRequest* request, |
| 55 base::StringPiece feature_name) { |
| 56 // TODO(mek): Possibly cache the features that are availble for request in |
| 57 // UserData associated with the request. |
| 58 return RequestEnablesFeature(request->url(), request->response_headers(), |
| 59 feature_name); |
| 60 } |
| 61 |
| 62 bool TrialTokenValidator::RequestEnablesFeature( |
| 63 const GURL& request_url, |
| 64 const net::HttpResponseHeaders* response_headers, |
| 65 base::StringPiece feature_name) { |
| 66 if (!base::FeatureList::IsEnabled(features::kOriginTrials)) |
| 67 return false; |
| 68 |
| 69 if (!IsOriginSecure(request_url)) |
| 70 return false; |
| 71 |
| 72 url::Origin origin(request_url); |
| 73 size_t iter = 0; |
| 74 std::string token; |
| 75 while (response_headers->EnumerateHeader(&iter, "Origin-Trial", &token)) { |
| 76 std::string token_feature; |
| 77 // TODO(mek): Log the validation errors to histograms? |
| 78 if (ValidateToken(token, origin, &token_feature) == |
| 79 blink::WebOriginTrialTokenStatus::Success) |
| 80 if (token_feature == feature_name) |
| 81 return true; |
| 82 } |
| 83 return false; |
| 84 } |
| 85 |
| 48 } // namespace content | 86 } // namespace content |
| OLD | NEW |