summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authoratwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-28 01:28:49 +0000
committeratwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-01-28 01:28:49 +0000
commit0791d3a25978f15adfe3ddc073850f7ce2bd158e (patch)
tree857cf4f343edff2ea739571384246af4c7cbc4ae /chrome/renderer
parent26426a2af6a18a8e29bdf1eb09bee9f073304d1b (diff)
downloadchromium_src-0791d3a25978f15adfe3ddc073850f7ce2bd158e.zip
chromium_src-0791d3a25978f15adfe3ddc073850f7ce2bd158e.tar.gz
chromium_src-0791d3a25978f15adfe3ddc073850f7ce2bd158e.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 Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=36888 Reverted and reopened due to valgrind failures. Review URL: http://codereview.chromium.org/509016 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@37365 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/render_view.cc3
-rw-r--r--chrome/renderer/websharedworker_proxy.cc3
-rw-r--r--chrome/renderer/websharedworker_proxy.h1
-rw-r--r--chrome/renderer/webworker_base.cc12
-rw-r--r--chrome/renderer/webworker_base.h5
-rw-r--r--chrome/renderer/webworker_proxy.cc4
6 files changed, 23 insertions, 5 deletions
diff --git a/chrome/renderer/render_view.cc b/chrome/renderer/render_view.cc
index 8a718db..4c74a61 100644
--- a/chrome/renderer/render_view.cc
+++ b/chrome/renderer/render_view.cc
@@ -1925,11 +1925,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() {