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 de97cc89a930178a758cb983640bd908b83933f4..f349c0ab3b0c2d2f949d2978edfe834563b3a9cc 100644 |
--- a/content/browser/devtools/protocol/service_worker_handler.cc |
+++ b/content/browser/devtools/protocol/service_worker_handler.cc |
@@ -22,6 +22,7 @@ |
#include "content/public/browser/render_frame_host.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/browser/storage_partition.h" |
+#include "content/public/browser/web_contents.h" |
#include "content/public/common/push_messaging_status.h" |
#include "url/gurl.h" |
@@ -81,6 +82,30 @@ const std::string GetVersionStatusString( |
scoped_refptr<ServiceWorkerVersion> CreateVersionDictionaryValue( |
const ServiceWorkerVersionInfo& version_info) { |
+ std::vector<std::string> clients; |
+ for (const auto& client : version_info.clients) { |
+ int render_process_id = client.second.process_id; |
+ int render_frame_id = client.second.frame_id; |
+ int shared_worker_route_id = client.second.shared_worker_route_id; |
+ if (render_frame_id != MSG_ROUTING_NONE) { |
+ RenderFrameHostImpl* render_frame_host = |
+ RenderFrameHostImpl::FromID(render_process_id, render_frame_id); |
+ WebContents* web_contents = |
+ WebContents::FromRenderFrameHost(render_frame_host); |
+ scoped_refptr<DevToolsAgentHost> agent_host( |
+ DevToolsAgentHost::GetOrCreateFor(web_contents)); |
+ if (agent_host) { |
+ clients.push_back(agent_host->GetId()); |
+ } |
nhiroki
2015/06/12 02:11:27
nit: {} is not necessary
horo
2015/06/12 04:19:18
Done.
|
+ } else if (shared_worker_route_id != MSG_ROUTING_NONE) { |
+ scoped_refptr<DevToolsAgentHost> agent_host( |
+ DevToolsAgentHost::GetForWorker(render_process_id, |
+ shared_worker_route_id)); |
+ if (agent_host) { |
+ clients.push_back(agent_host->GetId()); |
+ } |
nhiroki
2015/06/12 02:11:27
ditto.
horo
2015/06/12 04:19:18
Done.
|
+ } |
+ } |
scoped_refptr<ServiceWorkerVersion> version( |
ServiceWorkerVersion::Create() |
->set_version_id(base::Int64ToString(version_info.version_id)) |
@@ -93,7 +118,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_controlled_clients(clients)); |
return version; |
} |
@@ -181,6 +207,27 @@ Response CreateInvalidVersionIdErrorResponse() { |
return Response::InternalError("Invalid version ID"); |
} |
+const std::string GetDevToolsAgentHostTypeString( |
+ content::DevToolsAgentHost::Type type) { |
+ switch (type) { |
+ case DevToolsAgentHost::TYPE_WEB_CONTENTS: |
+ return "web_contents"; |
+ case DevToolsAgentHost::TYPE_FRAME: |
+ return "frame"; |
+ case DevToolsAgentHost::TYPE_SHARED_WORKER: |
+ return "shared_worker"; |
+ case DevToolsAgentHost::TYPE_SERVICE_WORKER: |
+ return "service_worker"; |
+ case DevToolsAgentHost::TYPE_EXTERNAL: |
+ return "external"; |
+ case DevToolsAgentHost::TYPE_BROWSER: |
+ return "browser"; |
+ default: |
+ NOTREACHED() << type; |
+ } |
+ return ""; |
+} |
+ |
} // namespace |
ServiceWorkerHandler::ServiceWorkerHandler() |
@@ -397,11 +444,29 @@ Response ServiceWorkerHandler::DeliverPushMessage( |
return Response::OK(); |
} |
+// TODO(horo): Remove this. |
nhiroki
2015/06/12 02:11:27
nit: bug link
horo
2015/06/12 04:19:18
Done.
|
Response ServiceWorkerHandler::GetTargetInfo(DevToolsCommandId command_id, |
const std::string& target_id) { |
return Response::InternalError("Not implemented yet"); |
} |
+Response ServiceWorkerHandler::GetTargetInfo( |
+ const std::string& target_id, |
+ scoped_refptr<TargetInfo>* target_info) { |
+ scoped_refptr<DevToolsAgentHost> agent_host( |
+ DevToolsAgentHost::GetForId(target_id)); |
+ if (!agent_host) { |
+ return Response::InvalidParams("targetId"); |
+ } |
nhiroki
2015/06/12 02:11:27
nit: {}
horo
2015/06/12 04:19:18
Done.
|
+ *target_info = |
+ TargetInfo::Create() |
+ ->set_id(agent_host->GetId()) |
+ ->set_type(GetDevToolsAgentHostTypeString(agent_host->GetType())) |
+ ->set_title(agent_host->GetTitle()) |
+ ->set_url(agent_host->GetURL().spec()); |
+ return Response::OK(); |
+} |
+ |
Response ServiceWorkerHandler::ActivateTarget(const std::string& target_id) { |
scoped_refptr<DevToolsAgentHost> agent_host( |
DevToolsAgentHost::GetForId(target_id)); |