Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(382)

Side by Side Diff: chrome/browser/devtools/devtools_target_impl.cc

Issue 2289773002: Revert of DevTools: merge devtools target with devtools host, part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/devtools/devtools_target_impl.h" 5 #include "chrome/browser/devtools/devtools_target_impl.h"
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h" 8 #include "base/strings/utf_string_conversions.h"
9 #include "chrome/browser/devtools/devtools_window.h" 9 #include "chrome/browser/devtools/devtools_window.h"
10 #include "chrome/browser/extensions/extension_tab_util.h" 10 #include "chrome/browser/extensions/extension_tab_util.h"
(...skipping 10 matching lines...) Expand all
21 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
22 #include "extensions/browser/extension_host.h" 22 #include "extensions/browser/extension_host.h"
23 #include "extensions/browser/extension_registry.h" 23 #include "extensions/browser/extension_registry.h"
24 #include "extensions/browser/process_manager.h" 24 #include "extensions/browser/process_manager.h"
25 #include "extensions/common/constants.h" 25 #include "extensions/common/constants.h"
26 26
27 using content::BrowserThread; 27 using content::BrowserThread;
28 using content::DevToolsAgentHost; 28 using content::DevToolsAgentHost;
29 using content::WebContents; 29 using content::WebContents;
30 30
31 const char DevToolsTargetImpl::kTargetTypeApp[] = "app";
32 const char DevToolsTargetImpl::kTargetTypeBackgroundPage[] = "background_page";
33 const char DevToolsTargetImpl::kTargetTypePage[] = "page";
34 const char DevToolsTargetImpl::kTargetTypeWorker[] = "worker";
35 const char DevToolsTargetImpl::kTargetTypeWebView[] = "webview";
36 const char DevToolsTargetImpl::kTargetTypeIFrame[] = "iframe";
37 const char DevToolsTargetImpl::kTargetTypeNode[] = "node";
38 const char DevToolsTargetImpl::kTargetTypeOther[] = "other";
39 const char DevToolsTargetImpl::kTargetTypeServiceWorker[] = "service_worker";
40
41 namespace {
42
43 // WebContentsTarget --------------------------------------------------------
44
45 class WebContentsTarget : public DevToolsTargetImpl {
46 public:
47 WebContentsTarget(WebContents* web_contents, bool is_tab);
48
49 // DevToolsTargetImpl overrides.
50 int GetTabId() const override;
51 std::string GetExtensionId() const override;
52 void Inspect(Profile* profile) const override;
53
54 private:
55 int tab_id_;
56 std::string extension_id_;
57 };
58
59 WebContentsTarget::WebContentsTarget(WebContents* web_contents, bool is_tab)
60 : DevToolsTargetImpl(DevToolsAgentHost::GetOrCreateFor(web_contents)),
61 tab_id_(-1) {
62 set_type(kTargetTypeOther);
63
64 guest_view::GuestViewBase* guest =
65 guest_view::GuestViewBase::FromWebContents(web_contents);
66 WebContents* guest_contents = guest ? guest->embedder_web_contents() : NULL;
67 if (guest_contents) {
68 set_type(kTargetTypeWebView);
69 set_parent_id(DevToolsAgentHost::GetOrCreateFor(guest_contents)->GetId());
70 return;
71 }
72
73 if (is_tab) {
74 set_type(kTargetTypePage);
75 tab_id_ = extensions::ExtensionTabUtil::GetTabId(web_contents);
76 return;
77 }
78
79 const extensions::Extension* extension = extensions::ExtensionRegistry::Get(
80 web_contents->GetBrowserContext())->enabled_extensions().GetByID(
81 GetURL().host());
82 if (!extension)
83 return;
84
85 Profile* profile =
86 Profile::FromBrowserContext(web_contents->GetBrowserContext());
87 if (!profile)
88 return;
89 set_title(extension->name());
90 extensions::ExtensionHost* extension_host =
91 extensions::ProcessManager::Get(profile)
92 ->GetBackgroundHostForExtension(extension->id());
93 if (extension_host &&
94 extension_host->host_contents() == web_contents) {
95 set_type(kTargetTypeBackgroundPage);
96 extension_id_ = extension->id();
97 } else if (extension->is_hosted_app()
98 || extension->is_legacy_packaged_app()
99 || extension->is_platform_app()) {
100 set_type(kTargetTypeApp);
101 }
102 set_favicon_url(extensions::ExtensionIconSource::GetIconURL(
103 extension, extension_misc::EXTENSION_ICON_SMALLISH,
104 ExtensionIconSet::MATCH_BIGGER, false, NULL));
105 }
106
107 int WebContentsTarget::GetTabId() const {
108 return tab_id_;
109 }
110
111 std::string WebContentsTarget::GetExtensionId() const {
112 return extension_id_;
113 }
114
115 void WebContentsTarget::Inspect(Profile* profile) const {
116 WebContents* web_contents = GetWebContents();
117 if (!web_contents)
118 return;
119 DevToolsWindow::OpenDevToolsWindow(web_contents);
120 }
121
122 // FrameTarget ----------------------------------------------------------------
123
124 class FrameTarget : public DevToolsTargetImpl {
125 public:
126 explicit FrameTarget(scoped_refptr<DevToolsAgentHost> agent_host);
127
128 // DevToolsTargetImpl overrides:
129 void Inspect(Profile* profile) const override;
130 };
131
132 FrameTarget::FrameTarget(scoped_refptr<DevToolsAgentHost> agent_host)
133 : DevToolsTargetImpl(agent_host) {
134 set_type(kTargetTypeIFrame);
135 WebContents* wc = agent_host->GetWebContents();
136 DCHECK(DevToolsAgentHost::GetOrCreateFor(wc).get() != agent_host.get());
137 set_parent_id(DevToolsAgentHost::GetOrCreateFor(wc)->GetId());
138 }
139
140 void FrameTarget::Inspect(Profile* profile) const {
141 DevToolsWindow::OpenDevToolsWindow(profile, GetAgentHost());
142 }
143
144 // WorkerTarget ----------------------------------------------------------------
145
146 class WorkerTarget : public DevToolsTargetImpl {
147 public:
148 explicit WorkerTarget(scoped_refptr<DevToolsAgentHost> agent_host);
149
150 // DevToolsTargetImpl overrides:
151 void Inspect(Profile* profile) const override;
152 };
153
154 WorkerTarget::WorkerTarget(scoped_refptr<DevToolsAgentHost> agent_host)
155 : DevToolsTargetImpl(agent_host) {
156 switch (agent_host->GetType()) {
157 case DevToolsAgentHost::TYPE_SHARED_WORKER:
158 set_type(kTargetTypeWorker);
159 break;
160 case DevToolsAgentHost::TYPE_SERVICE_WORKER:
161 set_type(kTargetTypeServiceWorker);
162 break;
163 default:
164 NOTREACHED();
165 }
166 }
167
168 void WorkerTarget::Inspect(Profile* profile) const {
169 DevToolsWindow::OpenDevToolsWindowForWorker(profile, GetAgentHost());
170 }
171
172 } // namespace
173
174 // DevToolsTargetImpl ----------------------------------------------------------
175
31 DevToolsTargetImpl::~DevToolsTargetImpl() { 176 DevToolsTargetImpl::~DevToolsTargetImpl() {
32 } 177 }
33 178
34 DevToolsTargetImpl::DevToolsTargetImpl( 179 DevToolsTargetImpl::DevToolsTargetImpl(
35 scoped_refptr<DevToolsAgentHost> agent_host) 180 scoped_refptr<DevToolsAgentHost> agent_host)
36 : devtools_discovery::BasicTargetDescriptor(agent_host) { 181 : devtools_discovery::BasicTargetDescriptor(agent_host) {
37 } 182 }
38 183
184 int DevToolsTargetImpl::GetTabId() const {
185 return -1;
186 }
187
188 WebContents* DevToolsTargetImpl::GetWebContents() const {
189 return GetAgentHost()->GetWebContents();
190 }
191
192 std::string DevToolsTargetImpl::GetExtensionId() const {
193 return std::string();
194 }
195
196 void DevToolsTargetImpl::Inspect(Profile* /*profile*/) const {
197 }
198
199 void DevToolsTargetImpl::Reload() const {
200 }
201
202 // static
203 std::unique_ptr<DevToolsTargetImpl> DevToolsTargetImpl::CreateForTab(
204 content::WebContents* web_contents) {
205 // TODO(dgozman): these checks should not be necessary. See
206 // http://crbug.com/489664.
207 if (!web_contents)
208 return nullptr;
209 if (!DevToolsAgentHost::GetOrCreateFor(web_contents))
210 return nullptr;
211 return std::unique_ptr<DevToolsTargetImpl>(
212 new WebContentsTarget(web_contents, true));
213 }
214
39 // static 215 // static
40 std::vector<DevToolsTargetImpl*> DevToolsTargetImpl::EnumerateAll() { 216 std::vector<DevToolsTargetImpl*> DevToolsTargetImpl::EnumerateAll() {
41 DCHECK_CURRENTLY_ON(BrowserThread::UI); 217 DCHECK_CURRENTLY_ON(BrowserThread::UI);
42 218
219 std::set<WebContents*> tab_web_contents;
220 for (TabContentsIterator it; !it.done(); it.Next())
221 tab_web_contents.insert(*it);
222
43 std::vector<DevToolsTargetImpl*> result; 223 std::vector<DevToolsTargetImpl*> result;
44 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll(); 224 DevToolsAgentHost::List agents = DevToolsAgentHost::GetOrCreateAll();
45 for (DevToolsAgentHost::List::iterator it = agents.begin(); 225 for (DevToolsAgentHost::List::iterator it = agents.begin();
46 it != agents.end(); ++it) { 226 it != agents.end(); ++it) {
47 result.push_back(new DevToolsTargetImpl(*it)); 227 DevToolsAgentHost* agent_host = (*it).get();
228 switch (agent_host->GetType()) {
229 case DevToolsAgentHost::TYPE_WEB_CONTENTS:
230 if (WebContents* web_contents = agent_host->GetWebContents()) {
231 const bool is_tab =
232 tab_web_contents.find(web_contents) != tab_web_contents.end();
233 result.push_back(new WebContentsTarget(web_contents, is_tab));
234 }
235 break;
236 case DevToolsAgentHost::TYPE_FRAME:
237 result.push_back(new FrameTarget(agent_host));
238 break;
239 case DevToolsAgentHost::TYPE_SHARED_WORKER:
240 result.push_back(new WorkerTarget(agent_host));
241 break;
242 case DevToolsAgentHost::TYPE_SERVICE_WORKER:
243 result.push_back(new WorkerTarget(agent_host));
244 break;
245 default:
246 break;
247 }
48 } 248 }
49 return result; 249 return result;
50 } 250 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/devtools_target_impl.h ('k') | chrome/browser/devtools/devtools_targets_ui.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698