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

Side by Side Diff: chrome/browser/chromeos/mobile/mobile_activator_unittest.cc

Issue 22611005: Switch over MobileActivator to use Network*Handler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase + remove NetworkManagerChanged Created 7 years, 4 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/chromeos/mobile/mobile_activator.h" 5 #include "chrome/browser/chromeos/mobile/mobile_activator.h"
6 6
7 #include "chrome/browser/chromeos/cros/mock_network_library.h" 7 #include "base/message_loop/message_loop.h"
8 #include "chrome/browser/chromeos/cros/network_library.h" 8 #include "chromeos/dbus/dbus_thread_manager.h"
9 #include "chromeos/network/network_handler.h"
10 #include "chromeos/network/network_state.h"
9 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
10 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
11 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/cros_system_api/dbus/service_constants.h"
12 15
13 using std::string; 16 using std::string;
14 17
15 using content::BrowserThread; 18 using content::BrowserThread;
16 using testing::_; 19 using testing::_;
17 using testing::Eq; 20 using testing::Eq;
18 using testing::Return; 21 using testing::Return;
19 22
20 namespace { 23 namespace {
21 24
22 const char kTestServicePath[] = "/a/service/path"; 25 const char kTestServicePath[] = "/a/service/path";
23 26
24 const size_t kNumOTASPStates = 3; 27 const size_t kNumOTASPStates = 3;
25 28
26 chromeos::MobileActivator::PlanActivationState kOTASPStates[kNumOTASPStates] = { 29 chromeos::MobileActivator::PlanActivationState kOTASPStates[kNumOTASPStates] = {
27 chromeos::MobileActivator::PLAN_ACTIVATION_TRYING_OTASP, 30 chromeos::MobileActivator::PLAN_ACTIVATION_TRYING_OTASP,
28 chromeos::MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION, 31 chromeos::MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION,
29 chromeos::MobileActivator::PLAN_ACTIVATION_OTASP, 32 chromeos::MobileActivator::PLAN_ACTIVATION_OTASP,
30 }; 33 };
31 34
32 } // namespace 35 } // namespace
33 namespace chromeos { 36 namespace chromeos {
34 37
35 class TestMobileActivator : public MobileActivator { 38 class TestMobileActivator : public MobileActivator {
36 public: 39 public:
37 TestMobileActivator(MockNetworkLibrary* mock_network_library, 40 explicit TestMobileActivator(NetworkState* cellular_network) :
38 CellularNetwork* cellular_network)
39 : mock_network_library_(mock_network_library),
40 cellular_network_(cellular_network) { 41 cellular_network_(cellular_network) {
41 // Provide reasonable defaults for basic things we're usually not testing. 42 // Provide reasonable defaults for basic things we're usually not testing.
42 ON_CALL(*this, DCheckOnThread(_)) 43 ON_CALL(*this, DCheckOnThread(_))
43 .WillByDefault(Return()); 44 .WillByDefault(Return());
44 ON_CALL(*this, FindMatchingCellularNetwork(_)) 45 ON_CALL(*this, FindMatchingCellularNetwork(_))
45 .WillByDefault(Return(cellular_network)); 46 .WillByDefault(Return(cellular_network));
46 ON_CALL(*this, GetNetworkLibrary())
47 .WillByDefault(Return(mock_network_library_));
48 } 47 }
49 virtual ~TestMobileActivator() {} 48 virtual ~TestMobileActivator() {}
50 49
51 MOCK_METHOD3(ChangeState, void(CellularNetwork*, 50 MOCK_METHOD3(ChangeState, void(const NetworkState*,
52 MobileActivator::PlanActivationState, 51 MobileActivator::PlanActivationState,
53 const std::string&)); 52 const std::string&));
54 MOCK_METHOD1(EvaluateCellularNetwork, void(CellularNetwork*)); 53 MOCK_METHOD1(EvaluateCellularNetwork, void(const NetworkState*));
55 MOCK_METHOD1(FindMatchingCellularNetwork, CellularNetwork*(bool)); 54 MOCK_METHOD1(FindMatchingCellularNetwork, const NetworkState*(bool));
55 MOCK_METHOD0(SignalCellularPlanPayment, void(void));
56 MOCK_METHOD0(StartOTASPTimer, void(void)); 56 MOCK_METHOD0(StartOTASPTimer, void(void));
57 MOCK_CONST_METHOD0(HasRecentCellularPlanPayment, bool(void));
58 MOCK_METHOD1(ActivateCellularModem, bool(const std::string&));
57 59
58 void InvokeChangeState(CellularNetwork* network, 60 void InvokeChangeState(const NetworkState* network,
59 MobileActivator::PlanActivationState new_state, 61 MobileActivator::PlanActivationState new_state,
60 const std::string& error_description) { 62 const std::string& error_description) {
61 MobileActivator::ChangeState(network, new_state, error_description); 63 MobileActivator::ChangeState(network, new_state, error_description);
62 } 64 }
63 65
64 private: 66 private:
65 MOCK_CONST_METHOD0(GetNetworkLibrary, NetworkLibrary*(void));
66 MOCK_CONST_METHOD1(DCheckOnThread, void(const BrowserThread::ID id)); 67 MOCK_CONST_METHOD1(DCheckOnThread, void(const BrowserThread::ID id));
67 68
68 MockNetworkLibrary* mock_network_library_; 69 NetworkState* cellular_network_;
69 CellularNetwork* cellular_network_;
70 70
71 DISALLOW_COPY_AND_ASSIGN(TestMobileActivator); 71 DISALLOW_COPY_AND_ASSIGN(TestMobileActivator);
72 }; 72 };
73 73
74 class MobileActivatorTest : public testing::Test { 74 class MobileActivatorTest : public testing::Test {
75 public: 75 public:
76 MobileActivatorTest() 76 MobileActivatorTest()
77 : network_library_(), 77 : cellular_network_(string(kTestServicePath)),
78 cellular_network_(string(kTestServicePath)), 78 mobile_activator_(&cellular_network_) {
79 mobile_activator_(&network_library_, &cellular_network_) {} 79 }
80 virtual ~MobileActivatorTest() {} 80 virtual ~MobileActivatorTest() {}
81 81
82 protected: 82 protected:
83 virtual void SetUp() {} 83 virtual void SetUp() {
84 virtual void TearDown() {} 84 DBusThreadManager::InitializeWithStub();
85 NetworkHandler::Initialize();
86 }
87 virtual void TearDown() {
88 NetworkHandler::Shutdown();
89 DBusThreadManager::Shutdown();
90 }
85 91
86 void set_activator_state(const MobileActivator::PlanActivationState state) { 92 void set_activator_state(const MobileActivator::PlanActivationState state) {
87 mobile_activator_.state_ = state; 93 mobile_activator_.state_ = state;
88 } 94 }
89 void set_network_activation_state(ActivationState state) { 95 void set_network_activation_state(const std::string& activation_state) {
90 cellular_network_.activation_state_ = state; 96 cellular_network_.activation_state_ = activation_state;
91 } 97 }
92 void set_connection_state(ConnectionState state) { 98 void set_connection_state(const std::string& state) {
93 cellular_network_.state_ = state; 99 cellular_network_.connection_state_ = state;
94 } 100 }
95 101
96 MockNetworkLibrary network_library_; 102 base::MessageLoop message_loop_;
97 MockCellularNetwork cellular_network_; 103 NetworkState cellular_network_;
98 TestMobileActivator mobile_activator_; 104 TestMobileActivator mobile_activator_;
99 private: 105 private:
100 DISALLOW_COPY_AND_ASSIGN(MobileActivatorTest); 106 DISALLOW_COPY_AND_ASSIGN(MobileActivatorTest);
101 }; 107 };
102 108
103 TEST_F(MobileActivatorTest, BasicFlowForNewDevices) { 109 TEST_F(MobileActivatorTest, BasicFlowForNewDevices) {
104 // In a new device, we aren't connected to Verizon, we start at START 110 // In a new device, we aren't connected to Verizon, we start at START
105 // because we haven't paid Verizon (ever), and the modem isn't even partially 111 // because we haven't paid Verizon (ever), and the modem isn't even partially
106 // activated. 112 // activated.
107 std::string error_description; 113 std::string error_description;
108 set_activator_state(MobileActivator::PLAN_ACTIVATION_START); 114 set_activator_state(MobileActivator::PLAN_ACTIVATION_START);
109 set_connection_state(STATE_IDLE); 115 set_connection_state(flimflam::kStateIdle);
110 set_network_activation_state(ACTIVATION_STATE_NOT_ACTIVATED); 116 set_network_activation_state(flimflam::kActivationStateNotActivated);
111 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION, 117 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION,
112 mobile_activator_.PickNextState(&cellular_network_, 118 mobile_activator_.PickNextState(&cellular_network_,
113 &error_description)); 119 &error_description));
114 // Now behave as if ChangeState() has initiated an activation. 120 // Now behave as if ChangeState() has initiated an activation.
115 set_activator_state(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION); 121 set_activator_state(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION);
116 set_network_activation_state(ACTIVATION_STATE_ACTIVATING); 122 set_network_activation_state(flimflam::kActivationStateActivating);
117 // We'll sit in this state while we wait for the OTASP to finish. 123 // We'll sit in this state while we wait for the OTASP to finish.
118 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION, 124 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION,
119 mobile_activator_.PickNextState(&cellular_network_, 125 mobile_activator_.PickNextState(&cellular_network_,
120 &error_description)); 126 &error_description));
121 set_network_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED); 127 set_network_activation_state(flimflam::kActivationStatePartiallyActivated);
122 // We'll sit in this state until we go online as well. 128 // We'll sit in this state until we go online as well.
123 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION, 129 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_INITIATING_ACTIVATION,
124 mobile_activator_.PickNextState(&cellular_network_, 130 mobile_activator_.PickNextState(&cellular_network_,
125 &error_description)); 131 &error_description));
126 set_connection_state(STATE_PORTAL); 132 set_connection_state(flimflam::kStatePortal);
127 // After we go online, we go back to START, which acts as a jumping off 133 // After we go online, we go back to START, which acts as a jumping off
128 // point for the two types of initial OTASP. 134 // point for the two types of initial OTASP.
129 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_START, 135 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_START,
130 mobile_activator_.PickNextState(&cellular_network_, 136 mobile_activator_.PickNextState(&cellular_network_,
131 &error_description)); 137 &error_description));
132 set_activator_state(MobileActivator::PLAN_ACTIVATION_START); 138 set_activator_state(MobileActivator::PLAN_ACTIVATION_START);
133 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_TRYING_OTASP, 139 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_TRYING_OTASP,
134 mobile_activator_.PickNextState(&cellular_network_, 140 mobile_activator_.PickNextState(&cellular_network_,
135 &error_description)); 141 &error_description));
136 // Very similar things happen while we're trying OTASP. 142 // Very similar things happen while we're trying OTASP.
137 set_activator_state(MobileActivator::PLAN_ACTIVATION_TRYING_OTASP); 143 set_activator_state(MobileActivator::PLAN_ACTIVATION_TRYING_OTASP);
138 set_network_activation_state(ACTIVATION_STATE_ACTIVATING); 144 set_network_activation_state(flimflam::kActivationStateActivating);
139 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_TRYING_OTASP, 145 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_TRYING_OTASP,
140 mobile_activator_.PickNextState(&cellular_network_, 146 mobile_activator_.PickNextState(&cellular_network_,
141 &error_description)); 147 &error_description));
142 set_network_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED); 148 set_network_activation_state(flimflam::kActivationStatePartiallyActivated);
143 set_connection_state(STATE_PORTAL); 149 set_connection_state(flimflam::kStatePortal);
144 // And when we come back online again and aren't activating, load the portal. 150 // And when we come back online again and aren't activating, load the portal.
145 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING, 151 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING,
146 mobile_activator_.PickNextState(&cellular_network_, 152 mobile_activator_.PickNextState(&cellular_network_,
147 &error_description)); 153 &error_description));
148 // The JS drives us through the payment portal. 154 // The JS drives us through the payment portal.
149 set_activator_state(MobileActivator::PLAN_ACTIVATION_SHOWING_PAYMENT); 155 set_activator_state(MobileActivator::PLAN_ACTIVATION_SHOWING_PAYMENT);
150 // The JS also calls us to signal that the portal is done. This triggers us 156 // The JS also calls us to signal that the portal is done. This triggers us
151 // to start our final OTASP via the aptly named StartOTASP(). 157 // to start our final OTASP via the aptly named StartOTASP().
152 EXPECT_CALL(network_library_, SignalCellularPlanPayment()); 158 EXPECT_CALL(mobile_activator_, SignalCellularPlanPayment());
153 EXPECT_CALL(mobile_activator_, 159 EXPECT_CALL(mobile_activator_,
154 ChangeState(Eq(&cellular_network_), 160 ChangeState(Eq(&cellular_network_),
155 Eq(MobileActivator::PLAN_ACTIVATION_START_OTASP), 161 Eq(MobileActivator::PLAN_ACTIVATION_START_OTASP),
156 _)); 162 _));
157 EXPECT_CALL(mobile_activator_, 163 EXPECT_CALL(mobile_activator_,
158 EvaluateCellularNetwork(Eq(&cellular_network_))); 164 EvaluateCellularNetwork(Eq(&cellular_network_)));
159 mobile_activator_.HandleSetTransactionStatus(true); 165 mobile_activator_.HandleSetTransactionStatus(true);
160 // Evaluate state will defer to PickNextState to select what to do now that 166 // Evaluate state will defer to PickNextState to select what to do now that
161 // we're in START_ACTIVATION. PickNextState should decide to start a final 167 // we're in START_ACTIVATION. PickNextState should decide to start a final
162 // OTASP. 168 // OTASP.
163 set_activator_state(MobileActivator::PLAN_ACTIVATION_START_OTASP); 169 set_activator_state(MobileActivator::PLAN_ACTIVATION_START_OTASP);
164 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_OTASP, 170 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_OTASP,
165 mobile_activator_.PickNextState(&cellular_network_, 171 mobile_activator_.PickNextState(&cellular_network_,
166 &error_description)); 172 &error_description));
167 // Similarly to TRYING_OTASP and INITIATING_OTASP above... 173 // Similarly to TRYING_OTASP and INITIATING_OTASP above...
168 set_activator_state(MobileActivator::PLAN_ACTIVATION_OTASP); 174 set_activator_state(MobileActivator::PLAN_ACTIVATION_OTASP);
169 set_network_activation_state(ACTIVATION_STATE_ACTIVATING); 175 set_network_activation_state(flimflam::kActivationStateActivating);
170 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_OTASP, 176 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_OTASP,
171 mobile_activator_.PickNextState(&cellular_network_, 177 mobile_activator_.PickNextState(&cellular_network_,
172 &error_description)); 178 &error_description));
173 set_network_activation_state(ACTIVATION_STATE_ACTIVATED); 179 set_network_activation_state(flimflam::kActivationStateActivated);
174 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_DONE, 180 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_DONE,
175 mobile_activator_.PickNextState(&cellular_network_, 181 mobile_activator_.PickNextState(&cellular_network_,
176 &error_description)); 182 &error_description));
177 } 183 }
178 184
179 TEST_F(MobileActivatorTest, OTASPScheduling) { 185 TEST_F(MobileActivatorTest, OTASPScheduling) {
180 const std::string error; 186 const std::string error;
181 for (size_t i = 0; i < kNumOTASPStates; ++i) { 187 for (size_t i = 0; i < kNumOTASPStates; ++i) {
182 // When activation works, we start a timer to watch for success. 188 // When activation works, we start a timer to watch for success.
183 EXPECT_CALL(cellular_network_, StartActivation()) 189 EXPECT_CALL(mobile_activator_, ActivateCellularModem(_))
184 .Times(1) 190 .Times(1)
185 .WillOnce(Return(true)); 191 .WillOnce(Return(true));
186 EXPECT_CALL(mobile_activator_, StartOTASPTimer()) 192 EXPECT_CALL(mobile_activator_, StartOTASPTimer())
187 .Times(1); 193 .Times(1);
188 set_activator_state(MobileActivator::PLAN_ACTIVATION_START); 194 set_activator_state(MobileActivator::PLAN_ACTIVATION_START);
189 mobile_activator_.InvokeChangeState(&cellular_network_, 195 mobile_activator_.InvokeChangeState(&cellular_network_,
190 kOTASPStates[i], 196 kOTASPStates[i],
191 error); 197 error);
192 // When activation fails, it's an error, unless we're trying for the final 198 // When activation fails, it's an error, unless we're trying for the final
193 // OTASP, in which case we try again via DELAY_OTASP. 199 // OTASP, in which case we try again via DELAY_OTASP.
194 EXPECT_CALL(cellular_network_, StartActivation()) 200 EXPECT_CALL(mobile_activator_, ActivateCellularModem(_))
195 .Times(1) 201 .Times(1)
196 .WillOnce(Return(false)); 202 .WillOnce(Return(false));
197 if (kOTASPStates[i] == MobileActivator::PLAN_ACTIVATION_OTASP) { 203 if (kOTASPStates[i] == MobileActivator::PLAN_ACTIVATION_OTASP) {
198 EXPECT_CALL(mobile_activator_, ChangeState( 204 EXPECT_CALL(mobile_activator_, ChangeState(
199 Eq(&cellular_network_), 205 Eq(&cellular_network_),
200 Eq(MobileActivator::PLAN_ACTIVATION_DELAY_OTASP), 206 Eq(MobileActivator::PLAN_ACTIVATION_DELAY_OTASP),
201 _)); 207 _));
202 } else { 208 } else {
203 EXPECT_CALL(mobile_activator_, ChangeState( 209 EXPECT_CALL(mobile_activator_, ChangeState(
204 Eq(&cellular_network_), 210 Eq(&cellular_network_),
205 Eq(MobileActivator::PLAN_ACTIVATION_ERROR), 211 Eq(MobileActivator::PLAN_ACTIVATION_ERROR),
206 _)); 212 _));
207 } 213 }
208 set_activator_state(MobileActivator::PLAN_ACTIVATION_START); 214 set_activator_state(MobileActivator::PLAN_ACTIVATION_START);
209 mobile_activator_.InvokeChangeState(&cellular_network_, 215 mobile_activator_.InvokeChangeState(&cellular_network_,
210 kOTASPStates[i], 216 kOTASPStates[i],
211 error); 217 error);
212 } 218 }
213 } 219 }
214 220
215 TEST_F(MobileActivatorTest, ReconnectOnDisconnectFromPaymentPortal) { 221 TEST_F(MobileActivatorTest, ReconnectOnDisconnectFromPaymentPortal) {
216 // Most states either don't care if we're offline or expect to be offline at 222 // Most states either don't care if we're offline or expect to be offline at
217 // some point. For instance the OTASP states expect to go offline during 223 // some point. For instance the OTASP states expect to go offline during
218 // activation and eventually come back. There are a few transitions states 224 // activation and eventually come back. There are a few transitions states
219 // like START_OTASP and DELAY_OTASP which don't really depend on the state of 225 // like START_OTASP and DELAY_OTASP which don't really depend on the state of
220 // the modem (offline or online) to work correctly. A few places however, 226 // the modem (offline or online) to work correctly. A few places however,
221 // like when we're displaying the portal care quite a bit about going 227 // like when we're displaying the portal care quite a bit about going
222 // offline. Lets test for those cases. 228 // offline. Lets test for those cases.
223 std::string error_description; 229 std::string error_description;
224 set_connection_state(STATE_FAILURE); 230 set_connection_state(flimflam::kStateFailure);
225 set_network_activation_state(ACTIVATION_STATE_PARTIALLY_ACTIVATED); 231 set_network_activation_state(flimflam::kActivationStatePartiallyActivated);
226 set_activator_state(MobileActivator::PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING); 232 set_activator_state(MobileActivator::PLAN_ACTIVATION_PAYMENT_PORTAL_LOADING);
227 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_RECONNECTING, 233 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_RECONNECTING,
228 mobile_activator_.PickNextState(&cellular_network_, 234 mobile_activator_.PickNextState(&cellular_network_,
229 &error_description)); 235 &error_description));
230 set_activator_state(MobileActivator::PLAN_ACTIVATION_SHOWING_PAYMENT); 236 set_activator_state(MobileActivator::PLAN_ACTIVATION_SHOWING_PAYMENT);
231 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_RECONNECTING, 237 EXPECT_EQ(MobileActivator::PLAN_ACTIVATION_RECONNECTING,
232 mobile_activator_.PickNextState(&cellular_network_, 238 mobile_activator_.PickNextState(&cellular_network_,
233 &error_description)); 239 &error_description));
234 } 240 }
235 241
236 TEST_F(MobileActivatorTest, StartAtStart) { 242 TEST_F(MobileActivatorTest, StartAtStart) {
237 EXPECT_CALL(network_library_, 243 EXPECT_CALL(mobile_activator_, HasRecentCellularPlanPayment())
238 AddNetworkManagerObserver(Eq(&mobile_activator_))); 244 .WillOnce(Return(false));
239 EXPECT_CALL(network_library_, HasRecentCellularPlanPayment()).
240 WillOnce(Return(false));
241 EXPECT_CALL(mobile_activator_, 245 EXPECT_CALL(mobile_activator_,
242 EvaluateCellularNetwork(Eq(&cellular_network_))); 246 EvaluateCellularNetwork(Eq(&cellular_network_)));
243 mobile_activator_.StartActivation(); 247 mobile_activator_.StartActivation();
244 EXPECT_EQ(mobile_activator_.state(), MobileActivator::PLAN_ACTIVATION_START); 248 EXPECT_EQ(mobile_activator_.state(), MobileActivator::PLAN_ACTIVATION_START);
245 } 249 }
246 250
247 } // namespace chromeos 251 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698