| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 878 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 889 return m_document ? m_document->getSecurityOrigin() : nullptr; | 889 return m_document ? m_document->getSecurityOrigin() : nullptr; |
| 890 } | 890 } |
| 891 | 891 |
| 892 void FrameFetchContext::modifyRequestForCSP(ResourceRequest& resourceRequest) { | 892 void FrameFetchContext::modifyRequestForCSP(ResourceRequest& resourceRequest) { |
| 893 // Record the latest requiredCSP value that will be used when sending this | 893 // Record the latest requiredCSP value that will be used when sending this |
| 894 // request. | 894 // request. |
| 895 frame()->loader().recordLatestRequiredCSP(); | 895 frame()->loader().recordLatestRequiredCSP(); |
| 896 frame()->loader().modifyRequestForCSP(resourceRequest, m_document); | 896 frame()->loader().modifyRequestForCSP(resourceRequest, m_document); |
| 897 } | 897 } |
| 898 | 898 |
| 899 void FrameFetchContext::addClientHintsIfNecessary(FetchRequest& fetchRequest) { | 899 void FrameFetchContext::addClientHintsIfNecessary( |
| 900 const ClientHintsPreferences& hintsPreferences, |
| 901 const FetchRequest::ResourceWidth& resourceWidth, |
| 902 ResourceRequest& request) { |
| 900 if (!RuntimeEnabledFeatures::clientHintsEnabled() || !m_document) | 903 if (!RuntimeEnabledFeatures::clientHintsEnabled() || !m_document) |
| 901 return; | 904 return; |
| 902 | 905 |
| 903 bool shouldSendDPR = m_document->clientHintsPreferences().shouldSendDPR() || | 906 bool shouldSendDPR = m_document->clientHintsPreferences().shouldSendDPR() || |
| 904 fetchRequest.clientHintsPreferences().shouldSendDPR(); | 907 hintsPreferences.shouldSendDPR(); |
| 905 bool shouldSendResourceWidth = | 908 bool shouldSendResourceWidth = |
| 906 m_document->clientHintsPreferences().shouldSendResourceWidth() || | 909 m_document->clientHintsPreferences().shouldSendResourceWidth() || |
| 907 fetchRequest.clientHintsPreferences().shouldSendResourceWidth(); | 910 hintsPreferences.shouldSendResourceWidth(); |
| 908 bool shouldSendViewportWidth = | 911 bool shouldSendViewportWidth = |
| 909 m_document->clientHintsPreferences().shouldSendViewportWidth() || | 912 m_document->clientHintsPreferences().shouldSendViewportWidth() || |
| 910 fetchRequest.clientHintsPreferences().shouldSendViewportWidth(); | 913 hintsPreferences.shouldSendViewportWidth(); |
| 911 | 914 |
| 912 if (shouldSendDPR) { | 915 if (shouldSendDPR) { |
| 913 fetchRequest.mutableResourceRequest().addHTTPHeaderField( | 916 request.addHTTPHeaderField( |
| 914 "DPR", AtomicString(String::number(m_document->devicePixelRatio()))); | 917 "DPR", AtomicString(String::number(m_document->devicePixelRatio()))); |
| 915 } | 918 } |
| 916 | 919 |
| 917 if (shouldSendResourceWidth) { | 920 if (shouldSendResourceWidth) { |
| 918 FetchRequest::ResourceWidth resourceWidth = fetchRequest.getResourceWidth(); | |
| 919 if (resourceWidth.isSet) { | 921 if (resourceWidth.isSet) { |
| 920 float physicalWidth = | 922 float physicalWidth = |
| 921 resourceWidth.width * m_document->devicePixelRatio(); | 923 resourceWidth.width * m_document->devicePixelRatio(); |
| 922 fetchRequest.mutableResourceRequest().addHTTPHeaderField( | 924 request.addHTTPHeaderField( |
| 923 "Width", AtomicString(String::number(ceil(physicalWidth)))); | 925 "Width", AtomicString(String::number(ceil(physicalWidth)))); |
| 924 } | 926 } |
| 925 } | 927 } |
| 926 | 928 |
| 927 if (shouldSendViewportWidth && frame()->view()) { | 929 if (shouldSendViewportWidth && frame()->view()) { |
| 928 fetchRequest.mutableResourceRequest().addHTTPHeaderField( | 930 request.addHTTPHeaderField( |
| 929 "Viewport-Width", | 931 "Viewport-Width", |
| 930 AtomicString(String::number(frame()->view()->viewportWidth()))); | 932 AtomicString(String::number(frame()->view()->viewportWidth()))); |
| 931 } | 933 } |
| 932 } | 934 } |
| 933 | 935 |
| 934 void FrameFetchContext::addCSPHeaderIfNecessary(Resource::Type type, | 936 void FrameFetchContext::addCSPHeaderIfNecessary(Resource::Type type, |
| 935 FetchRequest& fetchRequest) { | 937 ResourceRequest& request) { |
| 936 if (!m_document) | 938 if (!m_document) |
| 937 return; | 939 return; |
| 938 | 940 |
| 939 const ContentSecurityPolicy* csp = m_document->contentSecurityPolicy(); | 941 const ContentSecurityPolicy* csp = m_document->contentSecurityPolicy(); |
| 940 if (csp->shouldSendCSPHeader(type)) | 942 if (csp->shouldSendCSPHeader(type)) |
| 941 fetchRequest.mutableResourceRequest().addHTTPHeaderField("CSP", "active"); | 943 request.addHTTPHeaderField("CSP", "active"); |
| 942 } | 944 } |
| 943 | 945 |
| 944 void FrameFetchContext::populateRequestData(ResourceRequest& request) { | 946 void FrameFetchContext::populateResourceRequest( |
| 947 Resource::Type type, |
| 948 const ClientHintsPreferences& hintsPreferences, |
| 949 const FetchRequest::ResourceWidth& resourceWidth, |
| 950 ResourceRequest& request) { |
| 951 setFirstPartyCookieAndRequestorOrigin(request); |
| 952 modifyRequestForCSP(request); |
| 953 addClientHintsIfNecessary(hintsPreferences, resourceWidth, request); |
| 954 addCSPHeaderIfNecessary(type, request); |
| 955 } |
| 956 |
| 957 void FrameFetchContext::setFirstPartyCookieAndRequestorOrigin( |
| 958 ResourceRequest& request) { |
| 945 if (!m_document) | 959 if (!m_document) |
| 946 return; | 960 return; |
| 947 | 961 |
| 948 if (request.firstPartyForCookies().isNull()) { | 962 if (request.firstPartyForCookies().isNull()) { |
| 949 request.setFirstPartyForCookies( | 963 request.setFirstPartyForCookies( |
| 950 m_document ? m_document->firstPartyForCookies() | 964 m_document ? m_document->firstPartyForCookies() |
| 951 : SecurityOrigin::urlWithUniqueSecurityOrigin()); | 965 : SecurityOrigin::urlWithUniqueSecurityOrigin()); |
| 952 } | 966 } |
| 953 | 967 |
| 954 // Subresource requests inherit their requestor origin from |m_document| | 968 // Subresource requests inherit their requestor origin from |m_document| |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1041 response); | 1055 response); |
| 1042 } | 1056 } |
| 1043 | 1057 |
| 1044 DEFINE_TRACE(FrameFetchContext) { | 1058 DEFINE_TRACE(FrameFetchContext) { |
| 1045 visitor->trace(m_document); | 1059 visitor->trace(m_document); |
| 1046 visitor->trace(m_documentLoader); | 1060 visitor->trace(m_documentLoader); |
| 1047 FetchContext::trace(visitor); | 1061 FetchContext::trace(visitor); |
| 1048 } | 1062 } |
| 1049 | 1063 |
| 1050 } // namespace blink | 1064 } // namespace blink |
| OLD | NEW |