Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1744)

Unified Diff: chrome/browser/worker_host/worker_process_host.cc

Issue 340036: Initial pass of shared workers renderer-side code (Closed)
Patch Set: Changes reflecting review feedback Created 11 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
}
}

Powered by Google App Engine
This is Rietveld 408576698