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

Unified Diff: chromeos/components/tether/host_scan_scheduler.cc

Issue 2870393003: Tether: only scan when asked to by NetworkStateHandler. (Closed)
Patch Set: Remove PowerManagerClient callbacks and implement all NetworkStateHandler callbacks. Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: chromeos/components/tether/host_scan_scheduler.cc
diff --git a/chromeos/components/tether/host_scan_scheduler.cc b/chromeos/components/tether/host_scan_scheduler.cc
index 0605974d652cb639e3729022c23b33bafe1f823b..678840c217346585cac8aabb931cbeed7e6a413a 100644
--- a/chromeos/components/tether/host_scan_scheduler.cc
+++ b/chromeos/components/tether/host_scan_scheduler.cc
@@ -4,11 +4,8 @@
#include "chromeos/components/tether/host_scan_scheduler.h"
-#include "base/location.h"
#include "base/logging.h"
#include "base/memory/ptr_util.h"
-#include "chromeos/components/tether/host_scanner.h"
-#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/network/network_handler.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
@@ -18,119 +15,55 @@ namespace chromeos {
namespace tether {
-HostScanScheduler::DelegateImpl::DelegateImpl(
- const content::BrowserContext* browser_context) {
- // TODO(khorimoto): Use browser_context to get a CryptAuthDeviceManager.
+HostScanScheduler::HostScanScheduler(NetworkStateHandler* network_state_handler,
+ HostScanner* host_scanner)
+ : network_state_handler_(network_state_handler),
+ host_scanner_(host_scanner) {
+ network_state_handler_->AddObserver(this, FROM_HERE);
+ host_scanner_->AddObserver(this);
}
-void HostScanScheduler::DelegateImpl::AddObserver(
- HostScanScheduler* host_scan_scheduler) {
- LoginState::Get()->AddObserver(host_scan_scheduler);
- DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver(
- host_scan_scheduler);
- NetworkHandler::Get()->network_state_handler()->AddObserver(
- host_scan_scheduler, FROM_HERE);
- // TODO(khorimoto): Add listener for CryptAuthDeviceManager.
-}
+HostScanScheduler::~HostScanScheduler() {
+ // Note: We not call NetworkStateHandler::SetTetherScanState(false) here
+ // because at the point in time when HostScanScheduler is being destroyed, the
+ // Tether DeviceState will already have been destroyed. Calling
+ // SetTetherScanState() is unnecessary and would cause a crash.
-void HostScanScheduler::DelegateImpl::RemoveObserver(
- HostScanScheduler* host_scan_scheduler) {
- LoginState::Get()->RemoveObserver(host_scan_scheduler);
- DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
- host_scan_scheduler);
- NetworkHandler::Get()->network_state_handler()->RemoveObserver(
- host_scan_scheduler, FROM_HERE);
- // TODO(khorimoto): Add observer of CryptAuthDeviceManager.
+ network_state_handler_->RemoveObserver(this, FROM_HERE);
+ host_scanner_->RemoveObserver(this);
}
-bool HostScanScheduler::DelegateImpl::IsAuthenticatedUserLoggedIn() const {
- LoginState* login_state = LoginState::Get();
- return login_state && login_state->IsUserLoggedIn() &&
- login_state->IsUserAuthenticated();
+void HostScanScheduler::UserLoggedIn() {
+ if (!IsNetworkConnectingOrConnected(network_state_handler_->DefaultNetwork()))
+ EnsureScan();
}
-bool HostScanScheduler::DelegateImpl::IsNetworkConnectedOrConnecting() const {
- const NetworkState* network_state =
- NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
- return network_state && (network_state->IsConnectedState() ||
- network_state->IsConnectingState());
+void HostScanScheduler::DefaultNetworkChanged(const NetworkState* network) {
+ if (!IsNetworkConnectingOrConnected(network))
+ EnsureScan();
}
-bool HostScanScheduler::DelegateImpl::AreTetherHostsSynced() const {
- // TODO(khorimoto): Return CryptAuthDeviceManager->GetTetherHosts().empty().
- return true;
+void HostScanScheduler::ScanRequested() {
+ if (!host_scanner_->HasRecentlyScanned())
+ EnsureScan();
}
-HostScanScheduler::HostScanScheduler(
- const content::BrowserContext* browser_context,
- std::unique_ptr<HostScanner> host_scanner)
- : HostScanScheduler(base::MakeUnique<DelegateImpl>(browser_context),
- std::move(host_scanner)) {}
-
-HostScanScheduler::~HostScanScheduler() {
- if (initialized_) {
- delegate_->RemoveObserver(this);
- }
+void HostScanScheduler::ScanFinished() {
+ network_state_handler_->SetTetherScanState(false);
}
-HostScanScheduler::HostScanScheduler(std::unique_ptr<Delegate> delegate,
- std::unique_ptr<HostScanner> host_scanner)
- : delegate_(std::move(delegate)),
- host_scanner_(std::move(host_scanner)),
- initialized_(false) {}
-
-void HostScanScheduler::InitializeAutomaticScans() {
- if (initialized_) {
+void HostScanScheduler::EnsureScan() {
+ if (host_scanner_->IsScanActive())
return;
- }
-
- initialized_ = true;
- delegate_->AddObserver(this);
-}
-
-bool HostScanScheduler::ScheduleScanNowIfPossible() {
- if (!delegate_->IsAuthenticatedUserLoggedIn()) {
- PA_LOG(INFO) << "Authenticated user not logged in; not starting scan.";
- return false;
- }
-
- if (delegate_->IsNetworkConnectedOrConnecting()) {
- PA_LOG(INFO)
- << "Network is already connected/connecting; not starting scan.";
- return false;
- }
-
- if (!delegate_->AreTetherHostsSynced()) {
- PA_LOG(INFO) << "No tether hosts available on account; not starting scan.";
- return false;
- }
host_scanner_->StartScan();
- return true;
-}
-
-void HostScanScheduler::LoggedInStateChanged() {
- PA_LOG(INFO) << "Received login state change.";
- ScheduleScanNowIfPossible();
+ network_state_handler_->SetTetherScanState(true);
}
-void HostScanScheduler::SuspendDone(const base::TimeDelta& sleep_duration) {
- PA_LOG(INFO) << "Device has resumed from sleeping.";
- ScheduleScanNowIfPossible();
-}
-
-void HostScanScheduler::NetworkConnectionStateChanged(
+bool HostScanScheduler::IsNetworkConnectingOrConnected(
const NetworkState* network) {
- PA_LOG(INFO) << "Received network connection state change.";
- ScheduleScanNowIfPossible();
-}
-
-void HostScanScheduler::OnSyncFinished(
- cryptauth::CryptAuthDeviceManager::SyncResult sync_result,
- cryptauth::CryptAuthDeviceManager::DeviceChangeResult
- device_change_result) {
- PA_LOG(INFO) << "CryptAuth device sync finished.";
- ScheduleScanNowIfPossible();
+ return network &&
+ (network->IsConnectingState() || network->IsConnectedState());
}
} // namespace tether

Powered by Google App Engine
This is Rietveld 408576698