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

Side by Side Diff: chrome/browser/devtools/device/devtools_android_bridge.cc

Issue 2289773002: Revert of DevTools: merge devtools target with devtools host, part 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 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 <stddef.h> 7 #include <stddef.h>
8 #include <algorithm> 8 #include <algorithm>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 #include "content/public/browser/user_metrics.h" 48 #include "content/public/browser/user_metrics.h"
49 #include "net/base/escape.h" 49 #include "net/base/escape.h"
50 #include "net/base/host_port_pair.h" 50 #include "net/base/host_port_pair.h"
51 #include "net/base/net_errors.h" 51 #include "net/base/net_errors.h"
52 52
53 #if defined(ENABLE_SERVICE_DISCOVERY) 53 #if defined(ENABLE_SERVICE_DISCOVERY)
54 #include "chrome/browser/devtools/device/cast_device_provider.h" 54 #include "chrome/browser/devtools/device/cast_device_provider.h"
55 #endif 55 #endif
56 56
57 using content::BrowserThread; 57 using content::BrowserThread;
58 using content::DevToolsAgentHost;
59 58
60 namespace { 59 namespace {
61 60
62 const char kPageListRequest[] = "/json"; 61 const char kPageListRequest[] = "/json";
63 const char kVersionRequest[] = "/json/version"; 62 const char kVersionRequest[] = "/json/version";
64 const char kClosePageRequest[] = "/json/close/%s"; 63 const char kClosePageRequest[] = "/json/close/%s";
65 const char kNewPageRequestWithURL[] = "/json/new?%s"; 64 const char kNewPageRequestWithURL[] = "/json/new?%s";
66 const char kActivatePageRequest[] = "/json/activate/%s"; 65 const char kActivatePageRequest[] = "/json/activate/%s";
67 const char kBrowserTargetSocket[] = "/devtools/browser"; 66 const char kBrowserTargetSocket[] = "/devtools/browser";
68 const int kAdbPollingIntervalMs = 1000; 67 const int kAdbPollingIntervalMs = 1000;
69 68
70 const char kPageReloadCommand[] = "Page.reload"; 69 const char kPageReloadCommand[] = "Page.reload";
71 70
72 const char kWebViewSocketPrefix[] = "webview_devtools_remote"; 71 const char kWebViewSocketPrefix[] = "webview_devtools_remote";
73 72
74 bool BrowserIdFromString(const std::string& browser_id_str, 73 bool BrowserIdFromString(const std::string& browser_id_str,
75 DevToolsAndroidBridge::BrowserId* browser_id) { 74 DevToolsAndroidBridge::BrowserId* browser_id) {
76 size_t colon_pos = browser_id_str.find(':'); 75 size_t colon_pos = browser_id_str.find(':');
77 if (colon_pos == std::string::npos) 76 if (colon_pos == std::string::npos)
78 return false; 77 return false;
79 browser_id->first = browser_id_str.substr(0, colon_pos); 78 browser_id->first = browser_id_str.substr(0, colon_pos);
80 browser_id->second = browser_id_str.substr(colon_pos + 1); 79 browser_id->second = browser_id_str.substr(colon_pos + 1);
81 return true; 80 return true;
82 } 81 }
83 82
84 static void NoOp(int, const std::string&) {}
85
86 } // namespace 83 } // namespace
87 84
88 // DiscoveryRequest ----------------------------------------------------- 85 // DiscoveryRequest -----------------------------------------------------
89 86
90 class DevToolsAndroidBridge::DiscoveryRequest 87 class DevToolsAndroidBridge::DiscoveryRequest
91 : public base::RefCountedThreadSafe<DiscoveryRequest, 88 : public base::RefCountedThreadSafe<DiscoveryRequest,
92 BrowserThread::DeleteOnUIThread> { 89 BrowserThread::DeleteOnUIThread> {
93 public: 90 public:
94 DiscoveryRequest(AndroidDeviceManager* device_manager, 91 DiscoveryRequest(AndroidDeviceManager* device_manager,
95 const DeviceListCallback& callback); 92 const DeviceListCallback& callback);
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after
286 } 283 }
287 284
288 // AgentHostDelegate ---------------------------------------------------------- 285 // AgentHostDelegate ----------------------------------------------------------
289 286
290 class DevToolsAndroidBridge::AgentHostDelegate 287 class DevToolsAndroidBridge::AgentHostDelegate
291 : public content::DevToolsExternalAgentProxyDelegate, 288 : public content::DevToolsExternalAgentProxyDelegate,
292 public AndroidDeviceManager::AndroidWebSocket::Delegate { 289 public AndroidDeviceManager::AndroidWebSocket::Delegate {
293 public: 290 public:
294 static scoped_refptr<content::DevToolsAgentHost> GetOrCreateAgentHost( 291 static scoped_refptr<content::DevToolsAgentHost> GetOrCreateAgentHost(
295 DevToolsAndroidBridge* bridge, 292 DevToolsAndroidBridge* bridge,
293 const std::string& id,
296 const BrowserId& browser_id, 294 const BrowserId& browser_id,
297 const std::string& local_id, 295 const std::string& target_path);
298 const std::string& target_path,
299 const std::string& type,
300 base::DictionaryValue* value);
301 296
302 private: 297 private:
303 AgentHostDelegate( 298 AgentHostDelegate(
304 DevToolsAndroidBridge* bridge, 299 DevToolsAndroidBridge* bridge,
300 const std::string& id,
305 const BrowserId& browser_id, 301 const BrowserId& browser_id,
306 const std::string& local_id, 302 const std::string& target_path);
307 const std::string& target_path,
308 const std::string& type,
309 base::DictionaryValue* value);
310 ~AgentHostDelegate() override; 303 ~AgentHostDelegate() override;
311 // DevToolsExternalAgentProxyDelegate overrides.
312 void Attach(content::DevToolsExternalAgentProxy* proxy) override; 304 void Attach(content::DevToolsExternalAgentProxy* proxy) override;
313 void Detach() override; 305 void Detach() override;
314 std::string GetId() override;
315 std::string GetType() override;
316 std::string GetTitle() override;
317 std::string GetDescription() override;
318 GURL GetURL() override;
319 GURL GetFaviconURL() override;
320 bool Activate() override;
321 bool Inspect() override;
322 void Reload() override;
323 bool Close() override;
324 void SendMessageToBackend(const std::string& message) override; 306 void SendMessageToBackend(const std::string& message) override;
325
326 void OnSocketOpened() override; 307 void OnSocketOpened() override;
327 void OnFrameRead(const std::string& message) override; 308 void OnFrameRead(const std::string& message) override;
328 void OnSocketClosed() override; 309 void OnSocketClosed() override;
329 310
311 std::string id_;
330 base::WeakPtr<DevToolsAndroidBridge> bridge_; 312 base::WeakPtr<DevToolsAndroidBridge> bridge_;
331 BrowserId browser_id_; 313 BrowserId browser_id_;
332 std::string local_id_;
333 std::string target_path_; 314 std::string target_path_;
334 std::string remote_type_;
335 std::string remote_id_;
336 std::string frontend_url_;
337 std::string title_;
338 std::string description_;
339 GURL url_;
340 GURL favicon_url_;
341 bool socket_opened_; 315 bool socket_opened_;
342 std::vector<std::string> pending_messages_; 316 std::vector<std::string> pending_messages_;
343 scoped_refptr<AndroidDeviceManager::Device> device_; 317 scoped_refptr<AndroidDeviceManager::Device> device_;
344 std::unique_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_; 318 std::unique_ptr<AndroidDeviceManager::AndroidWebSocket> web_socket_;
345 content::DevToolsAgentHost* agent_host_; 319 content::DevToolsAgentHost* agent_host_;
346 content::DevToolsExternalAgentProxy* proxy_; 320 content::DevToolsExternalAgentProxy* proxy_;
347 DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate); 321 DISALLOW_COPY_AND_ASSIGN(AgentHostDelegate);
348 }; 322 };
349 323
350 static std::string GetStringProperty(base::DictionaryValue* value,
351 const std::string& name) {
352 std::string result;
353 value->GetString(name, &result);
354 return result;
355 }
356
357 static std::string BuildUniqueTargetId(
358 const DevToolsAndroidBridge::BrowserId& browser_id,
359 base::DictionaryValue* value) {
360 return base::StringPrintf("%s:%s:%s", browser_id.first.c_str(),
361 browser_id.second.c_str(), GetStringProperty(value, "id").c_str());
362 }
363
364 static std::string GetFrontendURL(base::DictionaryValue* value) {
365 std::string frontend_url = GetStringProperty(value, "devtoolsFrontendUrl");
366 size_t ws_param = frontend_url.find("?ws");
367 if (ws_param != std::string::npos)
368 frontend_url = frontend_url.substr(0, ws_param);
369 if (base::StartsWith(frontend_url, "http:", base::CompareCase::SENSITIVE))
370 frontend_url = "https:" + frontend_url.substr(5);
371 return frontend_url;
372 }
373
374 static std::string GetTargetPath(base::DictionaryValue* value) {
375 std::string target_path = GetStringProperty(value, "webSocketDebuggerUrl");
376
377 if (base::StartsWith(target_path, "ws://", base::CompareCase::SENSITIVE)) {
378 size_t pos = target_path.find("/", 5);
379 if (pos == std::string::npos)
380 pos = 5;
381 target_path = target_path.substr(pos);
382 } else {
383 target_path = std::string();
384 }
385 return target_path;
386 }
387
388 // static 324 // static
389 scoped_refptr<content::DevToolsAgentHost> 325 scoped_refptr<content::DevToolsAgentHost>
390 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost( 326 DevToolsAndroidBridge::AgentHostDelegate::GetOrCreateAgentHost(
391 DevToolsAndroidBridge* bridge, 327 DevToolsAndroidBridge* bridge,
328 const std::string& id,
392 const BrowserId& browser_id, 329 const BrowserId& browser_id,
393 const std::string& local_id, 330 const std::string& target_path) {
394 const std::string& target_path,
395 const std::string& type,
396 base::DictionaryValue* value) {
397 DCHECK_CURRENTLY_ON(BrowserThread::UI); 331 DCHECK_CURRENTLY_ON(BrowserThread::UI);
398 AgentHostDelegates::iterator it = bridge->host_delegates_.find(local_id); 332 AgentHostDelegates::iterator it = bridge->host_delegates_.find(id);
399 if (it != bridge->host_delegates_.end()) 333 if (it != bridge->host_delegates_.end())
400 return it->second->agent_host_; 334 return it->second->agent_host_;
401 335
402 AgentHostDelegate* delegate = new AgentHostDelegate( 336 AgentHostDelegate* delegate =
403 bridge, browser_id, local_id, target_path, type, value); 337 new AgentHostDelegate(bridge, id, browser_id, target_path);
404 scoped_refptr<content::DevToolsAgentHost> result = 338 scoped_refptr<content::DevToolsAgentHost> result =
405 content::DevToolsAgentHost::Create(delegate); 339 content::DevToolsAgentHost::Create(delegate);
406 delegate->agent_host_ = result.get(); 340 delegate->agent_host_ = result.get();
407 return result; 341 return result;
408 } 342 }
409 343
410 DevToolsAndroidBridge::AgentHostDelegate::AgentHostDelegate( 344 DevToolsAndroidBridge::AgentHostDelegate::AgentHostDelegate(
411 DevToolsAndroidBridge* bridge, 345 DevToolsAndroidBridge* bridge,
346 const std::string& id,
412 const BrowserId& browser_id, 347 const BrowserId& browser_id,
413 const std::string& local_id, 348 const std::string& target_path)
414 const std::string& target_path, 349 : id_(id),
415 const std::string& type, 350 bridge_(bridge->AsWeakPtr()),
416 base::DictionaryValue* value)
417 : bridge_(bridge->AsWeakPtr()),
418 browser_id_(browser_id), 351 browser_id_(browser_id),
419 local_id_(local_id),
420 target_path_(target_path), 352 target_path_(target_path),
421 remote_type_(type),
422 remote_id_(value ? GetStringProperty(value, "id") : ""),
423 frontend_url_(value ? GetFrontendURL(value) : ""),
424 title_(value ? base::UTF16ToUTF8(net::UnescapeForHTML(base::UTF8ToUTF16(
425 GetStringProperty(value, "title")))) : ""),
426 description_(value ? GetStringProperty(value, "description") : ""),
427 url_(GURL(value ? GetStringProperty(value, "url") : "")),
428 favicon_url_(GURL(value ? GetStringProperty(value, "faviconUrl") : "")),
429 socket_opened_(false), 353 socket_opened_(false),
430 agent_host_(NULL), 354 agent_host_(NULL),
431 proxy_(NULL) { 355 proxy_(NULL) {
432 bridge_->host_delegates_[local_id_] = this; 356 bridge_->host_delegates_[id] = this;
433 } 357 }
434 358
435 DevToolsAndroidBridge::AgentHostDelegate::~AgentHostDelegate() { 359 DevToolsAndroidBridge::AgentHostDelegate::~AgentHostDelegate() {
436 if (bridge_) 360 if (bridge_)
437 bridge_->host_delegates_.erase(local_id_); 361 bridge_->host_delegates_.erase(id_);
438 } 362 }
439 363
440 void DevToolsAndroidBridge::AgentHostDelegate::Attach( 364 void DevToolsAndroidBridge::AgentHostDelegate::Attach(
441 content::DevToolsExternalAgentProxy* proxy) { 365 content::DevToolsExternalAgentProxy* proxy) {
442 proxy_ = proxy; 366 proxy_ = proxy;
443 content::RecordAction( 367 content::RecordAction(
444 base::StartsWith(browser_id_.second, kWebViewSocketPrefix, 368 base::StartsWith(browser_id_.second, kWebViewSocketPrefix,
445 base::CompareCase::SENSITIVE) 369 base::CompareCase::SENSITIVE)
446 ? base::UserMetricsAction("DevTools_InspectAndroidWebView") 370 ? base::UserMetricsAction("DevTools_InspectAndroidWebView")
447 : base::UserMetricsAction("DevTools_InspectAndroidPage")); 371 : base::UserMetricsAction("DevTools_InspectAndroidPage"));
448 372
449 // Retain the device so it's not released until AgentHost is detached. 373 // Retain the device so it's not released until AgentHost is detached.
450 if (bridge_) 374 if (bridge_)
451 device_ = bridge_->FindDevice(browser_id_.first); 375 device_ = bridge_->FindDevice(browser_id_.first);
452 if (!device_.get()) 376 if (!device_.get())
453 return; 377 return;
454 378
455 web_socket_.reset( 379 web_socket_.reset(
456 device_->CreateWebSocket(browser_id_.second, target_path_, this)); 380 device_->CreateWebSocket(browser_id_.second, target_path_, this));
457 } 381 }
458 382
459 void DevToolsAndroidBridge::AgentHostDelegate::Detach() { 383 void DevToolsAndroidBridge::AgentHostDelegate::Detach() {
460 web_socket_.reset(); 384 web_socket_.reset();
461 device_ = nullptr; 385 device_ = nullptr;
462 proxy_ = nullptr; 386 proxy_ = nullptr;
463 } 387 }
464 388
465 std::string DevToolsAndroidBridge::AgentHostDelegate::GetId() {
466 return local_id_;
467 }
468
469 std::string DevToolsAndroidBridge::AgentHostDelegate::GetType() {
470 return remote_type_;
471 }
472
473 std::string DevToolsAndroidBridge::AgentHostDelegate::GetTitle() {
474 return title_;
475 }
476
477 std::string DevToolsAndroidBridge::AgentHostDelegate::GetDescription() {
478 return description_;
479 }
480
481 GURL DevToolsAndroidBridge::AgentHostDelegate::GetURL() {
482 return url_;
483 }
484
485 GURL DevToolsAndroidBridge::AgentHostDelegate::GetFaviconURL() {
486 return favicon_url_;
487 }
488
489 bool DevToolsAndroidBridge::AgentHostDelegate::Activate() {
490 if (!bridge_)
491 return false;
492
493 std::string request = base::StringPrintf(kActivatePageRequest,
494 remote_id_.c_str());
495 bridge_->SendJsonRequest(browser_id_, request, base::Bind(&NoOp));
496 return true;
497 }
498
499 bool DevToolsAndroidBridge::AgentHostDelegate::Inspect() {
500 Activate();
501 bool is_worker = remote_type_ == DevToolsAgentHost::kTypeServiceWorker ||
502 remote_type_ == DevToolsAgentHost::kTypeSharedWorker;
503 bool is_v8_only = remote_type_ == "node";
504 DevToolsWindow::OpenExternalFrontend(bridge_->profile_, frontend_url_,
505 agent_host_, is_worker, is_v8_only);
506 return true;
507 }
508
509 void DevToolsAndroidBridge::AgentHostDelegate::Reload() {
510 if (!bridge_)
511 return;
512
513 bridge_->SendProtocolCommand(browser_id_, target_path_, kPageReloadCommand,
514 nullptr, base::Closure());
515 }
516
517 bool DevToolsAndroidBridge::AgentHostDelegate::Close() {
518 if (!bridge_)
519 return false;
520
521 std::string request = base::StringPrintf(kClosePageRequest,
522 remote_id_.c_str());
523 bridge_->SendJsonRequest(browser_id_, request, base::Bind(&NoOp));
524 return true;
525 }
526
527 void DevToolsAndroidBridge::AgentHostDelegate::SendMessageToBackend( 389 void DevToolsAndroidBridge::AgentHostDelegate::SendMessageToBackend(
528 const std::string& message) { 390 const std::string& message) {
529 // We could have detached due to physical connection being closed. 391 // We could have detached due to physical connection being closed.
530 if (!proxy_) 392 if (!proxy_)
531 return; 393 return;
532 if (socket_opened_) 394 if (socket_opened_)
533 web_socket_->SendFrame(message); 395 web_socket_->SendFrame(message);
534 else 396 else
535 pending_messages_.push_back(message); 397 pending_messages_.push_back(message);
536 } 398 }
(...skipping 15 matching lines...) Expand all
552 414
553 void DevToolsAndroidBridge::AgentHostDelegate::OnSocketClosed() { 415 void DevToolsAndroidBridge::AgentHostDelegate::OnSocketClosed() {
554 if (proxy_) { 416 if (proxy_) {
555 std::string message = "{ \"method\": \"Inspector.detached\", " 417 std::string message = "{ \"method\": \"Inspector.detached\", "
556 "\"params\": { \"reason\": \"Connection lost.\"} }"; 418 "\"params\": { \"reason\": \"Connection lost.\"} }";
557 proxy_->DispatchOnClientHost(message); 419 proxy_->DispatchOnClientHost(message);
558 Detach(); 420 Detach();
559 } 421 }
560 } 422 }
561 423
424 //// RemotePageTarget ----------------------------------------------
425
426 class DevToolsAndroidBridge::RemotePageTarget : public DevToolsTargetImpl {
427 public:
428 RemotePageTarget(DevToolsAndroidBridge* bridge,
429 const BrowserId& browser_id,
430 const base::DictionaryValue& value);
431 ~RemotePageTarget() override;
432
433 // DevToolsTargetImpl overrides.
434 std::string GetId() const override;
435 bool IsAttached() const override;
436 bool Activate() const override;
437 bool Close() const override;
438 void Inspect(Profile* profile) const override;
439 void Reload() const override;
440
441 private:
442 base::WeakPtr<DevToolsAndroidBridge> bridge_;
443 BrowserId browser_id_;
444 std::string target_path_;
445 std::string frontend_url_;
446 std::string remote_id_;
447 std::string remote_type_;
448 std::string local_id_;
449 DISALLOW_COPY_AND_ASSIGN(RemotePageTarget);
450 };
451
452 static std::string GetStringProperty(const base::DictionaryValue& value,
453 const std::string& name) {
454 std::string result;
455 value.GetString(name, &result);
456 return result;
457 }
458
459 static std::string BuildUniqueTargetId(
460 const DevToolsAndroidBridge::BrowserId& browser_id,
461 const base::DictionaryValue& value) {
462 return base::StringPrintf("%s:%s:%s", browser_id.first.c_str(),
463 browser_id.second.c_str(), GetStringProperty(value, "id").c_str());
464 }
465
466 static std::string GetFrontendURL(const base::DictionaryValue& value) {
467 std::string frontend_url = GetStringProperty(value, "devtoolsFrontendUrl");
468 size_t ws_param = frontend_url.find("?ws");
469 if (ws_param != std::string::npos)
470 frontend_url = frontend_url.substr(0, ws_param);
471 if (base::StartsWith(frontend_url, "http:", base::CompareCase::SENSITIVE))
472 frontend_url = "https:" + frontend_url.substr(5);
473 return frontend_url;
474 }
475
476 static std::string GetTargetPath(const base::DictionaryValue& value) {
477 std::string target_path = GetStringProperty(value, "webSocketDebuggerUrl");
478
479 if (base::StartsWith(target_path, "ws://", base::CompareCase::SENSITIVE)) {
480 size_t pos = target_path.find("/", 5);
481 if (pos == std::string::npos)
482 pos = 5;
483 target_path = target_path.substr(pos);
484 } else {
485 target_path = std::string();
486 }
487 return target_path;
488 }
489
490 DevToolsAndroidBridge::RemotePageTarget::RemotePageTarget(
491 DevToolsAndroidBridge* bridge,
492 const BrowserId& browser_id,
493 const base::DictionaryValue& value)
494 : DevToolsTargetImpl(AgentHostDelegate::GetOrCreateAgentHost(
495 bridge,
496 BuildUniqueTargetId(browser_id, value),
497 browser_id,
498 GetTargetPath(value))),
499 bridge_(bridge->AsWeakPtr()),
500 browser_id_(browser_id),
501 target_path_(GetTargetPath(value)),
502 frontend_url_(GetFrontendURL(value)),
503 remote_id_(GetStringProperty(value, "id")),
504 remote_type_(GetStringProperty(value, "type")),
505 local_id_(BuildUniqueTargetId(browser_id, value)) {
506 set_type("adb_page");
507 set_url(GURL(GetStringProperty(value, "url")));
508 set_title(base::UTF16ToUTF8(net::UnescapeForHTML(base::UTF8ToUTF16(
509 GetStringProperty(value, "title")))));
510 set_description(GetStringProperty(value, "description"));
511 set_favicon_url(GURL(GetStringProperty(value, "faviconUrl")));
512 target_path_ = GetTargetPath(value);
513 }
514
515 DevToolsAndroidBridge::RemotePageTarget::~RemotePageTarget() {
516 }
517
518 std::string DevToolsAndroidBridge::RemotePageTarget::GetId() const {
519 return local_id_;
520 }
521
522 bool DevToolsAndroidBridge::RemotePageTarget::IsAttached() const {
523 return target_path_.empty();
524 }
525
526 static void NoOp(int, const std::string&) {}
527
528 void DevToolsAndroidBridge::RemotePageTarget::Inspect(Profile* profile) const {
529 Activate();
530 bool is_worker = remote_type_ == kTargetTypeWorker ||
531 remote_type_ == kTargetTypeServiceWorker;
532 bool is_v8_only = remote_type_ == kTargetTypeNode;
533 DevToolsWindow::OpenExternalFrontend(profile, frontend_url_, GetAgentHost(),
534 is_worker, is_v8_only);
535 }
536
537 bool DevToolsAndroidBridge::RemotePageTarget::Activate() const {
538 if (!bridge_)
539 return false;
540
541 std::string request = base::StringPrintf(kActivatePageRequest,
542 remote_id_.c_str());
543 bridge_->SendJsonRequest(browser_id_, request, base::Bind(&NoOp));
544 return true;
545 }
546
547 bool DevToolsAndroidBridge::RemotePageTarget::Close() const {
548 if (!bridge_)
549 return false;
550
551 std::string request = base::StringPrintf(kClosePageRequest,
552 remote_id_.c_str());
553 bridge_->SendJsonRequest(browser_id_, request, base::Bind(&NoOp));
554 return true;
555 }
556
557 void DevToolsAndroidBridge::RemotePageTarget::Reload() const {
558 if (!bridge_)
559 return;
560
561 bridge_->SendProtocolCommand(browser_id_, target_path_, kPageReloadCommand,
562 NULL, base::Closure());
563 }
564
562 // DevToolsAndroidBridge::RemotePage ------------------------------------------ 565 // DevToolsAndroidBridge::RemotePage ------------------------------------------
563 566
564 DevToolsAndroidBridge::RemotePage::RemotePage(const BrowserId& browser_id, 567 DevToolsAndroidBridge::RemotePage::RemotePage(const BrowserId& browser_id,
565 const base::DictionaryValue& dict) 568 const base::DictionaryValue& dict)
566 : browser_id_(browser_id), 569 : browser_id_(browser_id),
570 frontend_url_(GetFrontendURL(dict)),
567 dict_(dict.DeepCopy()) { 571 dict_(dict.DeepCopy()) {
568 } 572 }
569 573
570 DevToolsAndroidBridge::RemotePage::~RemotePage() { 574 DevToolsAndroidBridge::RemotePage::~RemotePage() {
571 } 575 }
572 576
573 // DevToolsAndroidBridge::RemoteBrowser --------------------------------------- 577 // DevToolsAndroidBridge::RemoteBrowser ---------------------------------------
574 578
575 DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser( 579 DevToolsAndroidBridge::RemoteBrowser::RemoteBrowser(
576 const std::string& serial, 580 const std::string& serial,
(...skipping 20 matching lines...) Expand all
597 version_, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) { 601 version_, ".", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY)) {
598 int value = 0; 602 int value = 0;
599 base::StringToInt(part, &value); 603 base::StringToInt(part, &value);
600 result.push_back(value); 604 result.push_back(value);
601 } 605 }
602 return result; 606 return result;
603 } 607 }
604 608
605 DevToolsTargetImpl* 609 DevToolsTargetImpl*
606 DevToolsAndroidBridge::CreatePageTarget(scoped_refptr<RemotePage> page) { 610 DevToolsAndroidBridge::CreatePageTarget(scoped_refptr<RemotePage> page) {
607 std::string local_id = BuildUniqueTargetId(page->browser_id_, 611 return new RemotePageTarget(this, page->browser_id_, *page->dict_);
608 page->dict_.get());
609 std::string target_path = GetTargetPath(page->dict_.get());
610 std::string type = GetStringProperty(page->dict_.get(), "type");
611 scoped_refptr<DevToolsAgentHost> host =
612 AgentHostDelegate::GetOrCreateAgentHost(this, page->browser_id_, local_id,
613 target_path, type,
614 page->dict_.get());
615 return new DevToolsTargetImpl(host);
616 } 612 }
617 613
618 void DevToolsAndroidBridge::SendJsonRequest( 614 void DevToolsAndroidBridge::SendJsonRequest(
619 const BrowserId& browser_id, 615 const BrowserId& browser_id,
620 const std::string& request, 616 const std::string& request,
621 const JsonRequestCallback& callback) { 617 const JsonRequestCallback& callback) {
622 scoped_refptr<AndroidDeviceManager::Device> device( 618 scoped_refptr<AndroidDeviceManager::Device> device(
623 FindDevice(browser_id.first)); 619 FindDevice(browser_id.first));
624 if (!device.get()) { 620 if (!device.get()) {
625 callback.Run(net::ERR_FAILED, std::string()); 621 callback.Run(net::ERR_FAILED, std::string());
(...skipping 21 matching lines...) Expand all
647 device, browser_id.second, target_path, 643 device, browser_id.second, target_path,
648 DevToolsProtocol::SerializeCommand(1, method, std::move(params)), 644 DevToolsProtocol::SerializeCommand(1, method, std::move(params)),
649 callback); 645 callback);
650 } 646 }
651 647
652 scoped_refptr<content::DevToolsAgentHost> 648 scoped_refptr<content::DevToolsAgentHost>
653 DevToolsAndroidBridge::GetBrowserAgentHost( 649 DevToolsAndroidBridge::GetBrowserAgentHost(
654 scoped_refptr<RemoteBrowser> browser) { 650 scoped_refptr<RemoteBrowser> browser) {
655 return AgentHostDelegate::GetOrCreateAgentHost( 651 return AgentHostDelegate::GetOrCreateAgentHost(
656 this, 652 this,
653 "adb:" + browser->serial() + ":" + browser->socket(),
657 browser->browser_id_, 654 browser->browser_id_,
658 "adb:" + browser->serial() + ":" + browser->socket(), 655 kBrowserTargetSocket);
659 kBrowserTargetSocket, DevToolsAgentHost::kTypeBrowser, nullptr);
660 } 656 }
661 657
662 void DevToolsAndroidBridge::SendJsonRequest( 658 void DevToolsAndroidBridge::SendJsonRequest(
663 const std::string& browser_id_str, 659 const std::string& browser_id_str,
664 const std::string& url, 660 const std::string& url,
665 const JsonRequestCallback& callback) { 661 const JsonRequestCallback& callback) {
666 BrowserId browser_id; 662 BrowserId browser_id;
667 if (!BrowserIdFromString(browser_id_str, &browser_id)) { 663 if (!BrowserIdFromString(browser_id_str, &browser_id)) {
668 callback.Run(net::ERR_FAILED, std::string()); 664 callback.Run(net::ERR_FAILED, std::string());
669 return; 665 return;
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
986 StopDeviceListPolling(); 982 StopDeviceListPolling();
987 StartDeviceListPolling(); 983 StartDeviceListPolling();
988 } 984 }
989 } 985 }
990 986
991 void DevToolsAndroidBridge::set_tcp_provider_callback_for_test( 987 void DevToolsAndroidBridge::set_tcp_provider_callback_for_test(
992 TCPProviderCallback callback) { 988 TCPProviderCallback callback) {
993 tcp_provider_callback_ = callback; 989 tcp_provider_callback_ = callback;
994 CreateDeviceProviders(); 990 CreateDeviceProviders();
995 } 991 }
OLDNEW
« no previous file with comments | « chrome/browser/devtools/device/devtools_android_bridge.h ('k') | chrome/browser/devtools/devtools_target_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698