| Index: content/browser/devtools/protocol/service_worker_handler.cc | 
| diff --git a/content/browser/devtools/protocol/service_worker_handler.cc b/content/browser/devtools/protocol/service_worker_handler.cc | 
| index b2ac98ae250a91751e46c56ed4f7386a32ee8bde..1e50c9a30b43f7ad742fd8a86473dc751a2558ad 100644 | 
| --- a/content/browser/devtools/protocol/service_worker_handler.cc | 
| +++ b/content/browser/devtools/protocol/service_worker_handler.cc | 
| @@ -79,6 +79,13 @@ const std::string GetVersionStatusString( | 
|  | 
| scoped_refptr<ServiceWorkerVersion> CreateVersionDictionaryValue( | 
| const ServiceWorkerVersionInfo& version_info) { | 
| +  std::string workerId = ""; | 
| +  DevToolsAgentHostImpl* agent = | 
| +      ServiceWorkerDevToolsManager::GetInstance() | 
| +          ->GetDevToolsAgentHostForWorker(version_info.process_id, | 
| +                                          version_info.devtools_agent_route_id); | 
| +  if (agent) | 
| +    workerId = agent->GetId(); | 
| scoped_refptr<ServiceWorkerVersion> version( | 
| ServiceWorkerVersion::Create() | 
| ->set_version_id(base::Int64ToString(version_info.version_id)) | 
| @@ -91,7 +98,8 @@ scoped_refptr<ServiceWorkerVersion> CreateVersionDictionaryValue( | 
| ->set_script_last_modified( | 
| version_info.script_last_modified.ToDoubleT()) | 
| ->set_script_response_time( | 
| -              version_info.script_response_time.ToDoubleT())); | 
| +                version_info.script_response_time.ToDoubleT()) | 
| +          ->set_worker_id(workerId)); | 
| return version; | 
| } | 
|  | 
| @@ -338,7 +346,6 @@ Response ServiceWorkerHandler::InspectWorker(const std::string& version_id) { | 
| return Response::OK(); | 
| if (!context_) | 
| return CreateContextErrorResoponse(); | 
| - | 
| int64 id = 0; | 
| if (!base::StringToInt64(version_id, &id)) | 
| return CreateInvalidVersionIdErrorResoponse(); | 
| @@ -350,6 +357,22 @@ Response ServiceWorkerHandler::InspectWorker(const std::string& version_id) { | 
| return Response::OK(); | 
| } | 
|  | 
| +Response ServiceWorkerHandler::DetachWorker(const std::string& worker_id) { | 
| +  if (!enabled_) | 
| +    return Response::OK(); | 
| +  if (!context_) | 
| +    return CreateContextErrorResoponse(); | 
| +  auto it = attached_hosts_.find(worker_id); | 
| +  if (it == attached_hosts_.end()) | 
| +    return Response::OK();  // Already disconnected. | 
| +  scoped_refptr<ServiceWorkerDevToolsAgentHost> host(it->second); | 
| +  client_->WorkerTerminated( | 
| +      WorkerTerminatedParams::Create()->set_worker_id(worker_id)); | 
| +  host->DetachClient(); | 
| +  attached_hosts_.erase(worker_id); | 
| +  return Response::OK(); | 
| +} | 
| + | 
| Response ServiceWorkerHandler::SetDebugOnStart(bool debug_on_start) { | 
| ServiceWorkerDevToolsManager::GetInstance() | 
| ->set_debug_service_worker_on_start(debug_on_start); | 
|  |