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

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

Issue 2273063002: DevTools: remove DevToolsTargetDescriptor and its implementations, we are now based on devtools age… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebaselined 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_targets_ui.h" 5 #include "chrome/browser/devtools/devtools_targets_ui.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/memory/weak_ptr.h" 10 #include "base/memory/weak_ptr.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/strings/string_number_conversions.h" 13 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
15 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
16 #include "base/values.h" 16 #include "base/values.h"
17 #include "base/version.h" 17 #include "base/version.h"
18 #include "chrome/browser/devtools/device/devtools_android_bridge.h" 18 #include "chrome/browser/devtools/device/devtools_android_bridge.h"
19 #include "chrome/browser/devtools/devtools_target_impl.h"
20 #include "content/public/browser/browser_child_process_observer.h" 19 #include "content/public/browser/browser_child_process_observer.h"
21 #include "content/public/browser/browser_thread.h" 20 #include "content/public/browser/browser_thread.h"
22 #include "content/public/browser/child_process_data.h" 21 #include "content/public/browser/child_process_data.h"
22 #include "content/public/browser/devtools_agent_host.h"
23 #include "content/public/browser/notification_observer.h" 23 #include "content/public/browser/notification_observer.h"
24 #include "content/public/browser/notification_registrar.h" 24 #include "content/public/browser/notification_registrar.h"
25 #include "content/public/browser/notification_service.h" 25 #include "content/public/browser/notification_service.h"
26 #include "content/public/browser/notification_source.h" 26 #include "content/public/browser/notification_source.h"
27 #include "content/public/browser/notification_types.h" 27 #include "content/public/browser/notification_types.h"
28 #include "content/public/browser/worker_service.h" 28 #include "content/public/browser/worker_service.h"
29 #include "content/public/browser/worker_service_observer.h" 29 #include "content/public/browser/worker_service_observer.h"
30 #include "content/public/common/process_type.h" 30 #include "content/public/common/process_type.h"
31 #include "net/base/escape.h" 31 #include "net/base/escape.h"
32 32
33 using content::BrowserThread; 33 using content::BrowserThread;
34 using content::DevToolsAgentHost;
34 35
35 namespace { 36 namespace {
36 37
37 const char kTargetSourceField[] = "source"; 38 const char kTargetSourceField[] = "source";
38 const char kTargetSourceLocal[] = "local"; 39 const char kTargetSourceLocal[] = "local";
39 const char kTargetSourceRemote[] = "remote"; 40 const char kTargetSourceRemote[] = "remote";
40 41
41 const char kTargetIdField[] = "id"; 42 const char kTargetIdField[] = "id";
42 const char kTargetTypeField[] = "type"; 43 const char kTargetTypeField[] = "type";
43 const char kAttachedField[] = "attached"; 44 const char kAttachedField[] = "attached";
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 void ForceUpdate() override; 167 void ForceUpdate() override;
167 168
168 private: 169 private:
169 // content::NotificationObserver overrides. 170 // content::NotificationObserver overrides.
170 void Observe(int type, 171 void Observe(int type,
171 const content::NotificationSource& source, 172 const content::NotificationSource& source,
172 const content::NotificationDetails& details) override; 173 const content::NotificationDetails& details) override;
173 174
174 void ScheduleUpdate(); 175 void ScheduleUpdate();
175 void UpdateTargets(); 176 void UpdateTargets();
176 void SendTargets(const std::vector<DevToolsTargetImpl*>& targets); 177 void SendTargets(const DevToolsAgentHost::List& targets);
177 178
178 content::NotificationRegistrar notification_registrar_; 179 content::NotificationRegistrar notification_registrar_;
179 std::unique_ptr<CancelableTimer> timer_; 180 std::unique_ptr<CancelableTimer> timer_;
180 scoped_refptr<WorkerObserver> observer_; 181 scoped_refptr<WorkerObserver> observer_;
181 base::WeakPtrFactory<LocalTargetsUIHandler> weak_factory_; 182 base::WeakPtrFactory<LocalTargetsUIHandler> weak_factory_;
182 }; 183 };
183 184
184 LocalTargetsUIHandler::LocalTargetsUIHandler( 185 LocalTargetsUIHandler::LocalTargetsUIHandler(
185 const Callback& callback) 186 const Callback& callback)
186 : DevToolsTargetsUIHandler(kTargetSourceLocal, callback), 187 : DevToolsTargetsUIHandler(kTargetSourceLocal, callback),
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
219 void LocalTargetsUIHandler::ScheduleUpdate() { 220 void LocalTargetsUIHandler::ScheduleUpdate() {
220 const int kUpdateDelay = 100; 221 const int kUpdateDelay = 100;
221 timer_.reset( 222 timer_.reset(
222 new CancelableTimer( 223 new CancelableTimer(
223 base::Bind(&LocalTargetsUIHandler::UpdateTargets, 224 base::Bind(&LocalTargetsUIHandler::UpdateTargets,
224 base::Unretained(this)), 225 base::Unretained(this)),
225 base::TimeDelta::FromMilliseconds(kUpdateDelay))); 226 base::TimeDelta::FromMilliseconds(kUpdateDelay)));
226 } 227 }
227 228
228 void LocalTargetsUIHandler::UpdateTargets() { 229 void LocalTargetsUIHandler::UpdateTargets() {
229 SendTargets(DevToolsTargetImpl::EnumerateAll()); 230 SendTargets(DevToolsAgentHost::GetOrCreateAll());
230 } 231 }
231 232
232 void LocalTargetsUIHandler::SendTargets( 233 void LocalTargetsUIHandler::SendTargets(
233 const std::vector<DevToolsTargetImpl*>& targets) { 234 const content::DevToolsAgentHost::List& targets) {
234 base::ListValue list_value; 235 base::ListValue list_value;
235 std::map<std::string, base::DictionaryValue*> id_to_descriptor; 236 std::map<std::string, base::DictionaryValue*> id_to_descriptor;
236 237
237 base::STLDeleteValues(&targets_); 238 targets_.clear();
238 for (DevToolsTargetImpl* target : targets) { 239 for (scoped_refptr<DevToolsAgentHost> host : targets) {
239 scoped_refptr<content::DevToolsAgentHost> host = target->GetAgentHost(); 240 targets_[host->GetId()] = host;
240 targets_[host->GetId()] = target; 241 id_to_descriptor[host->GetId()] = Serialize(host);
241 id_to_descriptor[host->GetId()] = Serialize(*target);
242 } 242 }
243 243
244 for (TargetMap::iterator it(targets_.begin()); it != targets_.end(); ++it) { 244 for (auto& it : targets_) {
245 DevToolsTargetImpl* target = it->second; 245 scoped_refptr<DevToolsAgentHost> host = it.second;
246 scoped_refptr<content::DevToolsAgentHost> host = target->GetAgentHost();
247 base::DictionaryValue* descriptor = id_to_descriptor[host->GetId()]; 246 base::DictionaryValue* descriptor = id_to_descriptor[host->GetId()];
248 std::string parent_id = host->GetParentId(); 247 std::string parent_id = host->GetParentId();
249 if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) { 248 if (parent_id.empty() || id_to_descriptor.count(parent_id) == 0) {
250 list_value.Append(descriptor); 249 list_value.Append(descriptor);
251 } else { 250 } else {
252 base::DictionaryValue* parent = id_to_descriptor[parent_id]; 251 base::DictionaryValue* parent = id_to_descriptor[parent_id];
253 base::ListValue* guests = NULL; 252 base::ListValue* guests = NULL;
254 if (!parent->GetList(kGuestList, &guests)) { 253 if (!parent->GetList(kGuestList, &guests)) {
255 guests = new base::ListValue(); 254 guests = new base::ListValue();
256 parent->Set(kGuestList, guests); 255 parent->Set(kGuestList, guests);
257 } 256 }
258 guests->Append(descriptor); 257 guests->Append(descriptor);
259 } 258 }
260 } 259 }
261 260
262 SendSerializedTargets(list_value); 261 SendSerializedTargets(list_value);
263 } 262 }
264 263
265 // AdbTargetsUIHandler -------------------------------------------------------- 264 // AdbTargetsUIHandler --------------------------------------------------------
266 265
267 class AdbTargetsUIHandler 266 class AdbTargetsUIHandler
268 : public DevToolsTargetsUIHandler, 267 : public DevToolsTargetsUIHandler,
269 public DevToolsAndroidBridge::DeviceListListener { 268 public DevToolsAndroidBridge::DeviceListListener {
270 public: 269 public:
271 AdbTargetsUIHandler(const Callback& callback, Profile* profile); 270 AdbTargetsUIHandler(const Callback& callback, Profile* profile);
272 ~AdbTargetsUIHandler() override; 271 ~AdbTargetsUIHandler() override;
273 272
274 void Open(const std::string& browser_id, const std::string& url) override; 273 void Open(const std::string& browser_id, const std::string& url) override;
275 274
276 scoped_refptr<content::DevToolsAgentHost> GetBrowserAgentHost( 275 scoped_refptr<DevToolsAgentHost> GetBrowserAgentHost(
277 const std::string& browser_id) override; 276 const std::string& browser_id) override;
278 277
279 private: 278 private:
280 // DevToolsAndroidBridge::Listener overrides. 279 // DevToolsAndroidBridge::Listener overrides.
281 void DeviceListChanged( 280 void DeviceListChanged(
282 const DevToolsAndroidBridge::RemoteDevices& devices) override; 281 const DevToolsAndroidBridge::RemoteDevices& devices) override;
283 282
284 DevToolsAndroidBridge* GetAndroidBridge(); 283 DevToolsAndroidBridge* GetAndroidBridge();
285 284
286 Profile* const profile_; 285 Profile* const profile_;
(...skipping 19 matching lines...) Expand all
306 android_bridge_->RemoveDeviceListListener(this); 305 android_bridge_->RemoveDeviceListListener(this);
307 } 306 }
308 307
309 void AdbTargetsUIHandler::Open(const std::string& browser_id, 308 void AdbTargetsUIHandler::Open(const std::string& browser_id,
310 const std::string& url) { 309 const std::string& url) {
311 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); 310 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id);
312 if (it != remote_browsers_.end() && android_bridge_) 311 if (it != remote_browsers_.end() && android_bridge_)
313 android_bridge_->OpenRemotePage(it->second, url); 312 android_bridge_->OpenRemotePage(it->second, url);
314 } 313 }
315 314
316 scoped_refptr<content::DevToolsAgentHost> 315 scoped_refptr<DevToolsAgentHost>
317 AdbTargetsUIHandler::GetBrowserAgentHost( 316 AdbTargetsUIHandler::GetBrowserAgentHost(
318 const std::string& browser_id) { 317 const std::string& browser_id) {
319 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id); 318 RemoteBrowsers::iterator it = remote_browsers_.find(browser_id);
320 if (it == remote_browsers_.end() || !android_bridge_) 319 if (it == remote_browsers_.end() || !android_bridge_)
321 return nullptr; 320 return nullptr;
322 321
323 return android_bridge_->GetBrowserAgentHost(it->second); 322 return android_bridge_->GetBrowserAgentHost(it->second);
324 } 323 }
325 324
326 void AdbTargetsUIHandler::DeviceListChanged( 325 void AdbTargetsUIHandler::DeviceListChanged(
327 const DevToolsAndroidBridge::RemoteDevices& devices) { 326 const DevToolsAndroidBridge::RemoteDevices& devices) {
328 remote_browsers_.clear(); 327 remote_browsers_.clear();
329 base::STLDeleteValues(&targets_); 328 targets_.clear();
330 if (!android_bridge_) 329 if (!android_bridge_)
331 return; 330 return;
332 331
333 base::ListValue device_list; 332 base::ListValue device_list;
334 for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit = 333 for (DevToolsAndroidBridge::RemoteDevices::const_iterator dit =
335 devices.begin(); dit != devices.end(); ++dit) { 334 devices.begin(); dit != devices.end(); ++dit) {
336 DevToolsAndroidBridge::RemoteDevice* device = dit->get(); 335 DevToolsAndroidBridge::RemoteDevice* device = dit->get();
337 std::unique_ptr<base::DictionaryValue> device_data( 336 std::unique_ptr<base::DictionaryValue> device_data(
338 new base::DictionaryValue()); 337 new base::DictionaryValue());
339 device_data->SetString(kAdbModelField, device->model()); 338 device_data->SetString(kAdbModelField, device->model());
(...skipping 21 matching lines...) Expand all
361 kAdbBrowserChromeVersionField, 360 kAdbBrowserChromeVersionField,
362 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0); 361 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0);
363 std::string browser_id = browser->GetId(); 362 std::string browser_id = browser->GetId();
364 browser_data->SetString(kTargetIdField, browser_id); 363 browser_data->SetString(kTargetIdField, browser_id);
365 browser_data->SetString(kTargetSourceField, source_id()); 364 browser_data->SetString(kTargetSourceField, source_id());
366 365
367 base::ListValue* page_list = new base::ListValue(); 366 base::ListValue* page_list = new base::ListValue();
368 remote_browsers_[browser_id] = browser; 367 remote_browsers_[browser_id] = browser;
369 browser_data->Set(kAdbPagesList, page_list); 368 browser_data->Set(kAdbPagesList, page_list);
370 for (const auto& page : browser->pages()) { 369 for (const auto& page : browser->pages()) {
371 DevToolsTargetImpl* target = android_bridge_->CreatePageTarget(page); 370 scoped_refptr<DevToolsAgentHost> host =
372 scoped_refptr<content::DevToolsAgentHost> host = target->GetAgentHost(); 371 android_bridge_->CreatePageTarget(page);
373 base::DictionaryValue* target_data = Serialize(*target); 372 base::DictionaryValue* target_data = Serialize(host);
374 target_data->SetBoolean( 373 target_data->SetBoolean(
375 kAdbAttachedForeignField, 374 kAdbAttachedForeignField,
376 host->IsAttached() && 375 host->IsAttached() &&
377 !android_bridge_->HasDevToolsWindow(host->GetId())); 376 !android_bridge_->HasDevToolsWindow(host->GetId()));
378 // Pass the screen size in the target object to make sure that 377 // Pass the screen size in the target object to make sure that
379 // the caching logic does not prevent the target item from updating 378 // the caching logic does not prevent the target item from updating
380 // when the screen size changes. 379 // when the screen size changes.
381 gfx::Size screen_size = device->screen_size(); 380 gfx::Size screen_size = device->screen_size();
382 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); 381 target_data->SetInteger(kAdbScreenWidthField, screen_size.width());
383 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); 382 target_data->SetInteger(kAdbScreenHeightField, screen_size.height());
384 targets_[host->GetId()] = target; 383 targets_[host->GetId()] = host;
385 page_list->Append(target_data); 384 page_list->Append(target_data);
386 } 385 }
387 browser_list->Append(std::move(browser_data)); 386 browser_list->Append(std::move(browser_data));
388 } 387 }
389 388
390 device_list.Append(std::move(device_data)); 389 device_list.Append(std::move(device_data));
391 } 390 }
392 SendSerializedTargets(device_list); 391 SendSerializedTargets(device_list);
393 } 392 }
394 393
395 } // namespace 394 } // namespace
396 395
397 // DevToolsTargetsUIHandler --------------------------------------------------- 396 // DevToolsTargetsUIHandler ---------------------------------------------------
398 397
399 DevToolsTargetsUIHandler::DevToolsTargetsUIHandler( 398 DevToolsTargetsUIHandler::DevToolsTargetsUIHandler(
400 const std::string& source_id, 399 const std::string& source_id,
401 const Callback& callback) 400 const Callback& callback)
402 : source_id_(source_id), 401 : source_id_(source_id),
403 callback_(callback) { 402 callback_(callback) {
404 } 403 }
405 404
406 DevToolsTargetsUIHandler::~DevToolsTargetsUIHandler() { 405 DevToolsTargetsUIHandler::~DevToolsTargetsUIHandler() {
407 base::STLDeleteValues(&targets_);
408 } 406 }
409 407
410 // static 408 // static
411 std::unique_ptr<DevToolsTargetsUIHandler> 409 std::unique_ptr<DevToolsTargetsUIHandler>
412 DevToolsTargetsUIHandler::CreateForLocal( 410 DevToolsTargetsUIHandler::CreateForLocal(
413 const DevToolsTargetsUIHandler::Callback& callback) { 411 const DevToolsTargetsUIHandler::Callback& callback) {
414 return std::unique_ptr<DevToolsTargetsUIHandler>( 412 return std::unique_ptr<DevToolsTargetsUIHandler>(
415 new LocalTargetsUIHandler(callback)); 413 new LocalTargetsUIHandler(callback));
416 } 414 }
417 415
418 // static 416 // static
419 std::unique_ptr<DevToolsTargetsUIHandler> 417 std::unique_ptr<DevToolsTargetsUIHandler>
420 DevToolsTargetsUIHandler::CreateForAdb( 418 DevToolsTargetsUIHandler::CreateForAdb(
421 const DevToolsTargetsUIHandler::Callback& callback, 419 const DevToolsTargetsUIHandler::Callback& callback,
422 Profile* profile) { 420 Profile* profile) {
423 return std::unique_ptr<DevToolsTargetsUIHandler>( 421 return std::unique_ptr<DevToolsTargetsUIHandler>(
424 new AdbTargetsUIHandler(callback, profile)); 422 new AdbTargetsUIHandler(callback, profile));
425 } 423 }
426 424
427 DevToolsTargetImpl* DevToolsTargetsUIHandler::GetTarget( 425 scoped_refptr<DevToolsAgentHost> DevToolsTargetsUIHandler::GetTarget(
428 const std::string& target_id) { 426 const std::string& target_id) {
429 TargetMap::iterator it = targets_.find(target_id); 427 TargetMap::iterator it = targets_.find(target_id);
430 if (it != targets_.end()) 428 if (it != targets_.end())
431 return it->second; 429 return it->second;
432 return NULL; 430 return NULL;
433 } 431 }
434 432
435 void DevToolsTargetsUIHandler::Open(const std::string& browser_id, 433 void DevToolsTargetsUIHandler::Open(const std::string& browser_id,
436 const std::string& url) { 434 const std::string& url) {
437 } 435 }
438 436
439 scoped_refptr<content::DevToolsAgentHost> 437 scoped_refptr<DevToolsAgentHost>
440 DevToolsTargetsUIHandler::GetBrowserAgentHost(const std::string& browser_id) { 438 DevToolsTargetsUIHandler::GetBrowserAgentHost(const std::string& browser_id) {
441 return NULL; 439 return NULL;
442 } 440 }
443 441
444 base::DictionaryValue* DevToolsTargetsUIHandler::Serialize( 442 base::DictionaryValue* DevToolsTargetsUIHandler::Serialize(
445 const DevToolsTargetImpl& target) { 443 scoped_refptr<DevToolsAgentHost> host) {
446 base::DictionaryValue* target_data = new base::DictionaryValue(); 444 base::DictionaryValue* target_data = new base::DictionaryValue();
447 scoped_refptr<content::DevToolsAgentHost> host = target.GetAgentHost();
448 target_data->SetString(kTargetSourceField, source_id_); 445 target_data->SetString(kTargetSourceField, source_id_);
449 target_data->SetString(kTargetIdField, host->GetId()); 446 target_data->SetString(kTargetIdField, host->GetId());
450 target_data->SetString(kTargetTypeField, host->GetType()); 447 target_data->SetString(kTargetTypeField, host->GetType());
451 target_data->SetBoolean(kAttachedField, host->IsAttached()); 448 target_data->SetBoolean(kAttachedField, host->IsAttached());
452 target_data->SetString(kUrlField, host->GetURL().spec()); 449 target_data->SetString(kUrlField, host->GetURL().spec());
453 target_data->SetString(kNameField, host->GetTitle()); 450 target_data->SetString(kNameField, host->GetTitle());
454 target_data->SetString(kFaviconUrlField, host->GetFaviconURL().spec()); 451 target_data->SetString(kFaviconUrlField, host->GetFaviconURL().spec());
455 target_data->SetString(kDescriptionField, host->GetDescription()); 452 target_data->SetString(kDescriptionField, host->GetDescription());
456 return target_data; 453 return target_data;
457 } 454 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 device_status_dict->SetString(kPortForwardingBrowserId, 497 device_status_dict->SetString(kPortForwardingBrowserId,
501 sit->first->GetId()); 498 sit->first->GetId());
502 499
503 std::string device_id = base::StringPrintf( 500 std::string device_id = base::StringPrintf(
504 kAdbDeviceIdFormat, 501 kAdbDeviceIdFormat,
505 sit->first->serial().c_str()); 502 sit->first->serial().c_str());
506 result.Set(device_id, device_status_dict); 503 result.Set(device_id, device_status_dict);
507 } 504 }
508 callback_.Run(result); 505 callback_.Run(result);
509 } 506 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698