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

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

Issue 500373004: DevTools: Make port forwarding part of DevToolsAndroidBridge. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 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/port_forwarding_controller.h" 5 #include "chrome/browser/devtools/device/port_forwarding_controller.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 523 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 pref_service_(profile->GetPrefs()), 534 pref_service_(profile->GetPrefs()),
535 listening_(false) { 535 listening_(false) {
536 pref_change_registrar_.Init(pref_service_); 536 pref_change_registrar_.Init(pref_service_);
537 base::Closure callback = base::Bind( 537 base::Closure callback = base::Bind(
538 &PortForwardingController::OnPrefsChange, base::Unretained(this)); 538 &PortForwardingController::OnPrefsChange, base::Unretained(this));
539 pref_change_registrar_.Add(prefs::kDevToolsPortForwardingEnabled, callback); 539 pref_change_registrar_.Add(prefs::kDevToolsPortForwardingEnabled, callback);
540 pref_change_registrar_.Add(prefs::kDevToolsPortForwardingConfig, callback); 540 pref_change_registrar_.Add(prefs::kDevToolsPortForwardingConfig, callback);
541 OnPrefsChange(); 541 OnPrefsChange();
542 } 542 }
543 543
544
545 PortForwardingController::~PortForwardingController() {} 544 PortForwardingController::~PortForwardingController() {}
546 545
547 void PortForwardingController::Shutdown() { 546 PortForwardingController::DevicesStatus
548 // Existing connection will not be shut down. This might be confusing for 547 PortForwardingController::DeviceListChanged(
549 // some users, but the opposite is more confusing.
550 StopListening();
551 }
552
553 void PortForwardingController::AddListener(Listener* listener) {
554 listeners_.push_back(listener);
555 }
556
557 void PortForwardingController::RemoveListener(Listener* listener) {
558 Listeners::iterator it =
559 std::find(listeners_.begin(), listeners_.end(), listener);
560 DCHECK(it != listeners_.end());
561 listeners_.erase(it);
562 }
563
564 void PortForwardingController::DeviceListChanged(
565 const DevToolsAndroidBridge::RemoteDevices& devices) { 548 const DevToolsAndroidBridge::RemoteDevices& devices) {
566 DevicesStatus status; 549 DevicesStatus status;
567 550
568 for (DevToolsAndroidBridge::RemoteDevices::const_iterator it = 551 for (DevToolsAndroidBridge::RemoteDevices::const_iterator it =
569 devices.begin(); it != devices.end(); ++it) { 552 devices.begin(); it != devices.end(); ++it) {
570 scoped_refptr<DevToolsAndroidBridge::RemoteDevice> device = *it; 553 scoped_refptr<DevToolsAndroidBridge::RemoteDevice> device = *it;
571 if (!device->is_connected()) 554 if (!device->is_connected())
572 continue; 555 continue;
573 Registry::iterator rit = registry_.find(device->serial()); 556 Registry::iterator rit = registry_.find(device->serial());
574 if (rit == registry_.end()) { 557 if (rit == registry_.end()) {
575 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser = 558 scoped_refptr<DevToolsAndroidBridge::RemoteBrowser> browser =
576 FindBestBrowserForTethering(device->browsers()); 559 FindBestBrowserForTethering(device->browsers());
577 if (browser) { 560 if (browser) {
578 new Connection(&registry_, device, browser, forwarding_map_); 561 new Connection(&registry_, device, browser, forwarding_map_);
579 } 562 }
580 } else { 563 } else {
581 status[device->serial()] = (*rit).second->GetPortStatusMap(); 564 status[device->serial()] = (*rit).second->GetPortStatusMap();
582 } 565 }
583 } 566 }
584 567
585 NotifyListeners(status); 568 return status;
586 } 569 }
587 570
588 void PortForwardingController::OnPrefsChange() { 571 void PortForwardingController::OnPrefsChange() {
589 forwarding_map_.clear(); 572 forwarding_map_.clear();
590 573
591 if (pref_service_->GetBoolean(prefs::kDevToolsPortForwardingEnabled)) { 574 if (pref_service_->GetBoolean(prefs::kDevToolsPortForwardingEnabled)) {
592 const base::DictionaryValue* dict = 575 const base::DictionaryValue* dict =
593 pref_service_->GetDictionary(prefs::kDevToolsPortForwardingConfig); 576 pref_service_->GetDictionary(prefs::kDevToolsPortForwardingConfig);
594 for (base::DictionaryValue::Iterator it(*dict); 577 for (base::DictionaryValue::Iterator it(*dict);
595 !it.IsAtEnd(); it.Advance()) { 578 !it.IsAtEnd(); it.Advance()) {
596 int port_num; 579 int port_num;
597 std::string location; 580 std::string location;
598 if (base::StringToInt(it.key(), &port_num) && 581 if (base::StringToInt(it.key(), &port_num) &&
599 dict->GetString(it.key(), &location)) 582 dict->GetString(it.key(), &location))
600 forwarding_map_[port_num] = location; 583 forwarding_map_[port_num] = location;
601 } 584 }
602 } 585 }
603 586
604 if (!forwarding_map_.empty()) { 587 if (!forwarding_map_.empty()) {
605 StartListening(); 588 listening_ = true;
dgozman 2014/08/27 08:08:34 I don't see where |listening_| is used.
vkuzkokov 2014/09/01 16:13:41 Good point.
606 UpdateConnections(); 589 UpdateConnections();
607 } else { 590 } else {
608 StopListening(); 591 listening_ = false;
609 ShutdownConnections(); 592 ShutdownConnections();
610 NotifyListeners(DevicesStatus());
611 } 593 }
612 } 594 }
613 595
614 void PortForwardingController::StartListening() {
615 if (listening_)
616 return;
617 listening_ = true;
618 DevToolsAndroidBridge* android_bridge =
619 DevToolsAndroidBridge::Factory::GetForProfile(profile_);
620 if (android_bridge)
621 android_bridge->AddDeviceListListener(this);
622
623 }
624
625 void PortForwardingController::StopListening() {
626 if (!listening_)
627 return;
628 listening_ = false;
629 DevToolsAndroidBridge* android_bridge =
630 DevToolsAndroidBridge::Factory::GetForProfile(profile_);
631 if (android_bridge)
632 android_bridge->RemoveDeviceListListener(this);
633 }
634
635 void PortForwardingController::UpdateConnections() { 596 void PortForwardingController::UpdateConnections() {
636 for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it) 597 for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it)
637 it->second->UpdateForwardingMap(forwarding_map_); 598 it->second->UpdateForwardingMap(forwarding_map_);
638 } 599 }
639 600
640 void PortForwardingController::ShutdownConnections() { 601 void PortForwardingController::ShutdownConnections() {
641 for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it) 602 for (Registry::iterator it = registry_.begin(); it != registry_.end(); ++it)
642 it->second->Shutdown(); 603 it->second->Shutdown();
643 registry_.clear(); 604 registry_.clear();
644 } 605 }
645
646 void PortForwardingController::NotifyListeners(
647 const DevicesStatus& status) const {
648 Listeners copy(listeners_); // Iterate over copy.
649 for (Listeners::const_iterator it = copy.begin(); it != copy.end(); ++it)
650 (*it)->PortStatusChanged(status);
651 }
652
653 // static
654 PortForwardingController::Factory*
655 PortForwardingController::Factory::GetInstance() {
656 return Singleton<PortForwardingController::Factory>::get();
657 }
658
659 // static
660 PortForwardingController* PortForwardingController::Factory::GetForProfile(
661 Profile* profile) {
662 return static_cast<PortForwardingController*>(GetInstance()->
663 GetServiceForBrowserContext(profile, true));
664 }
665
666 PortForwardingController::Factory::Factory()
667 : BrowserContextKeyedServiceFactory(
668 "PortForwardingController",
669 BrowserContextDependencyManager::GetInstance()) {}
670
671 PortForwardingController::Factory::~Factory() {}
672
673 KeyedService* PortForwardingController::Factory::BuildServiceInstanceFor(
674 content::BrowserContext* context) const {
675 Profile* profile = Profile::FromBrowserContext(context);
676 return new PortForwardingController(profile);
677 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698