40 lines
1.2 KiB
Diff
40 lines
1.2 KiB
Diff
diff --git net/url_request/url_request_job.cc net/url_request/url_request_job.cc
|
|
index a2aa3c3361410..c5e91f6ddebe7 100644
|
|
--- net/url_request/url_request_job.cc
|
|
+++ net/url_request/url_request_job.cc
|
|
@@ -35,6 +35,7 @@
|
|
#include "net/ssl/ssl_private_key.h"
|
|
#include "net/url_request/redirect_util.h"
|
|
#include "net/url_request/url_request_context.h"
|
|
+#include "url/url_util.h"
|
|
|
|
namespace net {
|
|
|
|
@@ -47,6 +48,16 @@ base::Value::Dict SourceStreamSetParams(SourceStream* source_stream) {
|
|
return event_params;
|
|
}
|
|
|
|
+bool IsSecureScheme(const GURL& url) {
|
|
+ if (!url.has_scheme()) {
|
|
+ return false;
|
|
+ }
|
|
+ if (GURL::SchemeIsCryptographic(url.scheme_piece())) {
|
|
+ return true;
|
|
+ }
|
|
+ return base::Contains(url::GetSecureSchemes(), url.scheme_piece());
|
|
+}
|
|
+
|
|
} // namespace
|
|
|
|
// Each SourceStreams own the previous SourceStream in the chain, but the
|
|
@@ -343,8 +354,7 @@ GURL URLRequestJob::ComputeReferrerForPolicy(
|
|
}
|
|
|
|
bool secure_referrer_but_insecure_destination =
|
|
- original_referrer.SchemeIsCryptographic() &&
|
|
- !destination.SchemeIsCryptographic();
|
|
+ IsSecureScheme(original_referrer) && !IsSecureScheme(destination);
|
|
|
|
switch (policy) {
|
|
case ReferrerPolicy::CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE:
|