diff options
author | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-30 18:11:47 +0000 |
---|---|---|
committer | atwilson@chromium.org <atwilson@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-30 18:11:47 +0000 |
commit | ab3505360bf6612d18915a39a0fec74b00642e82 (patch) | |
tree | 7a39d15a688b8e52c839fb9151851b2a37533ed0 /chrome/browser/worker_host | |
parent | 06b9e3b77773477b5ee889ded41d10741d6b0647 (diff) | |
download | chromium_src-ab3505360bf6612d18915a39a0fec74b00642e82.zip chromium_src-ab3505360bf6612d18915a39a0fec74b00642e82.tar.gz chromium_src-ab3505360bf6612d18915a39a0fec74b00642e82.tar.bz2 |
Initial pass of shared workers renderer-side code
Added initial interface hooks betweek WebKit code and renderer-side worker code.
The proper messages are generated to fire off a shared worker, but they are currently
ignored by the browser process.
BUG=26233
TEST=none (will enable layout tests when basic functionality available)
Review URL: http://codereview.chromium.org/340036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30599 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/worker_host')
-rw-r--r-- | chrome/browser/worker_host/worker_process_host.cc | 78 |
1 files changed, 49 insertions, 29 deletions
diff --git a/chrome/browser/worker_host/worker_process_host.cc b/chrome/browser/worker_host/worker_process_host.cc index 094a2fd..54446b3 100644 --- a/chrome/browser/worker_host/worker_process_host.cc +++ b/chrome/browser/worker_host/worker_process_host.cc @@ -144,7 +144,7 @@ void WorkerProcessHost::CreateWorker(const WorkerInstance& instance) { UpdateTitle(); instances_.back().sender->Send( - new ViewMsg_DedicatedWorkerCreated(instance.sender_route_id)); + new ViewMsg_WorkerCreated(instance.sender_route_id)); } bool WorkerProcessHost::FilterMessage(const IPC::Message& message, @@ -229,39 +229,59 @@ void WorkerProcessHost::RelayMessage( IPC::Message::Sender* sender, int route_id, CallbackWithReturnValue<int>::Type* next_route_id) { - if (message.type() != WorkerMsg_PostMessage::ID) { - IPC::Message* new_message = new IPC::Message(message); - new_message->set_routing_id(route_id); - sender->Send(new_message); - return; - } - // We want to send the receiver a routing id for the new channel, so - // crack the message first. - string16 msg; - std::vector<int> sent_message_port_ids; - std::vector<int> new_routing_ids; - if (!WorkerMsg_PostMessage::Read( - &message, &msg, &sent_message_port_ids, &new_routing_ids)) { - return; - } - DCHECK(sent_message_port_ids.size() == new_routing_ids.size()); + if (message.type() == WorkerMsg_PostMessage::ID) { + // We want to send the receiver a routing id for the new channel, so + // crack the message first. + string16 msg; + std::vector<int> sent_message_port_ids; + std::vector<int> new_routing_ids; + if (!WorkerMsg_PostMessage::Read( + &message, &msg, &sent_message_port_ids, &new_routing_ids)) { + return; + } + DCHECK(sent_message_port_ids.size() == new_routing_ids.size()); + + for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { + new_routing_ids[i] = next_route_id->Run(); + MessagePortDispatcher::GetInstance()->UpdateMessagePort( + sent_message_port_ids[i], sender, new_routing_ids[i], next_route_id); + } + + sender->Send(new WorkerMsg_PostMessage( + route_id, msg, sent_message_port_ids, new_routing_ids)); - for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { - new_routing_ids[i] = next_route_id->Run(); + // Send any queued messages to the sent message ports. We can only do this + // after sending the above message, since it's the one that sets up the + // message port route which the queued messages are sent to. + for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { + MessagePortDispatcher::GetInstance()-> + SendQueuedMessagesIfPossible(sent_message_port_ids[i]); + } + } else if (message.type() == WorkerMsg_Connect::ID) { + // Crack the SharedWorker Connect message to setup routing for the port. + int sent_message_port_id; + int new_routing_id; + if (!WorkerMsg_Connect::Read( + &message, &sent_message_port_id, &new_routing_id)) { + return; + } + new_routing_id = next_route_id->Run(); MessagePortDispatcher::GetInstance()->UpdateMessagePort( - sent_message_port_ids[i], sender, new_routing_ids[i], next_route_id); - } + sent_message_port_id, sender, new_routing_id, next_route_id); - sender->Send(new WorkerMsg_PostMessage( - route_id, msg, sent_message_port_ids, new_routing_ids)); + // Resend the message with the new routing id. + sender->Send(new WorkerMsg_Connect( + route_id, sent_message_port_id, new_routing_id)); - // Send any queued messages to the sent message ports. We can only do this - // after sending the above message, since it's the one that sets up the - // message port route which the queued messages are sent to. - for (size_t i = 0; i < sent_message_port_ids.size(); ++i) { - MessagePortDispatcher::GetInstance()-> - SendQueuedMessagesIfPossible(sent_message_port_ids[i]); + // Send any queued messages for the sent port. + MessagePortDispatcher::GetInstance()->SendQueuedMessagesIfPossible( + sent_message_port_id); + } else { + IPC::Message* new_message = new IPC::Message(message); + new_message->set_routing_id(route_id); + sender->Send(new_message); + return; } } |