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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "chromeos/components/tether/host_scan_scheduler.h" 5 #include "chromeos/components/tether/host_scan_scheduler.h"
6 6
7 #include "base/location.h"
8 #include "base/logging.h" 7 #include "base/logging.h"
9 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
10 #include "chromeos/components/tether/host_scanner.h"
11 #include "chromeos/dbus/dbus_thread_manager.h"
12 #include "chromeos/network/network_handler.h" 9 #include "chromeos/network/network_handler.h"
13 #include "chromeos/network/network_state.h" 10 #include "chromeos/network/network_state.h"
14 #include "chromeos/network/network_state_handler.h" 11 #include "chromeos/network/network_state_handler.h"
15 #include "components/proximity_auth/logging/logging.h" 12 #include "components/proximity_auth/logging/logging.h"
16 13
17 namespace chromeos { 14 namespace chromeos {
18 15
19 namespace tether { 16 namespace tether {
20 17
21 HostScanScheduler::DelegateImpl::DelegateImpl( 18 HostScanScheduler::HostScanScheduler(NetworkStateHandler* network_state_handler,
22 const content::BrowserContext* browser_context) { 19 HostScanner* host_scanner)
23 // TODO(khorimoto): Use browser_context to get a CryptAuthDeviceManager. 20 : network_state_handler_(network_state_handler),
21 host_scanner_(host_scanner) {
22 network_state_handler_->AddObserver(this, FROM_HERE);
23 host_scanner_->AddObserver(this);
24 } 24 }
25 25
26 void HostScanScheduler::DelegateImpl::AddObserver( 26 HostScanScheduler::~HostScanScheduler() {
27 HostScanScheduler* host_scan_scheduler) { 27 // Note: We not call NetworkStateHandler::SetTetherScanState(false) here
28 LoginState::Get()->AddObserver(host_scan_scheduler); 28 // because at the point in time when HostScanScheduler is being destroyed, the
29 DBusThreadManager::Get()->GetPowerManagerClient()->AddObserver( 29 // Tether DeviceState will already have been destroyed. Calling
30 host_scan_scheduler); 30 // SetTetherScanState() is unnecessary and would cause a crash.
31 NetworkHandler::Get()->network_state_handler()->AddObserver( 31
32 host_scan_scheduler, FROM_HERE); 32 network_state_handler_->RemoveObserver(this, FROM_HERE);
33 // TODO(khorimoto): Add listener for CryptAuthDeviceManager. 33 host_scanner_->RemoveObserver(this);
34 } 34 }
35 35
36 void HostScanScheduler::DelegateImpl::RemoveObserver( 36 void HostScanScheduler::UserLoggedIn() {
37 HostScanScheduler* host_scan_scheduler) { 37 if (!IsNetworkConnectingOrConnected(network_state_handler_->DefaultNetwork()))
38 LoginState::Get()->RemoveObserver(host_scan_scheduler); 38 EnsureScan();
39 DBusThreadManager::Get()->GetPowerManagerClient()->RemoveObserver(
40 host_scan_scheduler);
41 NetworkHandler::Get()->network_state_handler()->RemoveObserver(
42 host_scan_scheduler, FROM_HERE);
43 // TODO(khorimoto): Add observer of CryptAuthDeviceManager.
44 } 39 }
45 40
46 bool HostScanScheduler::DelegateImpl::IsAuthenticatedUserLoggedIn() const { 41 void HostScanScheduler::DefaultNetworkChanged(const NetworkState* network) {
47 LoginState* login_state = LoginState::Get(); 42 if (!IsNetworkConnectingOrConnected(network))
48 return login_state && login_state->IsUserLoggedIn() && 43 EnsureScan();
49 login_state->IsUserAuthenticated();
50 } 44 }
51 45
52 bool HostScanScheduler::DelegateImpl::IsNetworkConnectedOrConnecting() const { 46 void HostScanScheduler::ScanRequested() {
53 const NetworkState* network_state = 47 if (!host_scanner_->HasRecentlyScanned())
54 NetworkHandler::Get()->network_state_handler()->DefaultNetwork(); 48 EnsureScan();
55 return network_state && (network_state->IsConnectedState() ||
56 network_state->IsConnectingState());
57 } 49 }
58 50
59 bool HostScanScheduler::DelegateImpl::AreTetherHostsSynced() const { 51 void HostScanScheduler::ScanFinished() {
60 // TODO(khorimoto): Return CryptAuthDeviceManager->GetTetherHosts().empty(). 52 network_state_handler_->SetTetherScanState(false);
61 return true;
62 } 53 }
63 54
64 HostScanScheduler::HostScanScheduler( 55 void HostScanScheduler::EnsureScan() {
65 const content::BrowserContext* browser_context, 56 if (host_scanner_->IsScanActive())
66 std::unique_ptr<HostScanner> host_scanner) 57 return;
67 : HostScanScheduler(base::MakeUnique<DelegateImpl>(browser_context),
68 std::move(host_scanner)) {}
69 58
70 HostScanScheduler::~HostScanScheduler() { 59 host_scanner_->StartScan();
71 if (initialized_) { 60 network_state_handler_->SetTetherScanState(true);
72 delegate_->RemoveObserver(this);
73 }
74 } 61 }
75 62
76 HostScanScheduler::HostScanScheduler(std::unique_ptr<Delegate> delegate, 63 bool HostScanScheduler::IsNetworkConnectingOrConnected(
77 std::unique_ptr<HostScanner> host_scanner)
78 : delegate_(std::move(delegate)),
79 host_scanner_(std::move(host_scanner)),
80 initialized_(false) {}
81
82 void HostScanScheduler::InitializeAutomaticScans() {
83 if (initialized_) {
84 return;
85 }
86
87 initialized_ = true;
88 delegate_->AddObserver(this);
89 }
90
91 bool HostScanScheduler::ScheduleScanNowIfPossible() {
92 if (!delegate_->IsAuthenticatedUserLoggedIn()) {
93 PA_LOG(INFO) << "Authenticated user not logged in; not starting scan.";
94 return false;
95 }
96
97 if (delegate_->IsNetworkConnectedOrConnecting()) {
98 PA_LOG(INFO)
99 << "Network is already connected/connecting; not starting scan.";
100 return false;
101 }
102
103 if (!delegate_->AreTetherHostsSynced()) {
104 PA_LOG(INFO) << "No tether hosts available on account; not starting scan.";
105 return false;
106 }
107
108 host_scanner_->StartScan();
109 return true;
110 }
111
112 void HostScanScheduler::LoggedInStateChanged() {
113 PA_LOG(INFO) << "Received login state change.";
114 ScheduleScanNowIfPossible();
115 }
116
117 void HostScanScheduler::SuspendDone(const base::TimeDelta& sleep_duration) {
118 PA_LOG(INFO) << "Device has resumed from sleeping.";
119 ScheduleScanNowIfPossible();
120 }
121
122 void HostScanScheduler::NetworkConnectionStateChanged(
123 const NetworkState* network) { 64 const NetworkState* network) {
124 PA_LOG(INFO) << "Received network connection state change."; 65 return network &&
125 ScheduleScanNowIfPossible(); 66 (network->IsConnectingState() || network->IsConnectedState());
126 }
127
128 void HostScanScheduler::OnSyncFinished(
129 cryptauth::CryptAuthDeviceManager::SyncResult sync_result,
130 cryptauth::CryptAuthDeviceManager::DeviceChangeResult
131 device_change_result) {
132 PA_LOG(INFO) << "CryptAuth device sync finished.";
133 ScheduleScanNowIfPossible();
134 } 67 }
135 68
136 } // namespace tether 69 } // namespace tether
137 70
138 } // namespace chromeos 71 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698