1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chromecast/browser/devtools/cast_dev_tools_delegate.h"
7 #include "base/files/file_path.h"
8 #include "base/macros.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "content/public/browser/devtools_agent_host.h"
11 #include "content/public/browser/devtools_target.h"
12 #include "content/public/browser/favicon_status.h"
13 #include "content/public/browser/navigation_entry.h"
14 #include "content/public/browser/render_view_host.h"
15 #include "content/public/browser/web_contents.h"
16 #include "content/public/browser/web_contents_delegate.h"
17 #include "grit/shell_resources.h"
18 #include "ui/base/resource/resource_bundle.h"
20 namespace chromecast
{
25 const char kTargetTypePage
[] = "page";
26 const char kTargetTypeServiceWorker
[] = "service_worker";
27 const char kTargetTypeSharedWorker
[] = "worker";
28 const char kTargetTypeOther
[] = "other";
30 class Target
: public content::DevToolsTarget
{
32 explicit Target(scoped_refptr
<content::DevToolsAgentHost
> agent_host
);
34 virtual std::string
GetId() const override
{ return agent_host_
->GetId(); }
35 virtual std::string
GetParentId() const override
{ return std::string(); }
36 virtual std::string
GetType() const override
{
37 switch (agent_host_
->GetType()) {
38 case content::DevToolsAgentHost::TYPE_WEB_CONTENTS
:
39 return kTargetTypePage
;
40 case content::DevToolsAgentHost::TYPE_SERVICE_WORKER
:
41 return kTargetTypeServiceWorker
;
42 case content::DevToolsAgentHost::TYPE_SHARED_WORKER
:
43 return kTargetTypeSharedWorker
;
47 return kTargetTypeOther
;
49 virtual std::string
GetTitle() const override
{
50 return agent_host_
->GetTitle();
52 virtual std::string
GetDescription() const override
{ return std::string(); }
53 virtual GURL
GetURL() const override
{
54 return agent_host_
->GetURL();
56 virtual GURL
GetFaviconURL() const override
{ return favicon_url_
; }
57 virtual base::TimeTicks
GetLastActivityTime() const override
{
58 return last_activity_time_
;
60 virtual bool IsAttached() const override
{
61 return agent_host_
->IsAttached();
63 virtual scoped_refptr
<content::DevToolsAgentHost
> GetAgentHost()
67 virtual bool Activate() const override
{
68 return agent_host_
->Activate();
70 virtual bool Close() const override
{
71 return agent_host_
->Close();
75 scoped_refptr
<content::DevToolsAgentHost
> agent_host_
;
77 base::TimeTicks last_activity_time_
;
79 DISALLOW_COPY_AND_ASSIGN(Target
);
82 Target::Target(scoped_refptr
<content::DevToolsAgentHost
> agent_host
)
83 : agent_host_(agent_host
) {
84 if (content::WebContents
* web_contents
= agent_host_
->GetWebContents()) {
85 content::NavigationController
& controller
= web_contents
->GetController();
86 content::NavigationEntry
* entry
= controller
.GetActiveEntry();
87 if (entry
!= NULL
&& entry
->GetURL().is_valid())
88 favicon_url_
= entry
->GetFavicon().url
;
89 last_activity_time_
= web_contents
->GetLastActiveTime();
95 // CastDevToolsDelegate -----------------------------------------------------
97 CastDevToolsDelegate::CastDevToolsDelegate() {
100 CastDevToolsDelegate::~CastDevToolsDelegate() {
103 std::string
CastDevToolsDelegate::GetDiscoveryPageHTML() {
104 #if defined(OS_ANDROID)
105 return std::string();
107 return ResourceBundle::GetSharedInstance().GetRawDataResource(
108 IDR_CAST_SHELL_DEVTOOLS_DISCOVERY_PAGE
).as_string();
109 #endif // defined(OS_ANDROID)
112 bool CastDevToolsDelegate::BundlesFrontendResources() {
113 #if defined(OS_ANDROID)
117 #endif // defined(OS_ANDROID)
120 base::FilePath
CastDevToolsDelegate::GetDebugFrontendDir() {
121 return base::FilePath();
124 scoped_ptr
<net::StreamListenSocket
>
125 CastDevToolsDelegate::CreateSocketForTethering(
126 net::StreamListenSocket::Delegate
* delegate
,
128 return scoped_ptr
<net::StreamListenSocket
>();
131 // CastDevToolsManagerDelegate -----------------------------------------------
133 CastDevToolsManagerDelegate::CastDevToolsManagerDelegate() {
136 CastDevToolsManagerDelegate::~CastDevToolsManagerDelegate() {
139 base::DictionaryValue
* CastDevToolsManagerDelegate::HandleCommand(
140 content::DevToolsAgentHost
* agent_host
,
141 base::DictionaryValue
* command
) {
145 std::string
CastDevToolsManagerDelegate::GetPageThumbnailData(
150 scoped_ptr
<content::DevToolsTarget
>
151 CastDevToolsManagerDelegate::CreateNewTarget(const GURL
& url
) {
152 return scoped_ptr
<content::DevToolsTarget
>();
155 void CastDevToolsManagerDelegate::EnumerateTargets(TargetCallback callback
) {
157 content::DevToolsAgentHost::List agents
=
158 content::DevToolsAgentHost::GetOrCreateAll();
159 for (content::DevToolsAgentHost::List::iterator it
= agents
.begin();
160 it
!= agents
.end(); ++it
) {
161 targets
.push_back(new Target(*it
));
163 callback
.Run(targets
);
167 } // namespace chromecast