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

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 incorrect call in ~HostScanScheduler() 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.
stevenjb 2017/05/16 22:43:45 If you are going to remove this you should remove
Ryan Hansberry 2017/05/17 00:28:32 Good point, done. I've removed the PowerManagerCli
31 NetworkHandler::Get()->network_state_handler()->AddObserver(
32 host_scan_scheduler, FROM_HERE);
33 // TODO(khorimoto): Add listener for CryptAuthDeviceManager.
34 }
35 31
36 void HostScanScheduler::DelegateImpl::RemoveObserver( 32 network_state_handler_->RemoveObserver(this, FROM_HERE);
37 HostScanScheduler* host_scan_scheduler) { 33 host_scanner_->RemoveObserver(this);
38 LoginState::Get()->RemoveObserver(host_scan_scheduler);
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 }
45
46 bool HostScanScheduler::DelegateImpl::IsAuthenticatedUserLoggedIn() const {
47 LoginState* login_state = LoginState::Get();
48 return login_state && login_state->IsUserLoggedIn() &&
49 login_state->IsUserAuthenticated();
50 }
51
52 bool HostScanScheduler::DelegateImpl::IsNetworkConnectedOrConnecting() const {
53 const NetworkState* network_state =
54 NetworkHandler::Get()->network_state_handler()->DefaultNetwork();
55 return network_state && (network_state->IsConnectedState() ||
56 network_state->IsConnectingState());
57 }
58
59 bool HostScanScheduler::DelegateImpl::AreTetherHostsSynced() const {
60 // TODO(khorimoto): Return CryptAuthDeviceManager->GetTetherHosts().empty().
61 return true;
62 }
63
64 HostScanScheduler::HostScanScheduler(
65 const content::BrowserContext* browser_context,
66 std::unique_ptr<HostScanner> host_scanner)
67 : HostScanScheduler(base::MakeUnique<DelegateImpl>(browser_context),
68 std::move(host_scanner)) {}
69
70 HostScanScheduler::~HostScanScheduler() {
71 if (initialized_) {
72 delegate_->RemoveObserver(this);
73 }
74 }
75
76 HostScanScheduler::HostScanScheduler(std::unique_ptr<Delegate> delegate,
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 } 34 }
116 35
117 void HostScanScheduler::SuspendDone(const base::TimeDelta& sleep_duration) { 36 void HostScanScheduler::SuspendDone(const base::TimeDelta& sleep_duration) {
118 PA_LOG(INFO) << "Device has resumed from sleeping."; 37 PA_LOG(INFO) << "Device has resumed from sleeping.";
119 ScheduleScanNowIfPossible(); 38 // TODO (hansberry): Implement.
120 } 39 }
121 40
122 void HostScanScheduler::NetworkConnectionStateChanged( 41 void HostScanScheduler::DefaultNetworkChanged(const NetworkState* network) {
123 const NetworkState* network) { 42 // TODO (hansberry): Implement.
124 PA_LOG(INFO) << "Received network connection state change.";
125 ScheduleScanNowIfPossible();
126 } 43 }
127 44
128 void HostScanScheduler::OnSyncFinished( 45 void HostScanScheduler::ScanRequested() {
129 cryptauth::CryptAuthDeviceManager::SyncResult sync_result, 46 AttemptScan();
130 cryptauth::CryptAuthDeviceManager::DeviceChangeResult 47 }
131 device_change_result) { 48
132 PA_LOG(INFO) << "CryptAuth device sync finished."; 49 void HostScanScheduler::ScanFinished() {
133 ScheduleScanNowIfPossible(); 50 network_state_handler_->SetTetherScanState(false);
51 }
52
53 void HostScanScheduler::AttemptScan() {
54 if (host_scanner_->IsScanActive() || host_scanner_->HasRecentlyScanned())
55 return;
56
57 host_scanner_->StartScan();
58 network_state_handler_->SetTetherScanState(true);
134 } 59 }
135 60
136 } // namespace tether 61 } // namespace tether
137 62
138 } // namespace chromeos 63 } // namespace chromeos
OLDNEW
« no previous file with comments | « chromeos/components/tether/host_scan_scheduler.h ('k') | chromeos/components/tether/host_scan_scheduler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698