diff options
author | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-22 20:34:25 +0000 |
---|---|---|
committer | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-01-22 20:34:25 +0000 |
commit | 100a0095898381f0efb3d441a7f533ed96923042 (patch) | |
tree | e9dd922e4e4a20f2dca067e794e5b489b9bf2d2d /chrome/renderer | |
parent | 6d2721fbdbddd4d35616d9b7774945a3cf42375b (diff) | |
download | chromium_src-100a0095898381f0efb3d441a7f533ed96923042.zip chromium_src-100a0095898381f0efb3d441a7f533ed96923042.tar.gz chromium_src-100a0095898381f0efb3d441a7f533ed96923042.tar.bz2 |
Refactored code to allow associating workers with multiple renderers.
SharedWorkers now gracefully handle http auth requests after their
initial window has closed.
BUG=27660
TEST=WorkerHttpAuth,SharedWorkerHttpAuth uitests
Review URL: http://codereview.chromium.org/509016
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@36888 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/render_view.cc | 3 | ||||
-rw-r--r-- | chrome/renderer/websharedworker_proxy.cc | 3 | ||||
-rw-r--r-- | chrome/renderer/websharedworker_proxy.h | 1 | ||||
-rw-r--r-- | chrome/renderer/webworker_base.cc | 12 | ||||
-rw-r--r-- | chrome/renderer/webworker_base.h | 5 | ||||
-rw-r--r-- | chrome/renderer/webworker_proxy.cc | 4 |
6 files changed, 23 insertions, 5 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc index 9b6c758..d98d90a 100644 --- a/chrome/renderer/render_view.cc +++ b/chrome/renderer/render_view.cc @@ -1913,11 +1913,12 @@ WebSharedWorker* RenderView::createSharedWorker( int route_id = MSG_ROUTING_NONE; bool url_mismatch = false; Send(new ViewHostMsg_LookupSharedWorker( - url, name, document_id, &route_id, &url_mismatch)); + url, name, document_id, routing_id_, &route_id, &url_mismatch)); if (url_mismatch) { return NULL; } else { return new WebSharedWorkerProxy(RenderThread::current(), + document_id, route_id, routing_id_); } diff --git a/chrome/renderer/websharedworker_proxy.cc b/chrome/renderer/websharedworker_proxy.cc index 1d5425f..c6741c1 100644 --- a/chrome/renderer/websharedworker_proxy.cc +++ b/chrome/renderer/websharedworker_proxy.cc @@ -10,9 +10,10 @@ #include "third_party/WebKit/WebKit/chromium/public/WebURL.h" WebSharedWorkerProxy::WebSharedWorkerProxy(ChildThread* child_thread, + unsigned long long document_id, int route_id, int render_view_route_id) - : WebWorkerBase(child_thread, route_id, render_view_route_id), + : WebWorkerBase(child_thread, document_id, route_id, render_view_route_id), connect_listener_(NULL) { } diff --git a/chrome/renderer/websharedworker_proxy.h b/chrome/renderer/websharedworker_proxy.h index c3143db..4a93ff6 100644 --- a/chrome/renderer/websharedworker_proxy.h +++ b/chrome/renderer/websharedworker_proxy.h @@ -22,6 +22,7 @@ class WebSharedWorkerProxy : public WebKit::WebSharedWorker, public: // If the worker not loaded yet, route_id == MSG_ROUTING_NONE WebSharedWorkerProxy(ChildThread* child_thread, + unsigned long long document_id, int route_id, int render_view_route_id); diff --git a/chrome/renderer/webworker_base.cc b/chrome/renderer/webworker_base.cc index e32026c..e78ef64 100644 --- a/chrome/renderer/webworker_base.cc +++ b/chrome/renderer/webworker_base.cc @@ -19,11 +19,13 @@ using WebKit::WebWorkerClient; WebWorkerBase::WebWorkerBase( ChildThread* child_thread, + unsigned long long document_id, int route_id, int render_view_route_id) : route_id_(route_id), render_view_route_id_(render_view_route_id), - child_thread_(child_thread) { + child_thread_(child_thread), + document_id_(document_id) { if (route_id_ != MSG_ROUTING_NONE) child_thread_->AddRoute(route_id_, this); } @@ -54,8 +56,14 @@ void WebWorkerBase::CreateWorkerContext(const GURL& script_url, const string16& user_agent, const string16& source_code) { DCHECK(route_id_ == MSG_ROUTING_NONE); + ViewHostMsg_CreateWorker_Params params; + params.url = script_url; + params.is_shared = is_shared; + params.name = name; + params.document_id = document_id_; + params.render_view_route_id = render_view_route_id_; IPC::Message* create_message = new ViewHostMsg_CreateWorker( - script_url, is_shared, name, render_view_route_id_, &route_id_); + params, &route_id_); child_thread_->Send(create_message); if (route_id_ == MSG_ROUTING_NONE) return; diff --git a/chrome/renderer/webworker_base.h b/chrome/renderer/webworker_base.h index fe5becc..6c031c8 100644 --- a/chrome/renderer/webworker_base.h +++ b/chrome/renderer/webworker_base.h @@ -20,6 +20,7 @@ class GURL; class WebWorkerBase : public IPC::Channel::Listener { public: WebWorkerBase(ChildThread* child_thread, + unsigned long long document_id, int route_id, int render_view_route_id); @@ -61,6 +62,10 @@ class WebWorkerBase : public IPC::Channel::Listener { ChildThread* child_thread_; private: + // ID of our parent document (used to shutdown workers when the parent + // document is detached). + unsigned long long document_id_; + // Stores messages that were sent before the StartWorkerContext message. std::vector<IPC::Message*> queued_messages_; }; diff --git a/chrome/renderer/webworker_proxy.cc b/chrome/renderer/webworker_proxy.cc index fdcc9f1..553a3ac 100644 --- a/chrome/renderer/webworker_proxy.cc +++ b/chrome/renderer/webworker_proxy.cc @@ -22,8 +22,10 @@ WebWorkerProxy::WebWorkerProxy( WebWorkerClient* client, ChildThread* child_thread, int render_view_route_id) - : WebWorkerBase(child_thread, MSG_ROUTING_NONE, render_view_route_id), + : WebWorkerBase(child_thread, 0, MSG_ROUTING_NONE, render_view_route_id), client_(client) { + // TODO(atwilson): Change to pass in a real document_id when we support nested + // workers. } WebWorkerProxy::~WebWorkerProxy() { |