Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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/device/devtools_android_bridge.h" | 5 #include "chrome/browser/devtools/device/devtools_android_bridge.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/base64.h" | 10 #include "base/base64.h" |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 59 const char kBrowserTargetSocket[] = "/devtools/browser"; | 59 const char kBrowserTargetSocket[] = "/devtools/browser"; |
| 60 const int kAdbPollingIntervalMs = 1000; | 60 const int kAdbPollingIntervalMs = 1000; |
| 61 | 61 |
| 62 const char kUrlParam[] = "url"; | 62 const char kUrlParam[] = "url"; |
| 63 const char kPageReloadCommand[] = "Page.reload"; | 63 const char kPageReloadCommand[] = "Page.reload"; |
| 64 const char kPageNavigateCommand[] = "Page.navigate"; | 64 const char kPageNavigateCommand[] = "Page.navigate"; |
| 65 | 65 |
| 66 const int kMinVersionNewWithURL = 32; | 66 const int kMinVersionNewWithURL = 32; |
| 67 const int kNewPageNavigateDelayMs = 500; | 67 const int kNewPageNavigateDelayMs = 500; |
| 68 | 68 |
| 69 const char kWebViewSocketPrefix[] = "webview_devtools_remote"; | |
| 70 | |
| 69 bool IsWebRTCDeviceProviderEnabled() { | 71 bool IsWebRTCDeviceProviderEnabled() { |
| 70 return base::CommandLine::ForCurrentProcess()->HasSwitch( | 72 return base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 71 switches::kEnableDevToolsExperiments); | 73 switches::kEnableDevToolsExperiments); |
| 72 } | 74 } |
| 73 | 75 |
| 74 bool BrowserIdFromString(const std::string& browser_id_str, | 76 bool BrowserIdFromString(const std::string& browser_id_str, |
| 75 DevToolsAndroidBridge::BrowserId* browser_id) { | 77 DevToolsAndroidBridge::BrowserId* browser_id) { |
| 76 size_t colon_pos = browser_id_str.find(':'); | 78 size_t colon_pos = browser_id_str.find(':'); |
| 77 if (colon_pos == std::string::npos) | 79 if (colon_pos == std::string::npos) |
| 78 return false; | 80 return false; |
| (...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 186 int result, | 188 int result, |
| 187 const std::string& response) { | 189 const std::string& response) { |
| 188 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 190 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 189 if (result < 0) | 191 if (result < 0) |
| 190 return; | 192 return; |
| 191 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 193 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
| 192 base::ListValue* list_value; | 194 base::ListValue* list_value; |
| 193 if (value && value->GetAsList(&list_value)) { | 195 if (value && value->GetAsList(&list_value)) { |
| 194 for (const auto& page_value : *list_value) { | 196 for (const auto& page_value : *list_value) { |
| 195 base::DictionaryValue* dict; | 197 base::DictionaryValue* dict; |
| 196 if (page_value->GetAsDictionary(&dict)) { | 198 if (page_value->GetAsDictionary(&dict)) |
| 197 browser->pages_.push_back( | 199 browser->pages_.push_back(new RemotePage(browser->browser_id_, *dict)); |
| 198 new RemotePage(browser->browser_id_, *dict, browser->IsWebView())); | |
| 199 } | |
| 200 } | 200 } |
| 201 } | 201 } |
| 202 } | 202 } |
| 203 | 203 |
| 204 // ProtocolCommand ------------------------------------------------------------ | 204 // ProtocolCommand ------------------------------------------------------------ |
| 205 | 205 |
| 206 namespace { | 206 namespace { |
| 207 | 207 |
| 208 class ProtocolCommand | 208 class ProtocolCommand |
| 209 : public AndroidDeviceManager::AndroidWebSocket::Delegate { | 209 : public AndroidDeviceManager::AndroidWebSocket::Delegate { |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 301 // AgentHostDelegate ---------------------------------------------------------- | 301 // AgentHostDelegate ---------------------------------------------------------- |
| 302 | 302 |
| 303 class DevToolsAndroidBridge::AgentHostDelegate | 303 class DevToolsAndroidBridge::AgentHostDelegate |
| 304 : public content::DevToolsExternalAgentProxyDelegate, | 304 : public content::DevToolsExternalAgentProxyDelegate, |
| 305 public AndroidDeviceManager::AndroidWebSocket::Delegate { | 305 public AndroidDeviceManager::AndroidWebSocket::Delegate { |
| 306 public: | 306 public: |
| 307 static scoped_refptr<content::DevToolsAgentHost> GetOrCreateAgentHost( | 307 static scoped_refptr<content::DevToolsAgentHost> GetOrCreateAgentHost( |
| 308 DevToolsAndroidBridge* bridge, | 308 DevToolsAndroidBridge* bridge, |
| 309 const std::string& id, | 309 const std::string& id, |
| 310 const BrowserId& browser_id, | 310 const BrowserId& browser_id, |
| 311 const std::string& debug_url, | 311 const std::string& debug_url); |
| 312 bool is_web_view); | |
| 313 | 312 |
| 314 private: | 313 private: |
| 315 AgentHostDelegate( | 314 AgentHostDelegate( |
| 316 DevToolsAndroidBridge* bridge, | 315 DevToolsAndroidBridge* bridge, |
| 317 const std::string& id, | 316 const std::string& id, |
| 318 const BrowserId& browser_id, | 317 const BrowserId& browser_id, |
| 319 const std::string& debug_url, | 318 const std::string& debug_url); |
| 320 bool is_web_view); | |
| 321 ~AgentHostDelegate() override; | 319 ~AgentHostDelegate() override; |
| 322 void Attach(content::DevToolsExternalAgentProxy* proxy) override; | 320 void Attach(content::DevToolsExternalAgentProxy* proxy) override; |
| 323 void Detach() override; | 321 void Detach() override; |
| 324 void SendMessageToBackend(const std::string& message) override; | 322 void SendMessageToBackend(const std::string& message) override; |
| 325 void OnSocketOpened() override; | 323 void OnSocketOpened() override; |
| 326 void OnFrameRead(const std::string& message) override; | 324 void OnFrameRead(const std::string& message) override; |
| 327 void OnSocketClosed() override; | 325 void OnSocketClosed() override; |
| 328 | 326 |
| 329 std::string id_; | 327 std::string id_; |
| 330 base::WeakPtr<DevToolsAndroidBridge> bridge_; | 328 base::WeakPtr<DevToolsAndroidBridge> bridge_; |
| 331 BrowserId browser_id_; | 329 BrowserId browser_id_; |
| 332 std::string debug_url_; | 330 std::string debug_url_; |
| 333 bool socket_opened_; | 331 bool socket_opened_; |
| 334 bool is_web_view_; | |
| 335 std::vector<std::string> pending_messages_; | 332 std::vector<std::string> pending_messages_; |
| 336 scoped_refptr<AndroidDeviceManager::Device> device_; | 333 scoped_refptr<AndroidDeviceManager::Device> device_; |
| 337 scoped_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_; | 334 scoped_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_; |
| 338 content::DevToolsAgentHost* agent_host_; | 335 content::DevToolsAgentHost* agent_host_; |
| 339 content::DevToolsExternalAgentProxy* proxy_; | 336 content::DevToolsExternalAgentProxy* proxy_; |
| 340 DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate); | 337 DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate); |
| 341 }; | 338 }; |
| 342 | 339 |
| 343 // static | 340 // static |
| 344 scoped_refptr<content::DevToolsAgentHost> | 341 scoped_refptr<content::DevToolsAgentHost> |
| 345 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost( | 342 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost( |
| 346 DevToolsAndroidBridge* bridge, | 343 DevToolsAndroidBridge* bridge, |
| 347 const std::string& id, | 344 const std::string& id, |
| 348 const BrowserId& browser_id, | 345 const BrowserId& browser_id, |
| 349 const std::string& debug_url, | 346 const std::string& debug_url) { |
| 350 bool is_web_view) { | |
| 351 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 347 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 352 AgentHostDelegates::iterator it = bridge->host_delegates_.find(id); | 348 AgentHostDelegates::iterator it = bridge->host_delegates_.find(id); |
| 353 if (it != bridge->host_delegates_.end()) | 349 if (it != bridge->host_delegates_.end()) |
| 354 return it->second->agent_host_; | 350 return it->second->agent_host_; |
| 355 | 351 |
| 356 AgentHostDelegate* delegate = | 352 AgentHostDelegate* delegate = |
| 357 new AgentHostDelegate(bridge, id, browser_id, debug_url, is_web_view); | 353 new AgentHostDelegate(bridge, id, browser_id, debug_url); |
| 358 scoped_refptr<content::DevToolsAgentHost> result = | 354 scoped_refptr<content::DevToolsAgentHost> result = |
| 359 content::DevToolsAgentHost::Create(delegate); | 355 content::DevToolsAgentHost::Create(delegate); |
| 360 delegate->agent_host_ = result.get(); | 356 delegate->agent_host_ = result.get(); |
| 361 return result; | 357 return result; |
| 362 } | 358 } |
| 363 | 359 |
| 364 DevToolsAndroidBridge::AgentHostDelegate::AgentHostDelegate( | 360 DevToolsAndroidBridge::AgentHostDelegate::AgentHostDelegate( |
| 365 DevToolsAndroidBridge* bridge, | 361 DevToolsAndroidBridge* bridge, |
| 366 const std::string& id, | 362 const std::string& id, |
| 367 const BrowserId& browser_id, | 363 const BrowserId& browser_id, |
| 368 const std::string& debug_url, | 364 const std::string& debug_url) |
| 369 bool is_web_view) | |
| 370 : id_(id), | 365 : id_(id), |
| 371 bridge_(bridge->AsWeakPtr()), | 366 bridge_(bridge->AsWeakPtr()), |
| 372 browser_id_(browser_id), | 367 browser_id_(browser_id), |
| 373 debug_url_(debug_url), | 368 debug_url_(debug_url), |
| 374 socket_opened_(false), | 369 socket_opened_(false), |
| 375 is_web_view_(is_web_view), | |
| 376 agent_host_(NULL), | 370 agent_host_(NULL), |
| 377 proxy_(NULL) { | 371 proxy_(NULL) { |
| 378 bridge_->host_delegates_[id] = this; | 372 bridge_->host_delegates_[id] = this; |
| 379 } | 373 } |
| 380 | 374 |
| 381 DevToolsAndroidBridge::AgentHostDelegate::~AgentHostDelegate() { | 375 DevToolsAndroidBridge::AgentHostDelegate::~AgentHostDelegate() { |
| 382 if (bridge_) | 376 if (bridge_) |
| 383 bridge_->host_delegates_.erase(id_); | 377 bridge_->host_delegates_.erase(id_); |
| 384 } | 378 } |
| 385 | 379 |
| 386 void DevToolsAndroidBridge::AgentHostDelegate::Attach( | 380 void DevToolsAndroidBridge::AgentHostDelegate::Attach( |
| 387 content::DevToolsExternalAgentProxy* proxy) { | 381 content::DevToolsExternalAgentProxy* proxy) { |
| 388 proxy_ = proxy; | 382 proxy_ = proxy; |
| 389 content::RecordAction(is_web_view_ ? | 383 content::RecordAction(browser_id_.second.find(kWebViewSocketPrefix) == 0 ? |
| 390 base::UserMetricsAction("DevTools_InspectAndroidWebView") : | 384 base::UserMetricsAction("DevTools_InspectAndroidWebView") : |
| 391 base::UserMetricsAction("DevTools_InspectAndroidPage")); | 385 base::UserMetricsAction("DevTools_InspectAndroidPage")); |
| 392 | 386 |
| 393 // Retain the device so it's not released until AgentHost is detached. | 387 // Retain the device so it's not released until AgentHost is detached. |
| 394 if (bridge_) | 388 if (bridge_) |
| 395 device_ = bridge_->FindDevice(browser_id_.first); | 389 device_ = bridge_->FindDevice(browser_id_.first); |
| 396 if (!device_.get()) | 390 if (!device_.get()) |
| 397 return; | 391 return; |
| 398 | 392 |
| 399 web_socket_.reset( | 393 web_socket_.reset( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 432 if (proxy_) | 426 if (proxy_) |
| 433 proxy_->ConnectionClosed(); | 427 proxy_->ConnectionClosed(); |
| 434 } | 428 } |
| 435 | 429 |
| 436 //// RemotePageTarget ---------------------------------------------- | 430 //// RemotePageTarget ---------------------------------------------- |
| 437 | 431 |
| 438 class DevToolsAndroidBridge::RemotePageTarget : public DevToolsTargetImpl { | 432 class DevToolsAndroidBridge::RemotePageTarget : public DevToolsTargetImpl { |
| 439 public: | 433 public: |
| 440 RemotePageTarget(DevToolsAndroidBridge* bridge, | 434 RemotePageTarget(DevToolsAndroidBridge* bridge, |
| 441 const BrowserId& browser_id, | 435 const BrowserId& browser_id, |
| 442 const base::DictionaryValue& value, | 436 const base::DictionaryValue& value); |
| 443 bool is_web_view_); | |
| 444 ~RemotePageTarget() override; | 437 ~RemotePageTarget() override; |
| 445 | 438 |
| 446 // DevToolsTargetImpl overrides. | 439 // DevToolsTargetImpl overrides. |
| 447 std::string GetId() const override; | 440 std::string GetId() const override; |
| 448 bool IsAttached() const override; | 441 bool IsAttached() const override; |
| 449 bool Activate() const override; | 442 bool Activate() const override; |
| 450 bool Close() const override; | 443 bool Close() const override; |
| 451 void Inspect(Profile* profile) const override; | 444 void Inspect(Profile* profile) const override; |
| 452 void Reload() const override; | 445 void Reload() const override; |
| 453 | 446 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 494 if (debug_url.find("ws://") == 0) | 487 if (debug_url.find("ws://") == 0) |
| 495 debug_url = debug_url.substr(5); | 488 debug_url = debug_url.substr(5); |
| 496 else | 489 else |
| 497 debug_url = std::string(); | 490 debug_url = std::string(); |
| 498 return debug_url; | 491 return debug_url; |
| 499 } | 492 } |
| 500 | 493 |
| 501 DevToolsAndroidBridge::RemotePageTarget::RemotePageTarget( | 494 DevToolsAndroidBridge::RemotePageTarget::RemotePageTarget( |
| 502 DevToolsAndroidBridge* bridge, | 495 DevToolsAndroidBridge* bridge, |
| 503 const BrowserId& browser_id, | 496 const BrowserId& browser_id, |
| 504 const base::DictionaryValue& value, | 497 const base::DictionaryValue& value) |
| 505 bool is_web_view) | |
| 506 : DevToolsTargetImpl(AgentHostDelegate::GetOrCreateAgentHost( | 498 : DevToolsTargetImpl(AgentHostDelegate::GetOrCreateAgentHost( |
| 507 bridge, | 499 bridge, |
| 508 BuildUniqueTargetId(browser_id, value), | 500 BuildUniqueTargetId(browser_id, value), |
| 509 browser_id, | 501 browser_id, |
| 510 GetDebugURL(value), | 502 GetDebugURL(value))), |
| 511 is_web_view)), | |
| 512 bridge_(bridge->AsWeakPtr()), | 503 bridge_(bridge->AsWeakPtr()), |
| 513 browser_id_(browser_id), | 504 browser_id_(browser_id), |
| 514 debug_url_(GetDebugURL(value)), | 505 debug_url_(GetDebugURL(value)), |
| 515 frontend_url_(GetFrontendURL(value)), | 506 frontend_url_(GetFrontendURL(value)), |
| 516 remote_id_(GetStringProperty(value, "id")), | 507 remote_id_(GetStringProperty(value, "id")), |
| 517 remote_type_(GetStringProperty(value, "type")), | 508 remote_type_(GetStringProperty(value, "type")), |
| 518 local_id_(BuildUniqueTargetId(browser_id, value)) { | 509 local_id_(BuildUniqueTargetId(browser_id, value)) { |
| 519 set_type("adb_page"); | 510 set_type("adb_page"); |
| 520 set_url(GURL(GetStringProperty(value, "url"))); | 511 set_url(GURL(GetStringProperty(value, "url"))); |
| 521 set_title(base::UTF16ToUTF8(net::UnescapeForHTML(base::UTF8ToUTF16( | 512 set_title(base::UTF16ToUTF8(net::UnescapeForHTML(base::UTF8ToUTF16( |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 581 return; | 572 return; |
| 582 | 573 |
| 583 scoped_ptr<base::DictionaryValue> params(new base::DictionaryValue); | 574 scoped_ptr<base::DictionaryValue> params(new base::DictionaryValue); |
| 584 params->SetString(kUrlParam, url); | 575 params->SetString(kUrlParam, url); |
| 585 bridge_->SendProtocolCommand(browser_id_, debug_url_, kPageNavigateCommand, | 576 bridge_->SendProtocolCommand(browser_id_, debug_url_, kPageNavigateCommand, |
| 586 params.Pass(), callback); | 577 params.Pass(), callback); |
| 587 } | 578 } |
| 588 | 579 |
| 589 // DevToolsAndroidBridge::RemotePage ------------------------------------------ | 580 // DevToolsAndroidBridge::RemotePage ------------------------------------------ |
| 590 | 581 |
| 591 DevToolsAndroidBridge::RemotePage::RemotePage( | 582 DevToolsAndroidBridge::RemotePage::RemotePage(const BrowserId& browser_id, |
| 592 const BrowserId& browser_id, | 583 const base::DictionaryValue& dict) |
| 593 const base::DictionaryValue& dict, | |
| 594 bool is_web_view) | |
| 595 : browser_id_(browser_id), | 584 : browser_id_(browser_id), |
| 596 frontend_url_(GetFrontendURL(dict)), | 585 frontend_url_(GetFrontendURL(dict)), |
| 597 is_web_view_(is_web_view), | |
| 598 dict_(dict.DeepCopy()) { | 586 dict_(dict.DeepCopy()) { |
| 599 } | 587 } |
| 600 | 588 |
| 601 DevToolsAndroidBridge::RemotePage::~RemotePage() { | 589 DevToolsAndroidBridge::RemotePage::~RemotePage() { |
| 602 } | 590 } |
| 603 | 591 |
| 604 // DevToolsAndroidBridge::RemoteBrowser --------------------------------------- | 592 // DevToolsAndroidBridge::RemoteBrowser --------------------------------------- |
| 605 | 593 |
| 606 DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser( | 594 DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser( |
| 607 const std::string& serial, | 595 const std::string& serial, |
| 608 const AndroidDeviceManager::BrowserInfo& browser_info) | 596 const AndroidDeviceManager::BrowserInfo& browser_info) |
| 609 : browser_id_(std::make_pair(serial, browser_info.socket_name)), | 597 : browser_id_(std::make_pair(serial, browser_info.socket_name)), |
| 610 display_name_(browser_info.display_name), | 598 display_name_(browser_info.display_name), |
| 611 user_(browser_info.user), | 599 user_(browser_info.user), |
| 612 type_(browser_info.type) { | 600 type_(browser_info.type) { |
| 613 } | 601 } |
| 614 | 602 |
| 615 bool DevToolsAndroidBridge::RemoteBrowser::IsChrome() { | 603 bool DevToolsAndroidBridge::RemoteBrowser::IsChrome() { |
| 616 return type_ == AndroidDeviceManager::BrowserInfo::kTypeChrome; | 604 return type_ == AndroidDeviceManager::BrowserInfo::kTypeChrome; |
|
dgozman
2015/03/25 16:11:50
Let's remove |type| everywhere, move GetBrowserTyp
vkuzkokov
2015/03/26 09:46:31
Moving GetBrowserType here would require splitting
| |
| 617 } | 605 } |
| 618 | 606 |
| 619 bool DevToolsAndroidBridge::RemoteBrowser::IsWebView() { | |
| 620 return type_ == AndroidDeviceManager::BrowserInfo::kTypeWebView; | |
| 621 } | |
| 622 | |
| 623 std::string DevToolsAndroidBridge::RemoteBrowser::GetId() { | 607 std::string DevToolsAndroidBridge::RemoteBrowser::GetId() { |
| 624 return serial() + ":" + socket(); | 608 return serial() + ":" + socket(); |
| 625 } | 609 } |
| 626 | 610 |
| 627 DevToolsAndroidBridge::RemoteBrowser::ParsedVersion | 611 DevToolsAndroidBridge::RemoteBrowser::ParsedVersion |
| 628 DevToolsAndroidBridge::RemoteBrowser::GetParsedVersion() { | 612 DevToolsAndroidBridge::RemoteBrowser::GetParsedVersion() { |
| 629 ParsedVersion result; | 613 ParsedVersion result; |
| 630 std::vector<std::string> parts; | 614 std::vector<std::string> parts; |
| 631 Tokenize(version_, ".", &parts); | 615 Tokenize(version_, ".", &parts); |
| 632 for (size_t i = 0; i != parts.size(); ++i) { | 616 for (size_t i = 0; i != parts.size(); ++i) { |
| 633 int value = 0; | 617 int value = 0; |
| 634 base::StringToInt(parts[i], &value); | 618 base::StringToInt(parts[i], &value); |
| 635 result.push_back(value); | 619 result.push_back(value); |
| 636 } | 620 } |
| 637 return result; | 621 return result; |
| 638 } | 622 } |
| 639 | 623 |
| 640 DevToolsTargetImpl* | 624 DevToolsTargetImpl* |
| 641 DevToolsAndroidBridge::CreatePageTarget(scoped_refptr<RemotePage> page) { | 625 DevToolsAndroidBridge::CreatePageTarget(scoped_refptr<RemotePage> page) { |
| 642 return new RemotePageTarget(this, page->browser_id_, *page->dict_, | 626 return new RemotePageTarget(this, page->browser_id_, *page->dict_); |
| 643 page->is_web_view_); | |
| 644 } | 627 } |
| 645 | 628 |
| 646 void DevToolsAndroidBridge::SendJsonRequest( | 629 void DevToolsAndroidBridge::SendJsonRequest( |
| 647 const BrowserId& browser_id, | 630 const BrowserId& browser_id, |
| 648 const std::string& request, | 631 const std::string& request, |
| 649 const JsonRequestCallback& callback) { | 632 const JsonRequestCallback& callback) { |
| 650 scoped_refptr<AndroidDeviceManager::Device> device( | 633 scoped_refptr<AndroidDeviceManager::Device> device( |
| 651 FindDevice(browser_id.first)); | 634 FindDevice(browser_id.first)); |
| 652 if (!device.get()) { | 635 if (!device.get()) { |
| 653 callback.Run(net::ERR_FAILED, std::string()); | 636 callback.Run(net::ERR_FAILED, std::string()); |
| (...skipping 23 matching lines...) Expand all Loading... | |
| 677 callback); | 660 callback); |
| 678 } | 661 } |
| 679 | 662 |
| 680 scoped_refptr<content::DevToolsAgentHost> | 663 scoped_refptr<content::DevToolsAgentHost> |
| 681 DevToolsAndroidBridge::GetBrowserAgentHost( | 664 DevToolsAndroidBridge::GetBrowserAgentHost( |
| 682 scoped_refptr<RemoteBrowser> browser) { | 665 scoped_refptr<RemoteBrowser> browser) { |
| 683 return AgentHostDelegate::GetOrCreateAgentHost( | 666 return AgentHostDelegate::GetOrCreateAgentHost( |
| 684 this, | 667 this, |
| 685 "adb:" + browser->serial() + ":" + browser->socket(), | 668 "adb:" + browser->serial() + ":" + browser->socket(), |
| 686 browser->browser_id_, | 669 browser->browser_id_, |
| 687 kBrowserTargetSocket, | 670 kBrowserTargetSocket); |
| 688 browser->IsWebView()); | |
| 689 } | 671 } |
| 690 | 672 |
| 691 void DevToolsAndroidBridge::SendJsonRequest( | 673 void DevToolsAndroidBridge::SendJsonRequest( |
| 692 const std::string& browser_id_str, | 674 const std::string& browser_id_str, |
| 693 const std::string& url, | 675 const std::string& url, |
| 694 const JsonRequestCallback& callback) { | 676 const JsonRequestCallback& callback) { |
| 695 BrowserId browser_id; | 677 BrowserId browser_id; |
| 696 if (!BrowserIdFromString(browser_id_str, &browser_id)) { | 678 if (!BrowserIdFromString(browser_id_str, &browser_id)) { |
| 697 callback.Run(net::ERR_FAILED, std::string()); | 679 callback.Run(net::ERR_FAILED, std::string()); |
| 698 return; | 680 return; |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 711 const RemotePageCallback& callback, | 693 const RemotePageCallback& callback, |
| 712 int result, | 694 int result, |
| 713 const std::string& response) { | 695 const std::string& response) { |
| 714 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 696 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 715 if (result < 0) { | 697 if (result < 0) { |
| 716 callback.Run(NULL); | 698 callback.Run(NULL); |
| 717 return; | 699 return; |
| 718 } | 700 } |
| 719 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 701 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
| 720 base::DictionaryValue* dict; | 702 base::DictionaryValue* dict; |
| 721 if (value && value->GetAsDictionary(&dict)) { | 703 if (value && value->GetAsDictionary(&dict)) |
| 722 scoped_refptr<RemotePage> new_page( | 704 callback.Run(new RemotePage(browser->browser_id_, *dict)); |
| 723 new RemotePage(browser->browser_id_, *dict, browser->IsWebView())); | |
| 724 callback.Run(new_page); | |
| 725 } | |
| 726 } | 705 } |
| 727 | 706 |
| 728 void DevToolsAndroidBridge::OpenRemotePage( | 707 void DevToolsAndroidBridge::OpenRemotePage( |
| 729 scoped_refptr<RemoteBrowser> browser, | 708 scoped_refptr<RemoteBrowser> browser, |
| 730 const std::string& input_url, | 709 const std::string& input_url, |
| 731 const DevToolsAndroidBridge::RemotePageCallback& callback) { | 710 const DevToolsAndroidBridge::RemotePageCallback& callback) { |
| 732 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 711 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 733 GURL gurl(input_url); | 712 GURL gurl(input_url); |
| 734 if (!gurl.is_valid()) { | 713 if (!gurl.is_valid()) { |
| 735 gurl = GURL("http://" + input_url); | 714 gurl = GURL("http://" + input_url); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 778 scoped_refptr<RemoteBrowser> browser, | 757 scoped_refptr<RemoteBrowser> browser, |
| 779 const RemotePageCallback& callback, | 758 const RemotePageCallback& callback, |
| 780 int result, | 759 int result, |
| 781 const std::string& response, | 760 const std::string& response, |
| 782 const std::string& url) { | 761 const std::string& url) { |
| 783 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 762 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 784 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); | 763 scoped_ptr<base::Value> value(base::JSONReader::Read(response)); |
| 785 base::DictionaryValue* dict; | 764 base::DictionaryValue* dict; |
| 786 | 765 |
| 787 if (value && value->GetAsDictionary(&dict)) { | 766 if (value && value->GetAsDictionary(&dict)) { |
| 788 RemotePageTarget new_page(this, browser->browser_id_, *dict, | 767 RemotePageTarget new_page(this, browser->browser_id_, *dict); |
| 789 browser->IsWebView()); | |
| 790 new_page.Navigate(url, | 768 new_page.Navigate(url, |
| 791 base::Bind(&DevToolsAndroidBridge::RespondToOpenOnUIThread, | 769 base::Bind(&DevToolsAndroidBridge::RespondToOpenOnUIThread, |
| 792 AsWeakPtr(), browser, callback, result, response)); | 770 AsWeakPtr(), browser, callback, result, response)); |
| 793 } | 771 } |
| 794 } | 772 } |
| 795 | 773 |
| 796 DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() { | 774 DevToolsAndroidBridge::RemoteBrowser::~RemoteBrowser() { |
| 797 } | 775 } |
| 798 | 776 |
| 799 // DevToolsAndroidBridge::RemoteDevice ---------------------------------------- | 777 // DevToolsAndroidBridge::RemoteDevice ---------------------------------------- |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1034 device_providers.push_back( | 1012 device_providers.push_back( |
| 1035 new WebRTCDeviceProvider(profile_, signin_manager_, token_service_)); | 1013 new WebRTCDeviceProvider(profile_, signin_manager_, token_service_)); |
| 1036 } | 1014 } |
| 1037 | 1015 |
| 1038 device_manager_->SetDeviceProviders(device_providers); | 1016 device_manager_->SetDeviceProviders(device_providers); |
| 1039 if (NeedsDeviceListPolling()) { | 1017 if (NeedsDeviceListPolling()) { |
| 1040 StopDeviceListPolling(); | 1018 StopDeviceListPolling(); |
| 1041 StartDeviceListPolling(); | 1019 StartDeviceListPolling(); |
| 1042 } | 1020 } |
| 1043 } | 1021 } |
| OLD | NEW |