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_CURRENTLY_ON(BrowserThread::UI); | 190 DCHECK_CURRENTLY_ON(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_CURRENTLY_ON(BrowserThread::UI); | 347 DCHECK_CURRENTLY_ON(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; |
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_CURRENTLY_ON(BrowserThread::UI); | 696 DCHECK_CURRENTLY_ON(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_CURRENTLY_ON(BrowserThread::UI); | 711 DCHECK_CURRENTLY_ON(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_CURRENTLY_ON(BrowserThread::UI); | 762 DCHECK_CURRENTLY_ON(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 |