OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/browser/frame_host/navigation_request.h" | 5 #include "content/browser/frame_host/navigation_request.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
10 #include "content/browser/appcache/appcache_navigation_handle.h" | 10 #include "content/browser/appcache/appcache_navigation_handle.h" |
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
938 return CONTENT_SECURITY_POLICY_CHECK_PASSED; | 938 return CONTENT_SECURITY_POLICY_CHECK_PASSED; |
939 | 939 |
940 FrameTreeNode* parent_ftn = frame_tree_node()->parent(); | 940 FrameTreeNode* parent_ftn = frame_tree_node()->parent(); |
941 DCHECK(parent_ftn); | 941 DCHECK(parent_ftn); |
942 RenderFrameHostImpl* parent = parent_ftn->current_frame_host(); | 942 RenderFrameHostImpl* parent = parent_ftn->current_frame_host(); |
943 DCHECK(parent); | 943 DCHECK(parent); |
944 | 944 |
945 SourceLocation source_location; | 945 SourceLocation source_location; |
946 if (common_params_.source_location) | 946 if (common_params_.source_location) |
947 source_location = common_params_.source_location.value(); | 947 source_location = common_params_.source_location.value(); |
948 | |
949 // CSP checking happens in three phases, per steps 3-5 of | |
950 // https://fetch.spec.whatwg.org/#main-fetch: | |
951 // | |
952 // (1) Check report-only policies and trigger reports for any violations. | |
953 // (2) Upgrade the request to HTTPS if necessary. | |
954 // (3) Check enforced policies (triggering reports for any violations of those | |
955 // policies) and block the request if necessary. | |
956 // | |
957 // This sequence of events allows site owners to learn about (via step 1) any | |
958 // requests that are upgraded in step 2. | |
959 | |
960 bool allowed = parent->IsAllowedByCsp( | |
961 CSPDirective::FrameSrc, common_params_.url, is_redirect, source_location, | |
962 CSPContext::CHECK_REPORT_ONLY_CSP); | |
963 // Checking report-only CSP should never return false because no requests are | |
nasko
2017/06/05 21:31:49
nit: empty line before the comment.
estark
2017/06/06 19:16:14
Done.
| |
964 // blocked by report-only policies. | |
965 DCHECK(allowed); | |
966 | |
967 // TODO(mkwst,estark): upgrade-insecure-requests does not work when following | |
968 // redirects. Trying to uprade the new URL on redirect here is fruitless: the | |
969 // redirect URL cannot be changed at this point. upgrade-insecure-requests | |
970 // needs to move to the net stack to resolve this. https://crbug.com/615885 | |
971 if (!is_redirect) { | |
972 GURL new_url; | |
973 if (parent->ShouldModifyRequestUrlForCsp( | |
974 common_params_.url, true /* is subresource */, &new_url)) { | |
nasko
2017/06/05 21:31:49
We will have to be careful here with the changes c
estark
2017/06/06 19:16:14
Yes. As discussed in person, there are some open q
| |
975 common_params_.url = new_url; | |
976 } | |
977 } | |
978 | |
948 if (parent->IsAllowedByCsp(CSPDirective::FrameSrc, common_params_.url, | 979 if (parent->IsAllowedByCsp(CSPDirective::FrameSrc, common_params_.url, |
949 is_redirect, source_location)) { | 980 is_redirect, source_location, |
981 CSPContext::CHECK_ENFORCED_CSP)) { | |
950 return CONTENT_SECURITY_POLICY_CHECK_PASSED; | 982 return CONTENT_SECURITY_POLICY_CHECK_PASSED; |
951 } | 983 } |
952 | 984 |
953 return CONTENT_SECURITY_POLICY_CHECK_FAILED; | 985 return CONTENT_SECURITY_POLICY_CHECK_FAILED; |
954 } | 986 } |
955 | 987 |
956 } // namespace content | 988 } // namespace content |
OLD | NEW |