<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[81639] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/81639">81639</a></dd>
<dt>Author</dt> <dd>levin@chromium.org</dd>
<dt>Date</dt> <dd>2011-03-21 20:28:03 -0700 (Mon, 21 Mar 2011)</dd>
</dl>

<h3>Log Message</h3>
<pre>2011-03-21  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        XHR in Workers doesn't set the referrer correctly.
        https://bugs.webkit.org/show_bug.cgi?id=24683

        * http/tests/xmlhttprequest/workers/referer-expected.txt: Fixed expectations now that this works correctly.
        * http/tests/xmlhttprequest/workers/shared-worker-referer-expected.txt: Ditto.
2011-03-21  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        XHR in Workers doesn't set the referrer correctly.
        https://bugs.webkit.org/show_bug.cgi?id=24683

        Tests: http/tests/xmlhttprequest/workers/referer.html
               http/tests/xmlhttprequest/workers/shared-worker-referer.html

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Fill in empty string for the outgoing referrer.
        (WebCore::DocumentThreadableLoader::create): Added the ability to set the outgoing referrer.
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Ditto.
        (WebCore::DocumentThreadableLoader::loadRequest): Ditto.
        * loader/DocumentThreadableLoader.h: Ditto.
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Ditto.
        * loader/ResourceLoadScheduler.h: Ditto.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Fixed bug (caught by the test) in last minute change done in previous check-in.
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader): Fill in the outgoing referrer.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Plumbing for the outgoing referrer.
        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Plumbing for the outgoing referrer.
        * loader/WorkerThreadableLoader.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestshttptestsxmlhttprequestworkersrefererexpectedtxt">trunk/LayoutTests/http/tests/xmlhttprequest/workers/referer-expected.txt</a></li>
<li><a href="#trunkLayoutTestshttptestsxmlhttprequestworkerssharedworkerrefererexpectedtxt">trunk/LayoutTests/http/tests/xmlhttprequest/workers/shared-worker-referer-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentThreadableLoadercpp">trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderDocumentThreadableLoaderh">trunk/Source/WebCore/loader/DocumentThreadableLoader.h</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadSchedulercpp">trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderResourceLoadSchedulerh">trunk/Source/WebCore/loader/ResourceLoadScheduler.h</a></li>
<li><a href="#trunkSourceWebCoreloaderSubresourceLoadercpp">trunk/Source/WebCore/loader/SubresourceLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderWorkerThreadableLoadercpp">trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderWorkerThreadableLoaderh">trunk/Source/WebCore/loader/WorkerThreadableLoader.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog      2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/LayoutTests/ChangeLog 2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2011-03-21  David Levin  <levin@chromium.org>
+
+        Reviewed by Adam Barth.
+
+        XHR in Workers doesn't set the referrer correctly.
+        https://bugs.webkit.org/show_bug.cgi?id=24683
+
+        * http/tests/xmlhttprequest/workers/referer-expected.txt: Fixed expectations now that this works correctly.
+        * http/tests/xmlhttprequest/workers/shared-worker-referer-expected.txt: Ditto.
+
</ins><span class="cx"> 2011-03-21  James Simonsen  <simonjam@chromium.org>
</span><span class="cx"> 
</span><span class="cx">         [Chromium] Unreviewed, rebaseline win/linux after r81625.
</span></span></pre></div>
<a id="trunkLayoutTestshttptestsxmlhttprequestworkersrefererexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/xmlhttprequest/workers/referer-expected.txt (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/xmlhttprequest/workers/referer-expected.txt 2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/workers/referer-expected.txt    2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> Referer should be set for XMLHttpRequest from Workers.
</span><span class="cx"> 
</span><del>-FAIL: Sync. Expected referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/resources/referer.js' Actual referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/referer.html'
-FAIL: Async. Expected referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/resources/referer.js' Actual referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/referer.html'
</del><ins>+PASS: Sync referer.
+PASS: Async referer.
</ins></span></pre></div>
<a id="trunkLayoutTestshttptestsxmlhttprequestworkerssharedworkerrefererexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/http/tests/xmlhttprequest/workers/shared-worker-referer-expected.txt (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/http/tests/xmlhttprequest/workers/shared-worker-referer-expected.txt   2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/LayoutTests/http/tests/xmlhttprequest/workers/shared-worker-referer-expected.txt      2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -1,4 +1,4 @@
</span><span class="cx"> Referer should be set for XMLHttpRequest from SharedWorkers.
</span><span class="cx"> 
</span><del>-FAIL: Sync. Expected referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/resources/referer.js' Actual referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/shared-worker-referer.html'
-FAIL: Async. Expected referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/resources/referer.js' Actual referer: 'http://127.0.0.1:8000/xmlhttprequest/workers/shared-worker-referer.html'
</del><ins>+PASS: Sync referer.
+PASS: Async referer.
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/ChangeLog      2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2011-03-21  David Levin  <levin@chromium.org>
+
+        Reviewed by Adam Barth.
+
+        XHR in Workers doesn't set the referrer correctly.
+        https://bugs.webkit.org/show_bug.cgi?id=24683
+
+        Tests: http/tests/xmlhttprequest/workers/referer.html
+               http/tests/xmlhttprequest/workers/shared-worker-referer.html
+
+        * loader/DocumentThreadableLoader.cpp:
+        (WebCore::DocumentThreadableLoader::loadResourceSynchronously): Fill in empty string for the outgoing referrer.
+        (WebCore::DocumentThreadableLoader::create): Added the ability to set the outgoing referrer.
+        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Ditto.
+        (WebCore::DocumentThreadableLoader::loadRequest): Ditto.
+        * loader/DocumentThreadableLoader.h: Ditto.
+        * loader/ResourceLoadScheduler.cpp:
+        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad): Ditto.
+        * loader/ResourceLoadScheduler.h: Ditto.
+        * loader/SubresourceLoader.cpp:
+        (WebCore::SubresourceLoader::create): Fixed bug (caught by the test) in last minute change done in previous check-in.
+        * loader/WorkerThreadableLoader.cpp:
+        (WebCore::WorkerThreadableLoader::WorkerThreadableLoader): Fill in the outgoing referrer.
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::MainThreadBridge): Plumbing for the outgoing referrer.
+        (WebCore::WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader): Plumbing for the outgoing referrer.
+        * loader/WorkerThreadableLoader.h:
+
</ins><span class="cx"> 2011-03-21  Nate Chapin  <japhet@chromium.org>
</span><span class="cx"> 
</span><span class="cx">         Reviewed by Brady Eidson.
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentThreadableLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp 2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.cpp    2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -51,27 +51,30 @@
</span><span class="cx"> void DocumentThreadableLoader::loadResourceSynchronously(Document* document, const ResourceRequest& request, ThreadableLoaderClient& client, const ThreadableLoaderOptions& options)
</span><span class="cx"> {
</span><span class="cx">     // The loader will be deleted as soon as this function exits.
</span><del>-    RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, &client, LoadSynchronously, request, options));
</del><ins>+    RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, &client, LoadSynchronously, request, options, String()));
</ins><span class="cx">     ASSERT(loader->hasOneRef());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document* document, ThreadableLoaderClient* client, const ResourceRequest& request, const ThreadableLoaderOptions& options)
</del><ins>+PassRefPtr<DocumentThreadableLoader> DocumentThreadableLoader::create(Document* document, ThreadableLoaderClient* client, const ResourceRequest& request, const ThreadableLoaderOptions& options, const String& optionalOutgoingReferrer)
</ins><span class="cx"> {
</span><del>-    RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadAsynchronously, request, options));
</del><ins>+    RefPtr<DocumentThreadableLoader> loader = adoptRef(new DocumentThreadableLoader(document, client, LoadAsynchronously, request, options, optionalOutgoingReferrer));
</ins><span class="cx">     if (!loader->m_loader)
</span><span class="cx">         loader = 0;
</span><span class="cx">     return loader.release();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-DocumentThreadableLoader::DocumentThreadableLoader(Document* document, ThreadableLoaderClient* client, BlockingBehavior blockingBehavior, const ResourceRequest& request, const ThreadableLoaderOptions& options)
</del><ins>+DocumentThreadableLoader::DocumentThreadableLoader(Document* document, ThreadableLoaderClient* client, BlockingBehavior blockingBehavior, const ResourceRequest& request, const ThreadableLoaderOptions& options, const String& optionalOutgoingReferrer)
</ins><span class="cx">     : m_client(client)
</span><span class="cx">     , m_document(document)
</span><span class="cx">     , m_options(options)
</span><ins>+    , m_optionalOutgoingReferrer(optionalOutgoingReferrer)
</ins><span class="cx">     , m_sameOriginRequest(document->securityOrigin()->canRequest(request.url()))
</span><span class="cx">     , m_async(blockingBehavior == LoadAsynchronously)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(document);
</span><span class="cx">     ASSERT(client);
</span><ins>+    // Setting an outgoing referer is only supported in the async code path.
+    ASSERT(m_async || m_optionalOutgoingReferrer.isEmpty());
</ins><span class="cx"> 
</span><span class="cx">     if (m_sameOriginRequest || m_options.crossOriginRequestPolicy == AllowCrossOriginRequests) {
</span><span class="cx">         loadRequest(request, DoSecurityCheck);
</span><span class="lines">@@ -346,7 +349,8 @@
</span><span class="cx"> 
</span><span class="cx">         // Clear the loader so that any callbacks from SubresourceLoader::create will not have the old loader.
</span><span class="cx">         m_loader = 0;
</span><del>-        m_loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_document->frame(), this, request, ResourceLoadPriorityMedium, securityCheck, sendLoadCallbacks, sniffContent);
</del><ins>+        m_loader = resourceLoadScheduler()->scheduleSubresourceLoad(m_document->frame(), this, request, ResourceLoadPriorityMedium, securityCheck, sendLoadCallbacks,
+                                                                    sniffContent, m_optionalOutgoingReferrer);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderDocumentThreadableLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/DocumentThreadableLoader.h (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/DocumentThreadableLoader.h   2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/DocumentThreadableLoader.h      2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx"> #include <wtf/PassRefPtr.h>
</span><span class="cx"> #include <wtf/RefCounted.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><ins>+#include <wtf/text/WTFString.h>
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     class Document;
</span><span class="lines">@@ -50,7 +51,7 @@
</span><span class="cx">         WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx">     public:
</span><span class="cx">         static void loadResourceSynchronously(Document*, const ResourceRequest&, ThreadableLoaderClient&, const ThreadableLoaderOptions&);
</span><del>-        static PassRefPtr<DocumentThreadableLoader> create(Document*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&);
</del><ins>+        static PassRefPtr<DocumentThreadableLoader> create(Document*, ThreadableLoaderClient*, const ResourceRequest&, const ThreadableLoaderOptions&, const String& optionalOutgoingReferrer = String());
</ins><span class="cx">         virtual ~DocumentThreadableLoader();
</span><span class="cx"> 
</span><span class="cx">         virtual void cancel();
</span><span class="lines">@@ -69,7 +70,7 @@
</span><span class="cx">             LoadAsynchronously
</span><span class="cx">         };
</span><span class="cx"> 
</span><del>-        DocumentThreadableLoader(Document*, ThreadableLoaderClient*, BlockingBehavior blockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions& options);
</del><ins>+        DocumentThreadableLoader(Document*, ThreadableLoaderClient*, BlockingBehavior, const ResourceRequest&, const ThreadableLoaderOptions&, const String& optionalOutgoingReferrer);
</ins><span class="cx"> 
</span><span class="cx">         virtual void willSendRequest(SubresourceLoader*, ResourceRequest&, const ResourceResponse& redirectResponse);
</span><span class="cx">         virtual void didSendData(SubresourceLoader*, unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
</span><span class="lines">@@ -97,6 +98,7 @@
</span><span class="cx">         ThreadableLoaderClient* m_client;
</span><span class="cx">         Document* m_document;
</span><span class="cx">         ThreadableLoaderOptions m_options;
</span><ins>+        String m_optionalOutgoingReferrer;
</ins><span class="cx">         bool m_sameOriginRequest;
</span><span class="cx">         bool m_async;
</span><span class="cx">         OwnPtr<ResourceRequest> m_actualRequest;  // non-null during Access Control preflight checks
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadSchedulercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp    2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.cpp       2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -83,12 +83,13 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-PassRefPtr<SubresourceLoader> ResourceLoadScheduler::scheduleSubresourceLoad(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest& request, ResourceLoadPriority priority, SecurityCheckPolicy securityCheck, bool sendResourceLoadCallbacks, bool shouldContentSniff)
</del><ins>+PassRefPtr<SubresourceLoader> ResourceLoadScheduler::scheduleSubresourceLoad(Frame* frame, SubresourceLoaderClient* client, const ResourceRequest& request, ResourceLoadPriority priority, SecurityCheckPolicy securityCheck,
+                                                                             bool sendResourceLoadCallbacks, bool shouldContentSniff, const String& optionalOutgoingReferrer)
</ins><span class="cx"> {
</span><del>-    PassRefPtr<SubresourceLoader> loader = SubresourceLoader::create(frame, client, request, securityCheck, sendResourceLoadCallbacks, shouldContentSniff);
</del><ins>+    RefPtr<SubresourceLoader> loader = SubresourceLoader::create(frame, client, request, securityCheck, sendResourceLoadCallbacks, shouldContentSniff, optionalOutgoingReferrer);
</ins><span class="cx">     if (loader)
</span><span class="cx">         scheduleLoad(loader.get(), priority);
</span><del>-    return loader;
</del><ins>+    return loader.release();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> PassRefPtr<NetscapePlugInStreamLoader> ResourceLoadScheduler::schedulePluginStreamLoad(Frame* frame, NetscapePlugInStreamLoaderClient* client, const ResourceRequest& request)
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderResourceLoadSchedulerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ResourceLoadScheduler.h (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ResourceLoadScheduler.h      2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/ResourceLoadScheduler.h 2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="cx"> #include <wtf/Noncopyable.h>
</span><span class="cx"> #include <wtf/text/StringHash.h>
</span><ins>+#include <wtf/text/WTFString.h>
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -49,7 +50,7 @@
</span><span class="cx"> public:
</span><span class="cx">     friend ResourceLoadScheduler* resourceLoadScheduler();
</span><span class="cx"> 
</span><del>-    PassRefPtr<SubresourceLoader> scheduleSubresourceLoad(Frame*, SubresourceLoaderClient*, const ResourceRequest&, ResourceLoadPriority = ResourceLoadPriorityLow, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true);
</del><ins>+    PassRefPtr<SubresourceLoader> scheduleSubresourceLoad(Frame*, SubresourceLoaderClient*, const ResourceRequest&, ResourceLoadPriority = ResourceLoadPriorityLow, SecurityCheckPolicy = DoSecurityCheck, bool sendResourceLoadCallbacks = true, bool shouldContentSniff = true, const String& optionalOutgoingReferrer = String());
</ins><span class="cx">     PassRefPtr<NetscapePlugInStreamLoader> schedulePluginStreamLoad(Frame*, NetscapePlugInStreamLoaderClient*, const ResourceRequest&);
</span><span class="cx">     void addMainResourceLoad(ResourceLoader*);
</span><span class="cx">     void remove(ResourceLoader*);
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderSubresourceLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/SubresourceLoader.cpp (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/SubresourceLoader.cpp        2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/SubresourceLoader.cpp   2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx"> 
</span><span class="cx">     String outgoingReferrer;
</span><span class="cx">     String outgoingOrigin;
</span><del>-    if (outgoingReferrer.isNull()) {
</del><ins>+    if (optionalOutgoingReferrer.isNull()) {
</ins><span class="cx">         outgoingReferrer = fl->outgoingReferrer();
</span><span class="cx">         outgoingOrigin = fl->outgoingOrigin();
</span><span class="cx">     } else {
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderWorkerThreadableLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp   2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.cpp      2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -34,6 +34,8 @@
</span><span class="cx"> 
</span><span class="cx"> #include "WorkerThreadableLoader.h"
</span><span class="cx"> 
</span><ins>+#include "Document.h"
+#include "DocumentThreadableLoader.h"
</ins><span class="cx"> #include "CrossThreadTask.h"
</span><span class="cx"> #include "ResourceError.h"
</span><span class="cx"> #include "ResourceRequest.h"
</span><span class="lines">@@ -55,7 +57,7 @@
</span><span class="cx"> WorkerThreadableLoader::WorkerThreadableLoader(WorkerContext* workerContext, ThreadableLoaderClient* client, const String& taskMode, const ResourceRequest& request, const ThreadableLoaderOptions& options)
</span><span class="cx">     : m_workerContext(workerContext)
</span><span class="cx">     , m_workerClientWrapper(ThreadableLoaderClientWrapper::create(client))
</span><del>-    , m_bridge(*(new MainThreadBridge(m_workerClientWrapper, m_workerContext->thread()->workerLoaderProxy(), taskMode, request, options)))
</del><ins>+    , m_bridge(*(new MainThreadBridge(m_workerClientWrapper, m_workerContext->thread()->workerLoaderProxy(), taskMode, request, options, workerContext->url().strippedForUseAsReferrer())))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -87,32 +89,30 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerThreadableLoader::MainThreadBridge::MainThreadBridge(PassRefPtr<ThreadableLoaderClientWrapper> workerClientWrapper, WorkerLoaderProxy& loaderProxy, const String& taskMode,
</span><del>-                                                           const ResourceRequest& request, const ThreadableLoaderOptions& options)
</del><ins>+                                                           const ResourceRequest& request, const ThreadableLoaderOptions& options, const String& outgoingReferrer)
</ins><span class="cx">     : m_workerClientWrapper(workerClientWrapper)
</span><span class="cx">     , m_loaderProxy(loaderProxy)
</span><span class="cx">     , m_taskMode(taskMode.crossThreadString())
</span><span class="cx"> {
</span><span class="cx">     ASSERT(m_workerClientWrapper.get());
</span><del>-    m_loaderProxy.postTaskToLoader(createCallbackTask(&MainThreadBridge::mainThreadCreateLoader, this, request, options));
</del><ins>+    m_loaderProxy.postTaskToLoader(createCallbackTask(&MainThreadBridge::mainThreadCreateLoader, this, request, options, outgoingReferrer));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WorkerThreadableLoader::MainThreadBridge::~MainThreadBridge()
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader(ScriptExecutionContext* context, MainThreadBridge* thisPtr, PassOwnPtr<CrossThreadResourceRequestData> requestData, ThreadableLoaderOptions options)
</del><ins>+void WorkerThreadableLoader::MainThreadBridge::mainThreadCreateLoader(ScriptExecutionContext* context, MainThreadBridge* thisPtr, PassOwnPtr<CrossThreadResourceRequestData> requestData, ThreadableLoaderOptions options, const String& outgoingReferrer)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx">     ASSERT(context->isDocument());
</span><ins>+    Document* document = static_cast<Document*>(context);
</ins><span class="cx"> 
</span><del>-    // FIXME: the created loader has no knowledge of the origin of the worker doing the load request.
-    // Basically every setting done in SubresourceLoader::create (including the contents of addExtraFieldsToRequest)
-    // needs to be examined for how it should take into account a different originator.
</del><span class="cx">     OwnPtr<ResourceRequest> request(ResourceRequest::adopt(requestData));
</span><span class="cx">     // FIXME: If the a site requests a local resource, then this will return a non-zero value but the sync path
</span><span class="cx">     // will return a 0 value.  Either this should return 0 or the other code path should do a callback with
</span><span class="cx">     // a failure.
</span><del>-    thisPtr->m_mainThreadLoader = ThreadableLoader::create(context, thisPtr, *request, options);
</del><ins>+    thisPtr->m_mainThreadLoader = DocumentThreadableLoader::create(document, thisPtr, *request, options, outgoingReferrer);
</ins><span class="cx">     ASSERT(thisPtr->m_mainThreadLoader);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderWorkerThreadableLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/WorkerThreadableLoader.h (81638 => 81639)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/WorkerThreadableLoader.h     2011-03-22 03:15:43 UTC (rev 81638)
+++ trunk/Source/WebCore/loader/WorkerThreadableLoader.h        2011-03-22 03:28:03 UTC (rev 81639)
</span><span class="lines">@@ -98,7 +98,7 @@
</span><span class="cx">         class MainThreadBridge : public ThreadableLoaderClient {
</span><span class="cx">         public:
</span><span class="cx">             // All executed on the worker context's thread.
</span><del>-            MainThreadBridge(PassRefPtr<ThreadableLoaderClientWrapper>, WorkerLoaderProxy&, const String& taskMode, const ResourceRequest&, const ThreadableLoaderOptions&);
</del><ins>+            MainThreadBridge(PassRefPtr<ThreadableLoaderClientWrapper>, WorkerLoaderProxy&, const String& taskMode, const ResourceRequest&, const ThreadableLoaderOptions&, const String& outgoingReferrer);
</ins><span class="cx">             void cancel();
</span><span class="cx">             void destroy();
</span><span class="cx"> 
</span><span class="lines">@@ -110,7 +110,7 @@
</span><span class="cx">             static void mainThreadDestroy(ScriptExecutionContext*, MainThreadBridge*);
</span><span class="cx">             ~MainThreadBridge();
</span><span class="cx"> 
</span><del>-            static void mainThreadCreateLoader(ScriptExecutionContext*, MainThreadBridge*, PassOwnPtr<CrossThreadResourceRequestData>, ThreadableLoaderOptions);
</del><ins>+            static void mainThreadCreateLoader(ScriptExecutionContext*, MainThreadBridge*, PassOwnPtr<CrossThreadResourceRequestData>, ThreadableLoaderOptions, const String& outgoingReferrer);
</ins><span class="cx">             static void mainThreadCancel(ScriptExecutionContext*, MainThreadBridge*);
</span><span class="cx">             virtual void didSendData(unsigned long long bytesSent, unsigned long long totalBytesToBeSent);
</span><span class="cx">             virtual void didReceiveResponse(const ResourceResponse&);
</span></span></pre>
</div>
</div>

</body>
</html>