| Index: content/worker/websharedworker_stub.cc | 
| diff --git a/content/worker/websharedworker_stub.cc b/content/worker/websharedworker_stub.cc | 
| index 4f6dd933c6fac7a5897f7a12f8f26ef64d61dfb8..5f40bab0e49f1ee78d7e63552eb9f026e8e3f75a 100644 | 
| --- a/content/worker/websharedworker_stub.cc | 
| +++ b/content/worker/websharedworker_stub.cc | 
| @@ -19,14 +19,18 @@ | 
| namespace content { | 
|  | 
| WebSharedWorkerStub::WebSharedWorkerStub( | 
| +    const GURL& url, | 
| const base::string16& name, | 
| +    const base::string16& content_security_policy, | 
| +    blink::WebContentSecurityPolicyType security_policy_type, | 
| int route_id, | 
| const WorkerAppCacheInitInfo& appcache_init_info) | 
| : route_id_(route_id), | 
| appcache_init_info_(appcache_init_info), | 
| client_(route_id, this), | 
| name_(name), | 
| -      started_(false) { | 
| +      started_(false), | 
| +      worker_script_loaded_(false) { | 
|  | 
| WorkerThread* worker_thread = WorkerThread::current(); | 
| DCHECK(worker_thread); | 
| @@ -94,30 +98,21 @@ void WebSharedWorkerStub::OnStartWorkerContext( | 
| content_security_policy, policy_type, 0); | 
| started_ = true; | 
| url_ = url; | 
| - | 
| -  // Process any pending connections. | 
| -  for (PendingConnectInfoList::const_iterator iter = pending_connects_.begin(); | 
| -       iter != pending_connects_.end(); | 
| -       ++iter) { | 
| -    OnConnect(iter->first, iter->second); | 
| -  } | 
| -  pending_connects_.clear(); | 
| } | 
|  | 
| void WebSharedWorkerStub::OnConnect(int sent_message_port_id, int routing_id) { | 
| -  if (started_) { | 
| -    blink::WebMessagePortChannel* channel = | 
| -        new WebMessagePortChannelImpl(routing_id, | 
| -                                      sent_message_port_id, | 
| -                                      base::MessageLoopProxy::current().get()); | 
| +  blink::WebMessagePortChannel* channel = | 
| +      new WebMessagePortChannelImpl(routing_id, | 
| +                                    sent_message_port_id, | 
| +                                    base::MessageLoopProxy::current().get()); | 
| +  if (started_ && worker_script_loaded_) { | 
| impl_->connect(channel); | 
| } else { | 
| // If two documents try to load a SharedWorker at the same time, the | 
| // WorkerMsg_Connect for one of the documents can come in before the | 
| // worker is started. Just queue up the connect and deliver it once the | 
| // worker starts. | 
| -    PendingConnectInfo pending_connect(sent_message_port_id, routing_id); | 
| -    pending_connects_.push_back(pending_connect); | 
| +    pending_channels_.push_back(channel); | 
| } | 
| } | 
|  | 
| @@ -129,4 +124,19 @@ void WebSharedWorkerStub::OnTerminateWorkerContext() { | 
| started_ = false; | 
| } | 
|  | 
| +void WebSharedWorkerStub::WorkerScriptLoaded() { | 
| +  worker_script_loaded_ = true; | 
| +  // Process any pending connections. | 
| +  for (PendingChannelList::const_iterator iter = pending_channels_.begin(); | 
| +       iter != pending_channels_.end(); | 
| +       ++iter) { | 
| +    impl_->connect(*iter); | 
| +  } | 
| +  pending_channels_.clear(); | 
| +} | 
| + | 
| +void WebSharedWorkerStub::WorkerScriptLoadFailed() { | 
| +  // FIXME(horo): Implement this. | 
| +} | 
| + | 
| }  // namespace content | 
|  |