| Index: content/public/common/referrer.h
|
| diff --git a/content/public/common/referrer.h b/content/public/common/referrer.h
|
| index b10bfd6c28e6cd96f6e44a5a2070904693fae979..122c5ead79096c2fb148d11206e8071f48671074 100644
|
| --- a/content/public/common/referrer.h
|
| +++ b/content/public/common/referrer.h
|
| @@ -5,6 +5,7 @@
|
| #ifndef CONTENT_PUBLIC_COMMON_REFERRER_H_
|
| #define CONTENT_PUBLIC_COMMON_REFERRER_H_
|
|
|
| +#include "base/logging.h"
|
| #include "content/common/content_export.h"
|
| #include "third_party/WebKit/public/platform/WebReferrerPolicy.h"
|
| #include "url/gurl.h"
|
| @@ -23,6 +24,38 @@ struct CONTENT_EXPORT Referrer {
|
|
|
| GURL url;
|
| blink::WebReferrerPolicy policy;
|
| +
|
| + static Referrer SanitizeForRequest(const GURL& request,
|
| + const Referrer& referrer) {
|
| + Referrer sanitized_referrer(referrer.url.GetAsReferrer(), referrer.policy);
|
| +
|
| + if (!request.SchemeIsHTTPOrHTTPS() ||
|
| + !sanitized_referrer.url.SchemeIsHTTPOrHTTPS()) {
|
| + sanitized_referrer.url = GURL();
|
| + return sanitized_referrer;
|
| + }
|
| +
|
| + switch (sanitized_referrer.policy) {
|
| + case blink::WebReferrerPolicyDefault:
|
| + if (sanitized_referrer.url.SchemeIsSecure() &&
|
| + !request.SchemeIsSecure()) {
|
| + sanitized_referrer.url = GURL();
|
| + }
|
| + break;
|
| + case blink::WebReferrerPolicyAlways:
|
| + break;
|
| + case blink::WebReferrerPolicyNever:
|
| + sanitized_referrer.url = GURL();
|
| + break;
|
| + case blink::WebReferrerPolicyOrigin:
|
| + sanitized_referrer.url = sanitized_referrer.url.GetOrigin();
|
| + break;
|
| + default:
|
| + NOTREACHED();
|
| + break;
|
| + }
|
| + return sanitized_referrer;
|
| + }
|
| };
|
|
|
| } // namespace content
|
|
|