| 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 |