| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2011, 2012 Google Inc. All rights reserved. |
| 3 * Copyright (C) 2013, Intel Corporation | 3 * Copyright (C) 2013, Intel Corporation |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 593 StringBuilder builder; | 593 StringBuilder builder; |
| 594 builder.Append("Redirect from '"); | 594 builder.Append("Redirect from '"); |
| 595 builder.Append(redirect_response.Url().GetString()); | 595 builder.Append(redirect_response.Url().GetString()); |
| 596 builder.Append("' to '"); | 596 builder.Append("' to '"); |
| 597 builder.Append(request.Url().GetString()); | 597 builder.Append(request.Url().GetString()); |
| 598 builder.Append("' has been blocked by CORS policy: "); | 598 builder.Append("' has been blocked by CORS policy: "); |
| 599 CrossOriginAccessControl::AccessControlErrorString( | 599 CrossOriginAccessControl::AccessControlErrorString( |
| 600 builder, cors_status, redirect_response, GetSecurityOrigin(), | 600 builder, cors_status, redirect_response, GetSecurityOrigin(), |
| 601 request_context_); | 601 request_context_); |
| 602 access_control_error_description = builder.ToString(); | 602 access_control_error_description = builder.ToString(); |
| 603 } else { |
| 604 MeasureAccessControlAllowOrigin(redirect_response); |
| 603 } | 605 } |
| 604 } | 606 } |
| 605 | 607 |
| 606 if (!allow_redirect) { | 608 if (!allow_redirect) { |
| 607 DispatchDidFailAccessControlCheck(ResourceError( | 609 DispatchDidFailAccessControlCheck(ResourceError( |
| 608 kErrorDomainBlinkInternal, 0, redirect_response.Url().GetString(), | 610 kErrorDomainBlinkInternal, 0, redirect_response.Url().GetString(), |
| 609 access_control_error_description)); | 611 access_control_error_description)); |
| 610 return false; | 612 return false; |
| 611 } | 613 } |
| 612 | 614 |
| (...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 726 response, EffectiveAllowCredentials(), GetSecurityOrigin()); | 728 response, EffectiveAllowCredentials(), GetSecurityOrigin()); |
| 727 if (cors_status != CrossOriginAccessControl::kAccessAllowed) { | 729 if (cors_status != CrossOriginAccessControl::kAccessAllowed) { |
| 728 StringBuilder builder; | 730 StringBuilder builder; |
| 729 builder.Append( | 731 builder.Append( |
| 730 "Response to preflight request doesn't pass access " | 732 "Response to preflight request doesn't pass access " |
| 731 "control check: "); | 733 "control check: "); |
| 732 CrossOriginAccessControl::AccessControlErrorString( | 734 CrossOriginAccessControl::AccessControlErrorString( |
| 733 builder, cors_status, response, GetSecurityOrigin(), request_context_); | 735 builder, cors_status, response, GetSecurityOrigin(), request_context_); |
| 734 HandlePreflightFailure(response.Url().GetString(), builder.ToString()); | 736 HandlePreflightFailure(response.Url().GetString(), builder.ToString()); |
| 735 return; | 737 return; |
| 738 } else { |
| 739 MeasureAccessControlAllowOrigin(response); |
| 736 } | 740 } |
| 737 | 741 |
| 738 CrossOriginAccessControl::PreflightStatus preflight_status = | 742 CrossOriginAccessControl::PreflightStatus preflight_status = |
| 739 CrossOriginAccessControl::CheckPreflight(response); | 743 CrossOriginAccessControl::CheckPreflight(response); |
| 740 if (preflight_status != CrossOriginAccessControl::kPreflightSuccess) { | 744 if (preflight_status != CrossOriginAccessControl::kPreflightSuccess) { |
| 741 StringBuilder builder; | 745 StringBuilder builder; |
| 742 CrossOriginAccessControl::PreflightErrorString(builder, preflight_status, | 746 CrossOriginAccessControl::PreflightErrorString(builder, preflight_status, |
| 743 response); | 747 response); |
| 744 HandlePreflightFailure(response.Url().GetString(), builder.ToString()); | 748 HandlePreflightFailure(response.Url().GetString(), builder.ToString()); |
| 745 return; | 749 return; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 845 if (cors_status != CrossOriginAccessControl::kAccessAllowed) { | 849 if (cors_status != CrossOriginAccessControl::kAccessAllowed) { |
| 846 ReportResponseReceived(identifier, response); | 850 ReportResponseReceived(identifier, response); |
| 847 StringBuilder builder; | 851 StringBuilder builder; |
| 848 CrossOriginAccessControl::AccessControlErrorString( | 852 CrossOriginAccessControl::AccessControlErrorString( |
| 849 builder, cors_status, response, GetSecurityOrigin(), | 853 builder, cors_status, response, GetSecurityOrigin(), |
| 850 request_context_); | 854 request_context_); |
| 851 DispatchDidFailAccessControlCheck( | 855 DispatchDidFailAccessControlCheck( |
| 852 ResourceError(kErrorDomainBlinkInternal, 0, | 856 ResourceError(kErrorDomainBlinkInternal, 0, |
| 853 response.Url().GetString(), builder.ToString())); | 857 response.Url().GetString(), builder.ToString())); |
| 854 return; | 858 return; |
| 859 } else { |
| 860 MeasureAccessControlAllowOrigin(response); |
| 855 } | 861 } |
| 856 } | 862 } |
| 857 | 863 |
| 858 client_->DidReceiveResponse(identifier, response, std::move(handle)); | 864 client_->DidReceiveResponse(identifier, response, std::move(handle)); |
| 859 } | 865 } |
| 860 | 866 |
| 861 void DocumentThreadableLoader::SetSerializedCachedMetadata(Resource*, | 867 void DocumentThreadableLoader::SetSerializedCachedMetadata(Resource*, |
| 862 const char* data, | 868 const char* data, |
| 863 size_t size) { | 869 size_t size) { |
| 864 checker_.SetSerializedCachedMetadata(); | 870 checker_.SetSerializedCachedMetadata(); |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 const SecurityOrigin* DocumentThreadableLoader::GetSecurityOrigin() const { | 1161 const SecurityOrigin* DocumentThreadableLoader::GetSecurityOrigin() const { |
| 1156 return security_origin_ ? security_origin_.Get() | 1162 return security_origin_ ? security_origin_.Get() |
| 1157 : loading_context_->GetSecurityOrigin(); | 1163 : loading_context_->GetSecurityOrigin(); |
| 1158 } | 1164 } |
| 1159 | 1165 |
| 1160 Document* DocumentThreadableLoader::GetDocument() const { | 1166 Document* DocumentThreadableLoader::GetDocument() const { |
| 1161 DCHECK(loading_context_); | 1167 DCHECK(loading_context_); |
| 1162 return loading_context_->GetLoadingDocument(); | 1168 return loading_context_->GetLoadingDocument(); |
| 1163 } | 1169 } |
| 1164 | 1170 |
| 1171 void DocumentThreadableLoader::MeasureAccessControlAllowOrigin( |
| 1172 const ResourceResponse& response) const { |
| 1173 DEFINE_STATIC_LOCAL(AtomicString, null_token, ("null")); |
| 1174 const AtomicString& acao = |
| 1175 response.HttpHeaderField(HTTPNames::Access_Control_Allow_Origin); |
| 1176 if (acao == null_token && EffectiveAllowCredentials()) { |
| 1177 loading_context_->RecordUseCount( |
| 1178 UseCounter::kAccessControlAllowOriginNullWithCredentials); |
| 1179 } |
| 1180 if (SecurityOrigin::IsSecure(response.Url()) && |
| 1181 !GetSecurityOrigin()->IsPotentiallyTrustworthy()) { |
| 1182 if (acao == g_star_atom) { |
| 1183 loading_context_->RecordUseCount( |
| 1184 UseCounter::kAccessControlAllowOriginInsecureStarFromHTTPS); |
| 1185 } else if (acao == null_token) { |
| 1186 loading_context_->RecordUseCount( |
| 1187 UseCounter::kAccessControlAllowOriginInsecureNullFromHTTPS); |
| 1188 } else { |
| 1189 loading_context_->RecordUseCount( |
| 1190 UseCounter::kAccessControlAllowOriginInsecureExplicitFromHTTPS); |
| 1191 } |
| 1192 } |
| 1193 } |
| 1194 |
| 1165 DEFINE_TRACE(DocumentThreadableLoader) { | 1195 DEFINE_TRACE(DocumentThreadableLoader) { |
| 1166 visitor->Trace(resource_); | 1196 visitor->Trace(resource_); |
| 1167 visitor->Trace(loading_context_); | 1197 visitor->Trace(loading_context_); |
| 1168 ThreadableLoader::Trace(visitor); | 1198 ThreadableLoader::Trace(visitor); |
| 1169 RawResourceClient::Trace(visitor); | 1199 RawResourceClient::Trace(visitor); |
| 1170 } | 1200 } |
| 1171 | 1201 |
| 1172 } // namespace blink | 1202 } // namespace blink |
| OLD | NEW |