| Index: content/browser/shared_worker/shared_worker_host.cc
 | 
| diff --git a/content/browser/shared_worker/shared_worker_host.cc b/content/browser/shared_worker/shared_worker_host.cc
 | 
| index a41e5b623355657c468ae26353c36bbf10d56413..d48a048ee3570ea3f90315e18a914ea5a98aca25 100644
 | 
| --- a/content/browser/shared_worker/shared_worker_host.cc
 | 
| +++ b/content/browser/shared_worker/shared_worker_host.cc
 | 
| @@ -6,8 +6,6 @@
 | 
|  
 | 
|  #include "base/metrics/histogram_macros.h"
 | 
|  #include "content/browser/devtools/shared_worker_devtools_manager.h"
 | 
| -#include "content/browser/message_port_message_filter.h"
 | 
| -#include "content/browser/message_port_service.h"
 | 
|  #include "content/browser/shared_worker/shared_worker_instance.h"
 | 
|  #include "content/browser/shared_worker/shared_worker_message_filter.h"
 | 
|  #include "content/browser/shared_worker/shared_worker_service_impl.h"
 | 
| @@ -57,6 +55,7 @@ SharedWorkerHost::SharedWorkerHost(SharedWorkerInstance* instance,
 | 
|        worker_render_filter_(filter),
 | 
|        worker_process_id_(filter->render_process_id()),
 | 
|        worker_route_id_(worker_route_id),
 | 
| +      next_connection_request_id_(1),
 | 
|        creation_time_(base::TimeTicks::Now()),
 | 
|        weak_factory_(this) {
 | 
|    DCHECK_CURRENTLY_ON(BrowserThread::IO);
 | 
| @@ -89,14 +88,18 @@ void SharedWorkerHost::Start(bool pause_on_start) {
 | 
|      info.filter()->Send(new ViewMsg_WorkerCreated(info.route_id()));
 | 
|  }
 | 
|  
 | 
| -bool SharedWorkerHost::FilterConnectionMessage(
 | 
| -    int route_id,
 | 
| -    int sent_message_port_id,
 | 
| -    SharedWorkerMessageFilter* incoming_filter) {
 | 
| -  if (!IsAvailable() || !HasFilter(incoming_filter, route_id))
 | 
| +bool SharedWorkerHost::SendConnectToWorker(int worker_route_id,
 | 
| +                                           const MessagePort& port,
 | 
| +                                           SharedWorkerMessageFilter* filter) {
 | 
| +  if (!IsAvailable() || !HasFilter(filter, worker_route_id))
 | 
|      return false;
 | 
|  
 | 
| -  Connect(route_id, sent_message_port_id, incoming_filter);
 | 
| +  int connection_request_id = next_connection_request_id_++;
 | 
| +
 | 
| +  SetConnectionRequestID(filter, worker_route_id, connection_request_id);
 | 
| +
 | 
| +  // Send the connect message with the new connection_request_id.
 | 
| +  Send(new WorkerMsg_Connect(worker_route_id_, connection_request_id, port));
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| @@ -155,9 +158,11 @@ void SharedWorkerHost::WorkerScriptLoadFailed() {
 | 
|      info.filter()->Send(new ViewMsg_WorkerScriptLoadFailed(info.route_id()));
 | 
|  }
 | 
|  
 | 
| -void SharedWorkerHost::WorkerConnected(int message_port_id) {
 | 
| +void SharedWorkerHost::WorkerConnected(int connection_request_id) {
 | 
| +  if (!instance_)
 | 
| +    return;
 | 
|    for (const FilterInfo& info : filters_) {
 | 
| -    if (info.message_port_id() != message_port_id)
 | 
| +    if (info.connection_request_id() != connection_request_id)
 | 
|        continue;
 | 
|      info.filter()->Send(new ViewMsg_WorkerConnected(info.route_id()));
 | 
|      return;
 | 
| @@ -242,32 +247,12 @@ bool SharedWorkerHost::HasFilter(SharedWorkerMessageFilter* filter,
 | 
|    return false;
 | 
|  }
 | 
|  
 | 
| -void SharedWorkerHost::Connect(int route_id,
 | 
| -                               int sent_message_port_id,
 | 
| -                               SharedWorkerMessageFilter* incoming_filter) {
 | 
| -  DCHECK(IsAvailable());
 | 
| -  DCHECK(HasFilter(incoming_filter, route_id));
 | 
| -  DCHECK(worker_render_filter_);
 | 
| -
 | 
| -  int new_routing_id = worker_render_filter_->GetNextRoutingID();
 | 
| -  MessagePortService::GetInstance()->UpdateMessagePort(
 | 
| -      sent_message_port_id,
 | 
| -      worker_render_filter_->message_port_message_filter(), new_routing_id);
 | 
| -  SetMessagePortID(incoming_filter, route_id, sent_message_port_id);
 | 
| -  Send(new WorkerMsg_Connect(worker_route_id_, sent_message_port_id,
 | 
| -                             new_routing_id));
 | 
| -
 | 
| -  // Send any queued messages for the sent port.
 | 
| -  MessagePortService::GetInstance()->SendQueuedMessagesIfPossible(
 | 
| -      sent_message_port_id);
 | 
| -}
 | 
| -
 | 
| -void SharedWorkerHost::SetMessagePortID(SharedWorkerMessageFilter* filter,
 | 
| -                                        int route_id,
 | 
| -                                        int message_port_id) {
 | 
| -  for (FilterInfo& info : filters_) {
 | 
| -    if (info.filter() == filter && info.route_id() == route_id) {
 | 
| -      info.set_message_port_id(message_port_id);
 | 
| +void SharedWorkerHost::SetConnectionRequestID(SharedWorkerMessageFilter* filter,
 | 
| +                                              int route_id,
 | 
| +                                              int connection_request_id) {
 | 
| +  for (FilterList::iterator i = filters_.begin(); i != filters_.end(); ++i) {
 | 
| +    if (i->filter() == filter && i->route_id() == route_id) {
 | 
| +      i->set_connection_request_id(connection_request_id);
 | 
|        return;
 | 
|      }
 | 
|    }
 | 
| 
 |