|
Lines 44-59
Source/WebCore/loader/PingLoader.cpp_sec1
|
| 44 |
#include "PlatformStrategies.h" |
44 |
#include "PlatformStrategies.h" |
| 45 |
#include "ProgressTracker.h" |
45 |
#include "ProgressTracker.h" |
| 46 |
#include "ResourceHandle.h" |
46 |
#include "ResourceHandle.h" |
|
|
47 |
#include "ResourceLoadInfo.h" |
| 47 |
#include "ResourceRequest.h" |
48 |
#include "ResourceRequest.h" |
| 48 |
#include "ResourceResponse.h" |
49 |
#include "ResourceResponse.h" |
| 49 |
#include "SecurityOrigin.h" |
50 |
#include "SecurityOrigin.h" |
| 50 |
#include "SecurityPolicy.h" |
51 |
#include "SecurityPolicy.h" |
|
|
52 |
#include "UserContentController.h" |
| 51 |
#include <wtf/text/CString.h> |
53 |
#include <wtf/text/CString.h> |
| 52 |
|
54 |
|
| 53 |
namespace WebCore { |
55 |
namespace WebCore { |
| 54 |
|
56 |
|
|
|
57 |
#if ENABLE(CONTENT_EXTENSIONS) |
| 58 |
static ContentExtensions::BlockedStatus processContentExtensionRulesForPing(const Frame& frame, const URL& url, ResourceType resourceType) { |
| 59 |
if (DocumentLoader* documentLoader = frame.loader().documentLoader()) { |
| 60 |
if (Page* page = frame.page()) { |
| 61 |
if (UserContentController* controller = page->userContentController()) { |
| 62 |
return controller->processContentExtensionRulesForPing(url, resourceType, *documentLoader); |
| 63 |
} |
| 64 |
} |
| 65 |
} |
| 66 |
return ContentExtensions::BlockedStatus::NotBlocked; |
| 67 |
} |
| 68 |
#endif |
| 69 |
|
| 55 |
void PingLoader::loadImage(Frame& frame, const URL& url) |
70 |
void PingLoader::loadImage(Frame& frame, const URL& url) |
| 56 |
{ |
71 |
{ |
|
|
72 |
bool shouldDisallowCookies = false; |
| 73 |
|
| 74 |
#if ENABLE(CONTENT_EXTENSIONS) |
| 75 |
auto pingBlockStatus = processContentExtensionRulesForPing(frame, url, ResourceType::Image); |
| 76 |
if (pingBlockStatus == ContentExtensions::BlockedStatus::Blocked) { |
| 77 |
return; |
| 78 |
} else if (pingBlockStatus == ContentExtensions::BlockedStatus::BlockedCookies) { |
| 79 |
shouldDisallowCookies = true; |
| 80 |
} |
| 81 |
#endif |
| 82 |
|
| 57 |
if (!frame.document()->securityOrigin()->canDisplay(url)) { |
83 |
if (!frame.document()->securityOrigin()->canDisplay(url)) { |
| 58 |
FrameLoader::reportLocalLoadFailed(&frame, url); |
84 |
FrameLoader::reportLocalLoadFailed(&frame, url); |
| 59 |
return; |
85 |
return; |
|
Lines 66-77
void PingLoader::loadImage(Frame& frame,
Source/WebCore/loader/PingLoader.cpp_sec2
|
| 66 |
request.setHTTPReferrer(referrer); |
92 |
request.setHTTPReferrer(referrer); |
| 67 |
frame.loader().addExtraFieldsToSubresourceRequest(request); |
93 |
frame.loader().addExtraFieldsToSubresourceRequest(request); |
| 68 |
|
94 |
|
|
|
95 |
if (shouldDisallowCookies) { |
| 96 |
request.setAllowCookies(false); |
| 97 |
} |
| 98 |
|
| 69 |
startPingLoad(frame, request); |
99 |
startPingLoad(frame, request); |
| 70 |
} |
100 |
} |
| 71 |
|
101 |
|
| 72 |
// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing |
102 |
// http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#hyperlink-auditing |
| 73 |
void PingLoader::sendPing(Frame& frame, const URL& pingURL, const URL& destinationURL) |
103 |
void PingLoader::sendPing(Frame& frame, const URL& pingURL, const URL& destinationURL) |
| 74 |
{ |
104 |
{ |
|
|
105 |
bool shouldDisallowCookies = false; |
| 106 |
|
| 107 |
#if ENABLE(CONTENT_EXTENSIONS) |
| 108 |
auto pingBlockStatus = processContentExtensionRulesForPing(frame, pingURL, ResourceType::Raw); |
| 109 |
if (pingBlockStatus == ContentExtensions::BlockedStatus::Blocked) { |
| 110 |
return; |
| 111 |
} else if (pingBlockStatus == ContentExtensions::BlockedStatus::BlockedCookies) { |
| 112 |
shouldDisallowCookies = true; |
| 113 |
} |
| 114 |
#endif |
| 115 |
|
| 75 |
ResourceRequest request(pingURL); |
116 |
ResourceRequest request(pingURL); |
| 76 |
request.setHTTPMethod("POST"); |
117 |
request.setHTTPMethod("POST"); |
| 77 |
request.setHTTPContentType("text/ping"); |
118 |
request.setHTTPContentType("text/ping"); |
|
Lines 92-107
void PingLoader::sendPing(Frame& frame,
Source/WebCore/loader/PingLoader.cpp_sec3
|
| 92 |
} |
133 |
} |
| 93 |
} |
134 |
} |
| 94 |
|
135 |
|
|
|
136 |
if (shouldDisallowCookies) { |
| 137 |
request.setAllowCookies(false); |
| 138 |
} |
| 139 |
|
| 95 |
startPingLoad(frame, request); |
140 |
startPingLoad(frame, request); |
| 96 |
} |
141 |
} |
| 97 |
|
142 |
|
| 98 |
void PingLoader::sendViolationReport(Frame& frame, const URL& reportURL, PassRefPtr<FormData> report) |
143 |
void PingLoader::sendViolationReport(Frame& frame, const URL& reportURL, PassRefPtr<FormData> report) |
| 99 |
{ |
144 |
{ |
|
|
145 |
bool shouldDisallowCookies = false; |
| 146 |
|
| 147 |
#if ENABLE(CONTENT_EXTENSIONS) |
| 148 |
auto pingBlockStatus = processContentExtensionRulesForPing(frame, reportURL, ResourceType::Raw); |
| 149 |
if (pingBlockStatus == ContentExtensions::BlockedStatus::Blocked) { |
| 150 |
return; |
| 151 |
} else if (pingBlockStatus == ContentExtensions::BlockedStatus::BlockedCookies) { |
| 152 |
shouldDisallowCookies = true; |
| 153 |
} |
| 154 |
#endif |
| 155 |
|
| 100 |
ResourceRequest request(reportURL); |
156 |
ResourceRequest request(reportURL); |
| 101 |
request.setHTTPMethod("POST"); |
157 |
request.setHTTPMethod("POST"); |
| 102 |
request.setHTTPContentType("application/json"); |
158 |
request.setHTTPContentType("application/json"); |
| 103 |
request.setHTTPBody(report); |
159 |
request.setHTTPBody(report); |
| 104 |
request.setAllowCookies(frame.document()->securityOrigin()->isSameSchemeHostPort(SecurityOrigin::create(reportURL).ptr())); |
160 |
bool isSameSchemeHostPort = frame.document()->securityOrigin()->isSameSchemeHostPort(SecurityOrigin::create(reportURL).ptr()); |
|
|
161 |
if (!isSameSchemeHostPort || shouldDisallowCookies) { |
| 162 |
request.setAllowCookies(false); |
| 163 |
} |
| 105 |
frame.loader().addExtraFieldsToSubresourceRequest(request); |
164 |
frame.loader().addExtraFieldsToSubresourceRequest(request); |
| 106 |
|
165 |
|
| 107 |
String referrer = SecurityPolicy::generateReferrerHeader(frame.document()->referrerPolicy(), reportURL, frame.loader().outgoingReferrer()); |
166 |
String referrer = SecurityPolicy::generateReferrerHeader(frame.document()->referrerPolicy(), reportURL, frame.loader().outgoingReferrer()); |