OLD | NEW |
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 "base/memory/weak_ptr.h" | 7 #include "base/memory/weak_ptr.h" |
8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
127 const content::NotificationDetails& details) { | 127 const content::NotificationDetails& details) { |
128 const int kUpdateDelay = 100; | 128 const int kUpdateDelay = 100; |
129 timer_.reset( | 129 timer_.reset( |
130 new CancelableTimer( | 130 new CancelableTimer( |
131 base::Bind(&RenderViewHostTargetsUIHandler::UpdateTargets, | 131 base::Bind(&RenderViewHostTargetsUIHandler::UpdateTargets, |
132 base::Unretained(this)), | 132 base::Unretained(this)), |
133 base::TimeDelta::FromMilliseconds(kUpdateDelay))); | 133 base::TimeDelta::FromMilliseconds(kUpdateDelay))); |
134 } | 134 } |
135 | 135 |
136 void RenderViewHostTargetsUIHandler::UpdateTargets() { | 136 void RenderViewHostTargetsUIHandler::UpdateTargets() { |
137 scoped_ptr<ListValue> list_value(new ListValue()); | 137 scoped_ptr<base::ListValue> list_value(new base::ListValue()); |
138 | 138 |
139 std::map<WebContents*, DictionaryValue*> web_contents_to_descriptor_; | 139 std::map<WebContents*, base::DictionaryValue*> web_contents_to_descriptor_; |
140 std::vector<DevToolsTargetImpl*> guest_targets; | 140 std::vector<DevToolsTargetImpl*> guest_targets; |
141 | 141 |
142 DevToolsTargetImpl::List targets = | 142 DevToolsTargetImpl::List targets = |
143 DevToolsTargetImpl::EnumerateRenderViewHostTargets(); | 143 DevToolsTargetImpl::EnumerateRenderViewHostTargets(); |
144 | 144 |
145 STLDeleteValues(&targets_); | 145 STLDeleteValues(&targets_); |
146 for (DevToolsTargetImpl::List::iterator it = targets.begin(); | 146 for (DevToolsTargetImpl::List::iterator it = targets.begin(); |
147 it != targets.end(); ++it) { | 147 it != targets.end(); ++it) { |
148 scoped_ptr<DevToolsTargetImpl> target(*it); | 148 scoped_ptr<DevToolsTargetImpl> target(*it); |
149 content::RenderViewHost* rvh = target->GetRenderViewHost(); | 149 content::RenderViewHost* rvh = target->GetRenderViewHost(); |
150 if (!rvh) | 150 if (!rvh) |
151 continue; | 151 continue; |
152 WebContents* web_contents = WebContents::FromRenderViewHost(rvh); | 152 WebContents* web_contents = WebContents::FromRenderViewHost(rvh); |
153 if (!web_contents) | 153 if (!web_contents) |
154 continue; | 154 continue; |
155 | 155 |
156 DevToolsTargetImpl* target_ptr = target.get(); | 156 DevToolsTargetImpl* target_ptr = target.get(); |
157 targets_[target_ptr->GetId()] = target.release(); | 157 targets_[target_ptr->GetId()] = target.release(); |
158 if (rvh->GetProcess()->IsGuest()) { | 158 if (rvh->GetProcess()->IsGuest()) { |
159 guest_targets.push_back(target_ptr); | 159 guest_targets.push_back(target_ptr); |
160 } else { | 160 } else { |
161 DictionaryValue* descriptor = Serialize(*target_ptr); | 161 base::DictionaryValue* descriptor = Serialize(*target_ptr); |
162 list_value->Append(descriptor); | 162 list_value->Append(descriptor); |
163 web_contents_to_descriptor_[web_contents] = descriptor; | 163 web_contents_to_descriptor_[web_contents] = descriptor; |
164 } | 164 } |
165 } | 165 } |
166 | 166 |
167 // Add the list of guest-views to each of its embedders. | 167 // Add the list of guest-views to each of its embedders. |
168 for (std::vector<DevToolsTargetImpl*>::iterator it(guest_targets.begin()); | 168 for (std::vector<DevToolsTargetImpl*>::iterator it(guest_targets.begin()); |
169 it != guest_targets.end(); ++it) { | 169 it != guest_targets.end(); ++it) { |
170 DevToolsTargetImpl* guest = (*it); | 170 DevToolsTargetImpl* guest = (*it); |
171 WebContents* guest_web_contents = | 171 WebContents* guest_web_contents = |
172 WebContents::FromRenderViewHost(guest->GetRenderViewHost()); | 172 WebContents::FromRenderViewHost(guest->GetRenderViewHost()); |
173 WebContents* embedder = guest_web_contents->GetEmbedderWebContents(); | 173 WebContents* embedder = guest_web_contents->GetEmbedderWebContents(); |
174 if (embedder && web_contents_to_descriptor_.count(embedder) > 0) { | 174 if (embedder && web_contents_to_descriptor_.count(embedder) > 0) { |
175 DictionaryValue* parent = web_contents_to_descriptor_[embedder]; | 175 base::DictionaryValue* parent = web_contents_to_descriptor_[embedder]; |
176 ListValue* guests = NULL; | 176 base::ListValue* guests = NULL; |
177 if (!parent->GetList(kGuestList, &guests)) { | 177 if (!parent->GetList(kGuestList, &guests)) { |
178 guests = new ListValue(); | 178 guests = new base::ListValue(); |
179 parent->Set(kGuestList, guests); | 179 parent->Set(kGuestList, guests); |
180 } | 180 } |
181 guests->Append(Serialize(*guest)); | 181 guests->Append(Serialize(*guest)); |
182 } | 182 } |
183 } | 183 } |
184 | 184 |
185 SendSerializedTargets(list_value.Pass()); | 185 SendSerializedTargets(list_value.Pass()); |
186 } | 186 } |
187 | 187 |
188 // WorkerObserver ------------------------------------------------------------- | 188 // WorkerObserver ------------------------------------------------------------- |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
301 | 301 |
302 void WorkerTargetsUIHandler::BrowserChildProcessHostDisconnected( | 302 void WorkerTargetsUIHandler::BrowserChildProcessHostDisconnected( |
303 const content::ChildProcessData& data) { | 303 const content::ChildProcessData& data) { |
304 if (data.process_type == content::PROCESS_TYPE_WORKER) | 304 if (data.process_type == content::PROCESS_TYPE_WORKER) |
305 observer_->Enumerate(); | 305 observer_->Enumerate(); |
306 } | 306 } |
307 | 307 |
308 void WorkerTargetsUIHandler::UpdateTargets( | 308 void WorkerTargetsUIHandler::UpdateTargets( |
309 const DevToolsTargetImpl::List& targets) { | 309 const DevToolsTargetImpl::List& targets) { |
310 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 310 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
311 scoped_ptr<ListValue> list_value(new ListValue()); | 311 scoped_ptr<base::ListValue> list_value(new base::ListValue()); |
312 STLDeleteValues(&targets_); | 312 STLDeleteValues(&targets_); |
313 for (DevToolsTargetImpl::List::const_iterator it = targets.begin(); | 313 for (DevToolsTargetImpl::List::const_iterator it = targets.begin(); |
314 it != targets.end(); ++it) { | 314 it != targets.end(); ++it) { |
315 DevToolsTargetImpl* target = *it; | 315 DevToolsTargetImpl* target = *it; |
316 list_value->Append(Serialize(*target)); | 316 list_value->Append(Serialize(*target)); |
317 targets_[target->GetId()] = target; | 317 targets_[target->GetId()] = target; |
318 } | 318 } |
319 SendSerializedTargets(list_value.Pass()); | 319 SendSerializedTargets(list_value.Pass()); |
320 } | 320 } |
321 | 321 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
371 PortForwardingController* port_forwarding_controller = | 371 PortForwardingController* port_forwarding_controller = |
372 PortForwardingController::Factory::GetForProfile(profile_); | 372 PortForwardingController::Factory::GetForProfile(profile_); |
373 PortForwardingController::DevicesStatus port_forwarding_status; | 373 PortForwardingController::DevicesStatus port_forwarding_status; |
374 if (port_forwarding_controller) | 374 if (port_forwarding_controller) |
375 port_forwarding_status = | 375 port_forwarding_status = |
376 port_forwarding_controller->UpdateDeviceList(*devices); | 376 port_forwarding_controller->UpdateDeviceList(*devices); |
377 | 377 |
378 remote_browsers_.clear(); | 378 remote_browsers_.clear(); |
379 STLDeleteValues(&targets_); | 379 STLDeleteValues(&targets_); |
380 | 380 |
381 scoped_ptr<ListValue> device_list(new ListValue()); | 381 scoped_ptr<base::ListValue> device_list(new base::ListValue()); |
382 for (DevToolsAdbBridge::RemoteDevices::iterator dit = devices->begin(); | 382 for (DevToolsAdbBridge::RemoteDevices::iterator dit = devices->begin(); |
383 dit != devices->end(); ++dit) { | 383 dit != devices->end(); ++dit) { |
384 DevToolsAdbBridge::RemoteDevice* device = dit->get(); | 384 DevToolsAdbBridge::RemoteDevice* device = dit->get(); |
385 DictionaryValue* device_data = new DictionaryValue(); | 385 base::DictionaryValue* device_data = new base::DictionaryValue(); |
386 device_data->SetString(kAdbModelField, device->GetModel()); | 386 device_data->SetString(kAdbModelField, device->GetModel()); |
387 device_data->SetString(kAdbSerialField, device->GetSerial()); | 387 device_data->SetString(kAdbSerialField, device->GetSerial()); |
388 device_data->SetBoolean(kAdbConnectedField, device->IsConnected()); | 388 device_data->SetBoolean(kAdbConnectedField, device->IsConnected()); |
389 std::string device_id = base::StringPrintf( | 389 std::string device_id = base::StringPrintf( |
390 "device:%s", | 390 "device:%s", |
391 device->GetSerial().c_str()); | 391 device->GetSerial().c_str()); |
392 device_data->SetString(kTargetIdField, device_id); | 392 device_data->SetString(kTargetIdField, device_id); |
393 ListValue* browser_list = new ListValue(); | 393 base::ListValue* browser_list = new base::ListValue(); |
394 device_data->Set(kAdbBrowsersList, browser_list); | 394 device_data->Set(kAdbBrowsersList, browser_list); |
395 | 395 |
396 DevToolsAdbBridge::RemoteBrowsers& browsers = device->browsers(); | 396 DevToolsAdbBridge::RemoteBrowsers& browsers = device->browsers(); |
397 for (DevToolsAdbBridge::RemoteBrowsers::iterator bit = | 397 for (DevToolsAdbBridge::RemoteBrowsers::iterator bit = |
398 browsers.begin(); bit != browsers.end(); ++bit) { | 398 browsers.begin(); bit != browsers.end(); ++bit) { |
399 DevToolsAdbBridge::RemoteBrowser* browser = bit->get(); | 399 DevToolsAdbBridge::RemoteBrowser* browser = bit->get(); |
400 DictionaryValue* browser_data = new DictionaryValue(); | 400 base::DictionaryValue* browser_data = new base::DictionaryValue(); |
401 browser_data->SetString(kAdbBrowserNameField, browser->display_name()); | 401 browser_data->SetString(kAdbBrowserNameField, browser->display_name()); |
402 browser_data->SetString(kAdbBrowserVersionField, browser->version()); | 402 browser_data->SetString(kAdbBrowserVersionField, browser->version()); |
403 DevToolsAdbBridge::RemoteBrowser::ParsedVersion parsed = | 403 DevToolsAdbBridge::RemoteBrowser::ParsedVersion parsed = |
404 browser->GetParsedVersion(); | 404 browser->GetParsedVersion(); |
405 browser_data->SetInteger( | 405 browser_data->SetInteger( |
406 kAdbBrowserChromeVersionField, | 406 kAdbBrowserChromeVersionField, |
407 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0); | 407 browser->IsChrome() && !parsed.empty() ? parsed[0] : 0); |
408 std::string browser_id = base::StringPrintf( | 408 std::string browser_id = base::StringPrintf( |
409 "browser:%s:%s:%s:%s", | 409 "browser:%s:%s:%s:%s", |
410 device->GetSerial().c_str(), // Ensure uniqueness across devices. | 410 device->GetSerial().c_str(), // Ensure uniqueness across devices. |
411 browser->display_name().c_str(), // Sort by display name. | 411 browser->display_name().c_str(), // Sort by display name. |
412 browser->version().c_str(), // Then by version. | 412 browser->version().c_str(), // Then by version. |
413 browser->socket().c_str()); // Ensure uniqueness on the device. | 413 browser->socket().c_str()); // Ensure uniqueness on the device. |
414 browser_data->SetString(kTargetIdField, browser_id); | 414 browser_data->SetString(kTargetIdField, browser_id); |
415 browser_data->SetString(kTargetSourceField, source_id()); | 415 browser_data->SetString(kTargetSourceField, source_id()); |
416 remote_browsers_[browser_id] = browser; | 416 remote_browsers_[browser_id] = browser; |
417 ListValue* page_list = new ListValue(); | 417 base::ListValue* page_list = new base::ListValue(); |
418 browser_data->Set(kAdbPagesList, page_list); | 418 browser_data->Set(kAdbPagesList, page_list); |
419 | 419 |
420 DevToolsTargetImpl::List pages = browser->CreatePageTargets(); | 420 DevToolsTargetImpl::List pages = browser->CreatePageTargets(); |
421 for (DevToolsTargetImpl::List::iterator it = | 421 for (DevToolsTargetImpl::List::iterator it = |
422 pages.begin(); it != pages.end(); ++it) { | 422 pages.begin(); it != pages.end(); ++it) { |
423 DevToolsTargetImpl* target = *it; | 423 DevToolsTargetImpl* target = *it; |
424 DictionaryValue* target_data = Serialize(*target); | 424 base::DictionaryValue* target_data = Serialize(*target); |
425 target_data->SetBoolean( | 425 target_data->SetBoolean( |
426 kAdbAttachedForeignField, | 426 kAdbAttachedForeignField, |
427 target->IsAttached() && | 427 target->IsAttached() && |
428 !DevToolsAdbBridge::HasDevToolsWindow(target->GetId())); | 428 !DevToolsAdbBridge::HasDevToolsWindow(target->GetId())); |
429 // Pass the screen size in the target object to make sure that | 429 // Pass the screen size in the target object to make sure that |
430 // the caching logic does not prevent the target item from updating | 430 // the caching logic does not prevent the target item from updating |
431 // when the screen size changes. | 431 // when the screen size changes. |
432 gfx::Size screen_size = device->screen_size(); | 432 gfx::Size screen_size = device->screen_size(); |
433 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); | 433 target_data->SetInteger(kAdbScreenWidthField, screen_size.width()); |
434 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); | 434 target_data->SetInteger(kAdbScreenHeightField, screen_size.height()); |
435 targets_[target->GetId()] = target; | 435 targets_[target->GetId()] = target; |
436 page_list->Append(target_data); | 436 page_list->Append(target_data); |
437 } | 437 } |
438 browser_list->Append(browser_data); | 438 browser_list->Append(browser_data); |
439 } | 439 } |
440 | 440 |
441 if (port_forwarding_controller) { | 441 if (port_forwarding_controller) { |
442 PortForwardingController::DevicesStatus::iterator sit = | 442 PortForwardingController::DevicesStatus::iterator sit = |
443 port_forwarding_status.find(device->GetSerial()); | 443 port_forwarding_status.find(device->GetSerial()); |
444 if (sit != port_forwarding_status.end()) { | 444 if (sit != port_forwarding_status.end()) { |
445 DictionaryValue* port_status_dict = new DictionaryValue(); | 445 base::DictionaryValue* port_status_dict = new base::DictionaryValue(); |
446 typedef PortForwardingController::PortStatusMap StatusMap; | 446 typedef PortForwardingController::PortStatusMap StatusMap; |
447 const StatusMap& port_status = sit->second; | 447 const StatusMap& port_status = sit->second; |
448 for (StatusMap::const_iterator it = port_status.begin(); | 448 for (StatusMap::const_iterator it = port_status.begin(); |
449 it != port_status.end(); ++it) { | 449 it != port_status.end(); ++it) { |
450 port_status_dict->SetInteger( | 450 port_status_dict->SetInteger( |
451 base::StringPrintf("%d", it->first), it->second); | 451 base::StringPrintf("%d", it->first), it->second); |
452 } | 452 } |
453 device_data->Set(kAdbPortStatus, port_status_dict); | 453 device_data->Set(kAdbPortStatus, port_status_dict); |
454 } | 454 } |
455 } | 455 } |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
511 | 511 |
512 void DevToolsTargetsUIHandler::Reload(const std::string& target_id) { | 512 void DevToolsTargetsUIHandler::Reload(const std::string& target_id) { |
513 TargetMap::iterator it = targets_.find(target_id); | 513 TargetMap::iterator it = targets_.find(target_id); |
514 if (it != targets_.end()) | 514 if (it != targets_.end()) |
515 it->second->Reload(); | 515 it->second->Reload(); |
516 } | 516 } |
517 | 517 |
518 base::DictionaryValue* | 518 base::DictionaryValue* |
519 DevToolsTargetsUIHandler::Serialize( | 519 DevToolsTargetsUIHandler::Serialize( |
520 const DevToolsTargetImpl& target) { | 520 const DevToolsTargetImpl& target) { |
521 DictionaryValue* target_data = new DictionaryValue(); | 521 base::DictionaryValue* target_data = new base::DictionaryValue(); |
522 target_data->SetString(kTargetSourceField, source_id_); | 522 target_data->SetString(kTargetSourceField, source_id_); |
523 target_data->SetString(kTargetIdField, target.GetId()); | 523 target_data->SetString(kTargetIdField, target.GetId()); |
524 target_data->SetString(kTargetTypeField, target.GetType()); | 524 target_data->SetString(kTargetTypeField, target.GetType()); |
525 target_data->SetBoolean(kAttachedField, target.IsAttached()); | 525 target_data->SetBoolean(kAttachedField, target.IsAttached()); |
526 target_data->SetString(kUrlField, target.GetUrl().spec()); | 526 target_data->SetString(kUrlField, target.GetUrl().spec()); |
527 target_data->SetString(kNameField, net::EscapeForHTML(target.GetTitle())); | 527 target_data->SetString(kNameField, net::EscapeForHTML(target.GetTitle())); |
528 target_data->SetString(kFaviconUrlField, target.GetFaviconUrl().spec()); | 528 target_data->SetString(kFaviconUrlField, target.GetFaviconUrl().spec()); |
529 target_data->SetString(kDescriptionField, target.GetDescription()); | 529 target_data->SetString(kDescriptionField, target.GetDescription()); |
530 return target_data; | 530 return target_data; |
531 } | 531 } |
532 | 532 |
533 void DevToolsTargetsUIHandler::SendSerializedTargets( | 533 void DevToolsTargetsUIHandler::SendSerializedTargets( |
534 scoped_ptr<ListValue> list) { | 534 scoped_ptr<base::ListValue> list) { |
535 callback_.Run(source_id_, list.Pass()); | 535 callback_.Run(source_id_, list.Pass()); |
536 } | 536 } |
537 | 537 |
538 // DevToolsRemoteTargetsUIHandler --------------------------------------------- | 538 // DevToolsRemoteTargetsUIHandler --------------------------------------------- |
539 | 539 |
540 DevToolsRemoteTargetsUIHandler::DevToolsRemoteTargetsUIHandler( | 540 DevToolsRemoteTargetsUIHandler::DevToolsRemoteTargetsUIHandler( |
541 const std::string& source_id, | 541 const std::string& source_id, |
542 Callback callback) | 542 Callback callback) |
543 : DevToolsTargetsUIHandler(source_id, callback) { | 543 : DevToolsTargetsUIHandler(source_id, callback) { |
544 } | 544 } |
545 | 545 |
546 // static | 546 // static |
547 scoped_ptr<DevToolsRemoteTargetsUIHandler> | 547 scoped_ptr<DevToolsRemoteTargetsUIHandler> |
548 DevToolsRemoteTargetsUIHandler::CreateForAdb( | 548 DevToolsRemoteTargetsUIHandler::CreateForAdb( |
549 DevToolsTargetsUIHandler::Callback callback, Profile* profile) { | 549 DevToolsTargetsUIHandler::Callback callback, Profile* profile) { |
550 return scoped_ptr<DevToolsRemoteTargetsUIHandler>( | 550 return scoped_ptr<DevToolsRemoteTargetsUIHandler>( |
551 new AdbTargetsUIHandler(callback, profile)); | 551 new AdbTargetsUIHandler(callback, profile)); |
552 } | 552 } |
OLD | NEW |