| Index: chrome/browser/worker_host/worker_process_host.cc
|
| diff --git a/chrome/browser/worker_host/worker_process_host.cc b/chrome/browser/worker_host/worker_process_host.cc
|
| index 094a2fd364b999688828ff3f96c74f20dee7e2bc..54446b3db8bf6c94f4adbfefdd06019ed3a82a98 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;
|
| }
|
| }
|
|
|
|
|