Diff
Modified: trunk/Source/WebCore/ChangeLog (89085 => 89086)
--- trunk/Source/WebCore/ChangeLog 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/ChangeLog 2011-06-16 23:45:15 UTC (rev 89086)
@@ -1,3 +1,27 @@
+2011-06-16 Nate Chapin <[email protected]>
+
+ Reviewed by Alexey Proskuryakov.
+
+ Set the referrer on a ResourceRequest from a WorkerThreadableLoader
+ as soon as the request reaches the main thread and remove the
+ optionalOutgoingReferrer parameter from some functions.
+ https://bugs.webkit.org/show_bug.cgi?id=62806
+
+ * loader/DocumentThreadableLoader.cpp:
+ (WebCore::DocumentThreadableLoader::loadResourceSynchronously):
+ (WebCore::DocumentThreadableLoader::create):
+ (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
+ (WebCore::DocumentThreadableLoader::loadRequest):
+ * loader/DocumentThreadableLoader.h:
+ * loader/ResourceLoadScheduler.cpp:
+ (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
+ * loader/ResourceLoadScheduler.h:
+ * loader/SubresourceLoader.cpp:
+ (WebCore::SubresourceLoader::create):
+ * loader/SubresourceLoader.h:
+ * loader/WorkerThreadableLoader.cpp:
+ (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader):
+
2011-06-16 Eric Seidel <[email protected]>
Reviewed by Adam Barth.
Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp (89085 => 89086)
--- trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp 2011-06-16 23:45:15 UTC (rev 89086)
@@ -51,30 +51,29 @@
void DocumentThreadableLoader::loadResourceSynchronously(Document* document, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options)
{
// The loader will be deleted as soon as this function exits.
- RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, &client, LoadSynchronously, request, options, String()));
+ RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, &client, LoadSynchronously, request, options));
ASSERT(loader->hasOneRef());
}
-PassRefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document* document, ThreadableLoaderClient* client, const ResourceRequest& request, const ThreadableLoaderOptions& options, const String& optionalOutgoingReferrer)
+PassRefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document* document, ThreadableLoaderClient* client, const ResourceRequest& request, const ThreadableLoaderOptions& options)
{
- RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadAsynchronously, request, options, optionalOutgoingReferrer));
+ RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadAsynchronously, request, options));
if (!loader->m_loader)
loader = 0;
return loader.release();
}
-DocumentThreadableLoader::DocumentThreadableLoader(Document* document, ThreadableLoaderClient* client, BlockingBehavior blockingBehavior, const ResourceRequest& request, const ThreadableLoaderOptions& options, const String& optionalOutgoingReferrer)
+DocumentThreadableLoader::DocumentThreadableLoader(Document* document, ThreadableLoaderClient* client, BlockingBehavior blockingBehavior, const ResourceRequest& request, const ThreadableLoaderOptions& options)
: m_client(client)
, m_document(document)
, m_options(options)
- , m_optionalOutgoingReferrer(optionalOutgoingReferrer)
, m_sameOriginRequest(securityOrigin()->canRequest(request.url()))
, m_async(blockingBehavior == LoadAsynchronously)
{
ASSERT(document);
ASSERT(client);
// Setting an outgoing referer is only supported in the async code path.
- ASSERT(m_async || m_optionalOutgoingReferrer.isEmpty());
+ ASSERT(m_async || request.httpReferrer().isEmpty());
if (m_sameOriginRequest || m_options.crossOriginRequestPolicy == AllowCrossOriginRequests) {
loadRequest(request, DoSecurityCheck);
@@ -327,7 +326,7 @@
// Clear the loader so that any callbacks from SubresourceLoader::create will not have the old loader.
m_loader = 0;
m_loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_document->frame(), this, request, ResourceLoadPriorityMedium, securityCheck, sendLoadCallbacks,
- sniffContent, m_optionalOutgoingReferrer, shouldBufferData);
+ sniffContent, shouldBufferData);
return;
}
Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.h (89085 => 89086)
--- trunk/Source/WebCore/loader/DocumentThreadableLoader.h 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.h 2011-06-16 23:45:15 UTC (rev 89086)
@@ -52,7 +52,7 @@
WTF_MAKE_FAST_ALLOCATED;
public:
static void loadResourceSynchronously(Document*, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);
- static PassRefPtr<DocumentThreadableLoader> create(Document*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&, const String& optionalOutgoingReferrer = String());
+ static PassRefPtr<DocumentThreadableLoader> create(Document*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&);
virtual ~DocumentThreadableLoader();
virtual void cancel();
@@ -71,7 +71,7 @@
LoadAsynchronously
};
- DocumentThreadableLoader(Document*, ThreadableLoaderClient*, BlockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions&, const String& optionalOutgoingReferrer);
+ DocumentThreadableLoader(Document*, ThreadableLoaderClient*, BlockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions&);
virtual void willSendRequest(SubresourceLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
virtual void didSendData(SubresourceLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
@@ -102,7 +102,6 @@
ThreadableLoaderClient* m_client;
Document* m_document;
ThreadableLoaderOptions m_options;
- String m_optionalOutgoingReferrer;
bool m_sameOriginRequest;
bool m_async;
OwnPtr<ResourceRequest> m_actualRequest; // non-null during Access Control preflight checks
Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp (89085 => 89086)
--- trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp 2011-06-16 23:45:15 UTC (rev 89086)
@@ -84,9 +84,9 @@
}
PassRefPtr<SubresourceLoader> ResourceLoadScheduler::scheduleSubresourceLoad(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest& request, ResourceLoadPriority priority, SecurityCheckPolicy securityCheck,
- bool sendResourceLoadCallbacks, bool shouldContentSniff, const String& optionalOutgoingReferrer, bool shouldBufferData)
+ bool sendResourceLoadCallbacks, bool shouldContentSniff, bool shouldBufferData)
{
- RefPtr<SubresourceLoader> loader = SubresourceLoader::create(frame, client, request, securityCheck, sendResourceLoadCallbacks, shouldContentSniff, optionalOutgoingReferrer, shouldBufferData);
+ RefPtr<SubresourceLoader> loader = SubresourceLoader::create(frame, client, request, securityCheck, sendResourceLoadCallbacks, shouldContentSniff, shouldBufferData);
if (loader)
scheduleLoad(loader.get(), priority);
return loader.release();
Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.h (89085 => 89086)
--- trunk/Source/WebCore/loader/ResourceLoadScheduler.h 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.h 2011-06-16 23:45:15 UTC (rev 89086)
@@ -50,7 +50,7 @@
public:
friend ResourceLoadScheduler* resourceLoadScheduler();
- PassRefPtr<SubresourceLoader> scheduleSubresourceLoad(Frame*, SubresourceLoaderClient*, const ResourceRequest&, ResourceLoadPriority = ResourceLoadPriorityLow, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true, const String& optionalOutgoingReferrer = String(), bool shouldBufferData = true);
+ PassRefPtr<SubresourceLoader> scheduleSubresourceLoad(Frame*, SubresourceLoaderClient*, const ResourceRequest&, ResourceLoadPriority = ResourceLoadPriorityLow, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true, bool shouldBufferData = true);
PassRefPtr<NetscapePlugInStreamLoader> schedulePluginStreamLoad(Frame*, NetscapePlugInStreamLoaderClient*, const ResourceRequest&);
void addMainResourceLoad(ResourceLoader*);
void remove(ResourceLoader*);
Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (89085 => 89086)
--- trunk/Source/WebCore/loader/SubresourceLoader.cpp 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp 2011-06-16 23:45:15 UTC (rev 89086)
@@ -61,7 +61,7 @@
#endif
}
-PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest& request, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff, const String& optionalOutgoingReferrer, bool shouldBufferData)
+PassRefPtr<SubresourceLoader> SubresourceLoader::create(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest& request, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff, bool shouldBufferData)
{
if (!frame)
return 0;
@@ -83,11 +83,11 @@
String outgoingReferrer;
String outgoingOrigin;
- if (optionalOutgoingReferrer.isNull()) {
+ if (request.httpReferrer().isNull()) {
outgoingReferrer = fl->outgoingReferrer();
outgoingOrigin = fl->outgoingOrigin();
} else {
- outgoingReferrer = optionalOutgoingReferrer;
+ outgoingReferrer = request.httpReferrer();
outgoingOrigin = SecurityOrigin::createFromString(outgoingReferrer)->toString();
}
Modified: trunk/Source/WebCore/loader/SubresourceLoader.h (89085 => 89086)
--- trunk/Source/WebCore/loader/SubresourceLoader.h 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/SubresourceLoader.h 2011-06-16 23:45:15 UTC (rev 89086)
@@ -41,7 +41,7 @@
class SubresourceLoader : public ResourceLoader {
public:
- static PassRefPtr<SubresourceLoader> create(Frame*, SubresourceLoaderClient*, const ResourceRequest&, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true, const String& optionalOutgoingReferrer = String(), bool shouldBufferData = true);
+ static PassRefPtr<SubresourceLoader> create(Frame*, SubresourceLoaderClient*, const ResourceRequest&, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true, bool shouldBufferData = true);
void clearClient() { m_client = 0; }
Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp (89085 => 89086)
--- trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp 2011-06-16 23:44:38 UTC (rev 89085)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp 2011-06-16 23:45:15 UTC (rev 89086)
@@ -111,10 +111,11 @@
Document* document = static_cast<Document*>(context);
OwnPtr<ResourceRequest> request(ResourceRequest::adopt(requestData));
+ request->setHTTPReferrer(outgoingReferrer);
// FIXME: If the a site requests a local resource, then this will return a non-zero value but the sync path
// will return a 0 value. Either this should return 0 or the other code path should do a callback with
// a failure.
- thisPtr->m_mainThreadLoader = DocumentThreadableLoader::create(document, thisPtr, *request, options, outgoingReferrer);
+ thisPtr->m_mainThreadLoader = DocumentThreadableLoader::create(document, thisPtr, *request, options);
ASSERT(thisPtr->m_mainThreadLoader);
}