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

Side by Side Diff: chromeos/pairing/fake_host_pairing_controller.cc

Issue 387163002: Move Chrome OS pairing interface to chrome/browser/chromeos (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Leave chromeos/pairing intact for try jobs Created 6 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "chromeos/pairing/fake_host_pairing_controller.h"
6
7 #include <map>
8 #include <vector>
9
10 #include "base/bind.h"
11 #include "base/logging.h"
12 #include "base/message_loop/message_loop.h"
13 #include "base/rand_util.h"
14 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_split.h"
16
17 namespace {
18
19 const int kUpdateStepsNumber = 10;
20 const int kDefaultAsyncDurationMs = 3000;
21 const size_t kCodeLength = 6;
22
23 } // namespace
24
25 namespace chromeos {
26
27 FakeHostPairingController::FakeHostPairingController(const std::string& config)
28 : current_stage_(STAGE_NONE),
29 enrollment_should_fail_(false),
30 start_after_update_(false) {
31 ApplyConfig(config);
32 AddObserver(this);
33 }
34
35 FakeHostPairingController::~FakeHostPairingController() {
36 RemoveObserver(this);
37 }
38
39 void FakeHostPairingController::ApplyConfig(const std::string& config) {
40 typedef std::vector<std::string> Tokens;
41
42 base::StringPairs kv_pairs;
43 CHECK(base::SplitStringIntoKeyValuePairs(config, ':', ',', &kv_pairs))
44 << "Wrong config format.";
45 std::map<std::string, std::string> dict(kv_pairs.begin(), kv_pairs.end());
46
47 if (dict.count("async_duration")) {
48 int ms = 0;
49 CHECK(base::StringToInt(dict["async_duration"], &ms))
50 << "Wrong 'async_duration' format.";
51 async_duration_ = base::TimeDelta::FromMilliseconds(ms);
52 } else {
53 async_duration_ =
54 base::TimeDelta::FromMilliseconds(kDefaultAsyncDurationMs);
55 }
56
57 start_after_update_ = dict["start_after_update"] == "1";
58
59 enrollment_should_fail_ = dict["fail_enrollment"] == "1";
60
61 if (dict.count("code")) {
62 confirmation_code_ = dict["code"];
63 } else {
64 confirmation_code_.clear();
65 for (size_t i = 0; i < kCodeLength; ++i)
66 confirmation_code_.push_back(base::RandInt('0', '9'));
67 }
68 CHECK(confirmation_code_.length() == kCodeLength &&
69 confirmation_code_.find_first_not_of("0123456789") == std::string::npos)
70 << "Wrong 'code' format.";
71
72 device_name_ =
73 dict.count("device_name") ? dict["device_name"] : "Chromebox-01";
74
75 enrollment_domain_ = dict.count("domain") ? dict["domain"] : "example.com";
76 }
77
78 void FakeHostPairingController::ChangeStage(Stage new_stage) {
79 if (current_stage_ == new_stage)
80 return;
81 current_stage_ = new_stage;
82 FOR_EACH_OBSERVER(Observer, observers_, PairingStageChanged(new_stage));
83 }
84
85 void FakeHostPairingController::ChangeStageLater(Stage new_stage) {
86 base::MessageLoop::current()->PostDelayedTask(
87 FROM_HERE,
88 base::Bind(&FakeHostPairingController::ChangeStage,
89 base::Unretained(this),
90 new_stage),
91 async_duration_);
92 }
93
94 void FakeHostPairingController::SetUpdateProgress(int step) {
95 UpdateProgress progress;
96 progress.progress = double(step) / kUpdateStepsNumber;
97 FOR_EACH_OBSERVER(Observer, observers_, UpdateAdvanced(progress));
98 base::Closure task;
99 if (step >= kUpdateStepsNumber) {
100 task = base::Bind(&FakeHostPairingController::ChangeStage,
101 base::Unretained(this),
102 STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE);
103 } else {
104 task = base::Bind(&FakeHostPairingController::SetUpdateProgress,
105 base::Unretained(this),
106 step + 1);
107 }
108 base::MessageLoop::current()->PostDelayedTask(
109 FROM_HERE, task, async_duration_ / kUpdateStepsNumber);
110 }
111
112 void FakeHostPairingController::AddObserver(Observer* observer) {
113 observers_.AddObserver(observer);
114 }
115
116 void FakeHostPairingController::RemoveObserver(Observer* observer) {
117 observers_.RemoveObserver(observer);
118 }
119
120 HostPairingController::Stage FakeHostPairingController::GetCurrentStage() {
121 return current_stage_;
122 }
123
124 void FakeHostPairingController::StartPairing() {
125 CHECK(current_stage_ == STAGE_NONE);
126 if (start_after_update_) {
127 ChangeStage(STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE);
128 } else {
129 ChangeStage(STAGE_WAITING_FOR_CONTROLLER);
130 }
131 }
132
133 std::string FakeHostPairingController::GetDeviceName() {
134 return device_name_;
135 }
136
137 std::string FakeHostPairingController::GetConfirmationCode() {
138 CHECK(current_stage_ == STAGE_WAITING_FOR_CODE_CONFIRMATION);
139 return confirmation_code_;
140 }
141
142 std::string FakeHostPairingController::GetEnrollmentDomain() {
143 return enrollment_domain_;
144 }
145
146 void FakeHostPairingController::PairingStageChanged(Stage new_stage) {
147 switch (new_stage) {
148 case STAGE_WAITING_FOR_CONTROLLER: {
149 ChangeStageLater(STAGE_WAITING_FOR_CODE_CONFIRMATION);
150 break;
151 }
152 case STAGE_WAITING_FOR_CODE_CONFIRMATION: {
153 ChangeStageLater(STAGE_UPDATING);
154 break;
155 }
156 case STAGE_UPDATING: {
157 SetUpdateProgress(0);
158 break;
159 }
160 case STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE: {
161 ChangeStageLater(STAGE_WAITING_FOR_CREDENTIALS);
162 break;
163 }
164 case STAGE_WAITING_FOR_CREDENTIALS: {
165 ChangeStageLater(STAGE_ENROLLING);
166 break;
167 }
168 case STAGE_ENROLLING: {
169 if (enrollment_should_fail_) {
170 enrollment_should_fail_ = false;
171 ChangeStageLater(STAGE_ENROLLMENT_ERROR);
172 } else {
173 ChangeStageLater(STAGE_PAIRING_DONE);
174 }
175 break;
176 }
177 case STAGE_ENROLLMENT_ERROR: {
178 ChangeStageLater(STAGE_WAITING_FOR_CONTROLLER_AFTER_UPDATE);
179 break;
180 }
181 case STAGE_PAIRING_DONE: {
182 ChangeStageLater(STAGE_FINISHED);
183 break;
184 }
185 default: { break; }
186 }
187 }
188
189 void FakeHostPairingController::UpdateAdvanced(const UpdateProgress& progress) {
190 }
191
192 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698