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

Side by Side Diff: chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energy_apitest.cc

Issue 349433002: chrome.bluetoothLowEnergy: Introduce connect and disconnect methods. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 6 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 2014 The Chromium Authors. All rights reserved. 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 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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_ptr.h"
6 #include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energ y_api.h" 6 #include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energ y_api.h"
7 #include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energ y_event_router.h" 7 #include "chrome/browser/extensions/api/bluetooth_low_energy/bluetooth_low_energ y_event_router.h"
8 #include "chrome/browser/extensions/extension_apitest.h" 8 #include "chrome/browser/extensions/extension_apitest.h"
9 #include "chrome/browser/extensions/extension_function_test_utils.h" 9 #include "chrome/browser/extensions/extension_function_test_utils.h"
10 #include "chrome/browser/extensions/extension_test_message_listener.h" 10 #include "chrome/browser/extensions/extension_test_message_listener.h"
11 #include "device/bluetooth/test/mock_bluetooth_adapter.h" 11 #include "device/bluetooth/test/mock_bluetooth_adapter.h"
12 #include "device/bluetooth/test/mock_bluetooth_device.h" 12 #include "device/bluetooth/test/mock_bluetooth_device.h"
13 #include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h" 13 #include "device/bluetooth/test/mock_bluetooth_gatt_characteristic.h"
14 #include "device/bluetooth/test/mock_bluetooth_gatt_connection.h"
14 #include "device/bluetooth/test/mock_bluetooth_gatt_descriptor.h" 15 #include "device/bluetooth/test/mock_bluetooth_gatt_descriptor.h"
15 #include "device/bluetooth/test/mock_bluetooth_gatt_service.h" 16 #include "device/bluetooth/test/mock_bluetooth_gatt_service.h"
16 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
17 18
18 using device::BluetoothUUID; 19 using device::BluetoothUUID;
19 using device::BluetoothAdapter; 20 using device::BluetoothAdapter;
20 using device::BluetoothDevice; 21 using device::BluetoothDevice;
21 using device::BluetoothGattCharacteristic; 22 using device::BluetoothGattCharacteristic;
23 using device::BluetoothGattConnection;
22 using device::BluetoothGattDescriptor; 24 using device::BluetoothGattDescriptor;
23 using device::BluetoothGattService; 25 using device::BluetoothGattService;
24 using device::MockBluetoothAdapter; 26 using device::MockBluetoothAdapter;
25 using device::MockBluetoothDevice; 27 using device::MockBluetoothDevice;
26 using device::MockBluetoothGattCharacteristic; 28 using device::MockBluetoothGattCharacteristic;
29 using device::MockBluetoothGattConnection;
27 using device::MockBluetoothGattDescriptor; 30 using device::MockBluetoothGattDescriptor;
28 using device::MockBluetoothGattService; 31 using device::MockBluetoothGattService;
29 using extensions::BluetoothLowEnergyEventRouter; 32 using extensions::BluetoothLowEnergyEventRouter;
30 using testing::Invoke; 33 using testing::Invoke;
31 using testing::Return; 34 using testing::Return;
32 using testing::ReturnRef; 35 using testing::ReturnRef;
33 using testing::ReturnRefOfCopy; 36 using testing::ReturnRefOfCopy;
34 using testing::SaveArg; 37 using testing::SaveArg;
35 using testing::_; 38 using testing::_;
36 39
37 namespace utils = extension_function_test_utils; 40 namespace utils = extension_function_test_utils;
38 41
39 namespace { 42 namespace {
40 43
41 // Test service constants. 44 // Test service constants.
42 const char kTestLeDeviceAddress[] = "11:22:33:44:55:66"; 45 const char kTestLeDeviceAddress0[] = "11:22:33:44:55:66";
43 const char kTestLeDeviceName[] = "Test LE Device"; 46 const char kTestLeDeviceName0[] = "Test LE Device 0";
47
48 const char kTestLeDeviceAddress1[] = "77:88:99:AA:BB:CC";
49 const char kTestLeDeviceName1[] = "Test LE Device 1";
44 50
45 const char kTestServiceId0[] = "service_id0"; 51 const char kTestServiceId0[] = "service_id0";
46 const char kTestServiceUuid0[] = "1234"; 52 const char kTestServiceUuid0[] = "1234";
47 53
48 const char kTestServiceId1[] = "service_id1"; 54 const char kTestServiceId1[] = "service_id1";
49 const char kTestServiceUuid1[] = "5678"; 55 const char kTestServiceUuid1[] = "5678";
50 56
51 // Test characteristic constants. 57 // Test characteristic constants.
52 const char kTestCharacteristicId0[] = "char_id0"; 58 const char kTestCharacteristicId0[] = "char_id0";
53 const char kTestCharacteristicUuid0[] = "1211"; 59 const char kTestCharacteristicUuid0[] = "1211";
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 EXPECT_CALL(*mock_adapter_, RemoveObserver(_)); 102 EXPECT_CALL(*mock_adapter_, RemoveObserver(_));
97 } 103 }
98 104
99 void SetUpMocks() { 105 void SetUpMocks() {
100 mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>(); 106 mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>();
101 EXPECT_CALL(*mock_adapter_, GetDevices()) 107 EXPECT_CALL(*mock_adapter_, GetDevices())
102 .WillOnce(Return(BluetoothAdapter::ConstDeviceList())); 108 .WillOnce(Return(BluetoothAdapter::ConstDeviceList()));
103 109
104 event_router()->SetAdapterForTesting(mock_adapter_); 110 event_router()->SetAdapterForTesting(mock_adapter_);
105 111
106 device_.reset( 112 device0_.reset(
107 new testing::NiceMock<MockBluetoothDevice>(mock_adapter_, 113 new testing::NiceMock<MockBluetoothDevice>(mock_adapter_,
108 0, 114 0,
109 kTestLeDeviceName, 115 kTestLeDeviceName0,
110 kTestLeDeviceAddress, 116 kTestLeDeviceAddress0,
111 false /* paired */, 117 false /* paired */,
112 true /* connected */)); 118 true /* connected */));
113 119
120 device1_.reset(
121 new testing::NiceMock<MockBluetoothDevice>(mock_adapter_,
122 0,
123 kTestLeDeviceName1,
124 kTestLeDeviceAddress1,
125 false /* paired */,
126 false /* connected */));
127
114 service0_.reset(new testing::NiceMock<MockBluetoothGattService>( 128 service0_.reset(new testing::NiceMock<MockBluetoothGattService>(
115 device_.get(), 129 device0_.get(),
116 kTestServiceId0, 130 kTestServiceId0,
117 BluetoothUUID(kTestServiceUuid0), 131 BluetoothUUID(kTestServiceUuid0),
118 true /* is_primary */, 132 true /* is_primary */,
119 false /* is_local */)); 133 false /* is_local */));
120 134
121 service1_.reset(new testing::NiceMock<MockBluetoothGattService>( 135 service1_.reset(new testing::NiceMock<MockBluetoothGattService>(
122 device_.get(), 136 device0_.get(),
123 kTestServiceId1, 137 kTestServiceId1,
124 BluetoothUUID(kTestServiceUuid1), 138 BluetoothUUID(kTestServiceUuid1),
125 false /* is_primary */, 139 false /* is_primary */,
126 false /* is_local */)); 140 false /* is_local */));
127 141
128 // Assign characteristics some random properties and permissions. They don't 142 // Assign characteristics some random properties and permissions. They don't
129 // need to reflect what the characteristic is actually capable of, since 143 // need to reflect what the characteristic is actually capable of, since
130 // the JS API just passes values through from 144 // the JS API just passes values through from
131 // device::BluetoothGattCharacteristic. 145 // device::BluetoothGattCharacteristic.
132 std::vector<uint8> default_value; 146 std::vector<uint8> default_value;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 ON_CALL(*desc1_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value)); 199 ON_CALL(*desc1_, GetValue()).WillByDefault(ReturnRefOfCopy(default_value));
186 } 200 }
187 201
188 protected: 202 protected:
189 BluetoothLowEnergyEventRouter* event_router() { 203 BluetoothLowEnergyEventRouter* event_router() {
190 return extensions::BluetoothLowEnergyAPI::Get(browser()->profile()) 204 return extensions::BluetoothLowEnergyAPI::Get(browser()->profile())
191 ->event_router(); 205 ->event_router();
192 } 206 }
193 207
194 testing::StrictMock<MockBluetoothAdapter>* mock_adapter_; 208 testing::StrictMock<MockBluetoothAdapter>* mock_adapter_;
195 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device_; 209 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device0_;
210 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_;
196 scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service0_; 211 scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service0_;
197 scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service1_; 212 scoped_ptr<testing::NiceMock<MockBluetoothGattService> > service1_;
198 scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc0_; 213 scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc0_;
199 scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc1_; 214 scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc1_;
200 scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc2_; 215 scoped_ptr<testing::NiceMock<MockBluetoothGattCharacteristic> > chrc2_;
201 scoped_ptr<testing::NiceMock<MockBluetoothGattDescriptor> > desc0_; 216 scoped_ptr<testing::NiceMock<MockBluetoothGattDescriptor> > desc0_;
202 scoped_ptr<testing::NiceMock<MockBluetoothGattDescriptor> > desc1_; 217 scoped_ptr<testing::NiceMock<MockBluetoothGattDescriptor> > desc1_;
203 218
204 private: 219 private:
205 scoped_refptr<extensions::Extension> empty_extension_; 220 scoped_refptr<extensions::Extension> empty_extension_;
206 }; 221 };
207 222
208 void ReadValueSuccessCallback( 223 ACTION_TEMPLATE(InvokeCallbackArgument,
209 const base::Callback<void(const std::vector<uint8>&)>& callback, 224 HAS_1_TEMPLATE_PARAMS(int, k),
210 const base::Closure& error_callback) { 225 AND_0_VALUE_PARAMS()) {
211 std::vector<uint8> value; 226 ::std::tr1::get<k>(args).Run();
212 callback.Run(value);
213 } 227 }
214 228
215 void ReadValueErrorCallback( 229 ACTION_TEMPLATE(InvokeCallbackArgument,
216 const base::Callback<void(const std::vector<uint8>&)>& callback, 230 HAS_1_TEMPLATE_PARAMS(int, k),
217 const base::Closure& error_callback) { 231 AND_1_VALUE_PARAMS(p0)) {
218 error_callback.Run(); 232 ::std::tr1::get<k>(args).Run(p0);
219 } 233 }
220 234
221 void WriteValueSuccessCallback(const std::vector<uint8>& value, 235 ACTION_TEMPLATE(InvokeCallbackWithScopedPtrArg,
222 const base::Closure& callback, 236 HAS_2_TEMPLATE_PARAMS(int, k, typename, T),
223 const base::Closure& error_callback) { 237 AND_1_VALUE_PARAMS(p0)) {
224 callback.Run(); 238 ::std::tr1::get<k>(args).Run(scoped_ptr<T>(p0));
225 } 239 }
226 240
227 void WriteValueErrorCallback(const std::vector<uint8>& value, 241 BluetoothGattConnection* CreateGattConnection(
228 const base::Closure& callback, 242 const std::string& device_address,
229 const base::Closure& error_callback) { 243 bool expect_disconnect) {
230 error_callback.Run(); 244 testing::NiceMock<MockBluetoothGattConnection>* conn =
245 new testing::NiceMock<MockBluetoothGattConnection>(device_address);
246
247 if (expect_disconnect) {
248 EXPECT_CALL(*conn, Disconnect(_))
249 .Times(1)
250 .WillOnce(InvokeCallbackArgument<0>());
251 } else {
252 EXPECT_CALL(*conn, Disconnect(_)).Times(0);
253 }
254
255 return conn;
231 } 256 }
232 257
233 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetServices) { 258 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetServices) {
234 ResultCatcher catcher; 259 ResultCatcher catcher;
235 catcher.RestrictToProfile(browser()->profile()); 260 catcher.RestrictToProfile(browser()->profile());
236 261
237 std::vector<BluetoothGattService*> services; 262 std::vector<BluetoothGattService*> services;
238 services.push_back(service0_.get()); 263 services.push_back(service0_.get());
239 services.push_back(service1_.get()); 264 services.push_back(service1_.get());
240 265
241 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 266 EXPECT_CALL(*mock_adapter_, GetDevice(_))
242 .Times(3) 267 .Times(3)
243 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) 268 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL)))
244 .WillRepeatedly(Return(device_.get())); 269 .WillRepeatedly(Return(device0_.get()));
245 270
246 EXPECT_CALL(*device_, GetGattServices()) 271 EXPECT_CALL(*device0_, GetGattServices())
247 .Times(2) 272 .Times(2)
248 .WillOnce(Return(std::vector<BluetoothGattService*>())) 273 .WillOnce(Return(std::vector<BluetoothGattService*>()))
249 .WillOnce(Return(services)); 274 .WillOnce(Return(services));
250 275
251 // Load and wait for setup. 276 // Load and wait for setup.
252 ExtensionTestMessageListener listener("ready", true); 277 ExtensionTestMessageListener listener("ready", true);
253 ASSERT_TRUE(LoadExtension( 278 ASSERT_TRUE(LoadExtension(
254 test_data_dir_.AppendASCII("bluetooth_low_energy/get_services"))); 279 test_data_dir_.AppendASCII("bluetooth_low_energy/get_services")));
255 EXPECT_TRUE(listener.WaitUntilSatisfied()); 280 EXPECT_TRUE(listener.WaitUntilSatisfied());
256 281
257 listener.Reply("go"); 282 listener.Reply("go");
258 283
259 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 284 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
260 } 285 }
261 286
262 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetService) { 287 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetService) {
263 ResultCatcher catcher; 288 ResultCatcher catcher;
264 catcher.RestrictToProfile(browser()->profile()); 289 catcher.RestrictToProfile(browser()->profile());
265 290
266 event_router()->DeviceAdded(mock_adapter_, device_.get()); 291 event_router()->DeviceAdded(mock_adapter_, device0_.get());
267 event_router()->GattServiceAdded(device_.get(), service0_.get()); 292 event_router()->GattServiceAdded(device0_.get(), service0_.get());
268 293
269 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 294 EXPECT_CALL(*mock_adapter_, GetDevice(_))
270 .Times(3) 295 .Times(3)
271 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) 296 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL)))
272 .WillRepeatedly(Return(device_.get())); 297 .WillRepeatedly(Return(device0_.get()));
273 298
274 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 299 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
275 .Times(2) 300 .Times(2)
276 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) 301 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL)))
277 .WillOnce(Return(service0_.get())); 302 .WillOnce(Return(service0_.get()));
278 303
279 // Load and wait for setup. 304 // Load and wait for setup.
280 ExtensionTestMessageListener listener("ready", true); 305 ExtensionTestMessageListener listener("ready", true);
281 ASSERT_TRUE(LoadExtension( 306 ASSERT_TRUE(LoadExtension(
282 test_data_dir_.AppendASCII("bluetooth_low_energy/get_service"))); 307 test_data_dir_.AppendASCII("bluetooth_low_energy/get_service")));
283 EXPECT_TRUE(listener.WaitUntilSatisfied()); 308 EXPECT_TRUE(listener.WaitUntilSatisfied());
284 309
285 listener.Reply("go"); 310 listener.Reply("go");
286 311
287 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 312 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
288 313
289 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 314 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
290 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 315 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
291 } 316 }
292 317
293 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ServiceEvents) { 318 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ServiceEvents) {
294 ResultCatcher catcher; 319 ResultCatcher catcher;
295 catcher.RestrictToProfile(browser()->profile()); 320 catcher.RestrictToProfile(browser()->profile());
296 321
297 // Load the extension and let it set up. 322 // Load the extension and let it set up.
298 ExtensionTestMessageListener listener("ready", true); 323 ExtensionTestMessageListener listener("ready", true);
299 ASSERT_TRUE(LoadExtension( 324 ASSERT_TRUE(LoadExtension(
300 test_data_dir_.AppendASCII("bluetooth_low_energy/service_events"))); 325 test_data_dir_.AppendASCII("bluetooth_low_energy/service_events")));
301 326
302 // Cause events to be sent to the extension. 327 // Cause events to be sent to the extension.
303 event_router()->DeviceAdded(mock_adapter_, device_.get()); 328 event_router()->DeviceAdded(mock_adapter_, device0_.get());
304 329
305 event_router()->GattServiceAdded(device_.get(), service0_.get()); 330 event_router()->GattServiceAdded(device0_.get(), service0_.get());
306 event_router()->GattServiceAdded(device_.get(), service1_.get()); 331 event_router()->GattServiceAdded(device0_.get(), service1_.get());
307 event_router()->GattServiceChanged(service1_.get()); 332 event_router()->GattServiceChanged(service1_.get());
308 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 333 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
309 334
310 EXPECT_TRUE(listener.WaitUntilSatisfied()); 335 EXPECT_TRUE(listener.WaitUntilSatisfied());
311 listener.Reply("go"); 336 listener.Reply("go");
312 337
313 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 338 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
314 event_router()->GattServiceRemoved(device_.get(), service1_.get()); 339 event_router()->GattServiceRemoved(device0_.get(), service1_.get());
315 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 340 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
316 } 341 }
317 342
318 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedService) { 343 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedService) {
319 ResultCatcher catcher; 344 ResultCatcher catcher;
320 catcher.RestrictToProfile(browser()->profile()); 345 catcher.RestrictToProfile(browser()->profile());
321 346
322 // Load the extension and let it set up. 347 // Load the extension and let it set up.
323 ASSERT_TRUE(LoadExtension( 348 ASSERT_TRUE(LoadExtension(
324 test_data_dir_.AppendASCII("bluetooth_low_energy/get_removed_service"))); 349 test_data_dir_.AppendASCII("bluetooth_low_energy/get_removed_service")));
325 350
326 // 1. getService success. 351 // 1. getService success.
327 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 352 EXPECT_CALL(*mock_adapter_, GetDevice(_))
328 .Times(1) 353 .Times(1)
329 .WillOnce(Return(device_.get())); 354 .WillOnce(Return(device0_.get()));
330 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 355 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
331 .Times(1) 356 .Times(1)
332 .WillOnce(Return(service0_.get())); 357 .WillOnce(Return(service0_.get()));
333 358
334 event_router()->DeviceAdded(mock_adapter_, device_.get()); 359 event_router()->DeviceAdded(mock_adapter_, device0_.get());
335 event_router()->GattServiceAdded(device_.get(), service0_.get()); 360 event_router()->GattServiceAdded(device0_.get(), service0_.get());
336 361
337 ExtensionTestMessageListener get_service_success_listener("getServiceSuccess", 362 ExtensionTestMessageListener get_service_success_listener("getServiceSuccess",
338 true); 363 true);
339 EXPECT_TRUE(get_service_success_listener.WaitUntilSatisfied()); 364 EXPECT_TRUE(get_service_success_listener.WaitUntilSatisfied());
340 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 365 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
341 testing::Mock::VerifyAndClearExpectations(device_.get()); 366 testing::Mock::VerifyAndClearExpectations(device0_.get());
342 367
343 // 2. getService fail. 368 // 2. getService fail.
344 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0); 369 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0);
345 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)).Times(0); 370 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0)).Times(0);
346 371
347 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 372 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
348 373
349 ExtensionTestMessageListener get_service_fail_listener("getServiceFail", 374 ExtensionTestMessageListener get_service_fail_listener("getServiceFail",
350 true); 375 true);
351 EXPECT_TRUE(get_service_fail_listener.WaitUntilSatisfied()); 376 EXPECT_TRUE(get_service_fail_listener.WaitUntilSatisfied());
352 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 377 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
353 testing::Mock::VerifyAndClearExpectations(device_.get()); 378 testing::Mock::VerifyAndClearExpectations(device0_.get());
354 379
355 get_service_fail_listener.Reply("go"); 380 get_service_fail_listener.Reply("go");
356 381
357 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 382 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
358 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 383 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
359 } 384 }
360 385
361 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetIncludedServices) { 386 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetIncludedServices) {
362 ResultCatcher catcher; 387 ResultCatcher catcher;
363 catcher.RestrictToProfile(browser()->profile()); 388 catcher.RestrictToProfile(browser()->profile());
364 389
365 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 390 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
366 "bluetooth_low_energy/get_included_services"))); 391 "bluetooth_low_energy/get_included_services")));
367 392
368 // Wait for initial call to end with failure as there is no mapping. 393 // Wait for initial call to end with failure as there is no mapping.
369 ExtensionTestMessageListener listener("ready", true); 394 ExtensionTestMessageListener listener("ready", true);
370 EXPECT_TRUE(listener.WaitUntilSatisfied()); 395 EXPECT_TRUE(listener.WaitUntilSatisfied());
371 396
372 // Set up for the rest of the calls before replying. Included services can be 397 // Set up for the rest of the calls before replying. Included services can be
373 // returned even if there is no instance ID mapping for them yet, so no need 398 // returned even if there is no instance ID mapping for them yet, so no need
374 // to call GattServiceAdded for |service1_| here. 399 // to call GattServiceAdded for |service1_| here.
375 event_router()->DeviceAdded(mock_adapter_, device_.get()); 400 event_router()->DeviceAdded(mock_adapter_, device0_.get());
376 event_router()->GattServiceAdded(device_.get(), service0_.get()); 401 event_router()->GattServiceAdded(device0_.get(), service0_.get());
377 402
378 std::vector<BluetoothGattService*> includes; 403 std::vector<BluetoothGattService*> includes;
379 includes.push_back(service1_.get()); 404 includes.push_back(service1_.get());
380 EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress)) 405 EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0))
381 .Times(2) 406 .Times(2)
382 .WillRepeatedly(Return(device_.get())); 407 .WillRepeatedly(Return(device0_.get()));
383 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 408 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
384 .Times(2) 409 .Times(2)
385 .WillRepeatedly(Return(service0_.get())); 410 .WillRepeatedly(Return(service0_.get()));
386 EXPECT_CALL(*service0_, GetIncludedServices()) 411 EXPECT_CALL(*service0_, GetIncludedServices())
387 .Times(2) 412 .Times(2)
388 .WillOnce(Return(std::vector<BluetoothGattService*>())) 413 .WillOnce(Return(std::vector<BluetoothGattService*>()))
389 .WillOnce(Return(includes)); 414 .WillOnce(Return(includes));
390 415
391 listener.Reply("go"); 416 listener.Reply("go");
392 listener.Reset(); 417 listener.Reset();
393 418
394 EXPECT_TRUE(listener.WaitUntilSatisfied()); 419 EXPECT_TRUE(listener.WaitUntilSatisfied());
395 420
396 listener.Reply("go"); 421 listener.Reply("go");
397 422
398 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 423 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
399 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 424 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
400 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 425 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
401 } 426 }
402 427
403 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristics) { 428 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristics) {
404 ResultCatcher catcher; 429 ResultCatcher catcher;
405 catcher.RestrictToProfile(browser()->profile()); 430 catcher.RestrictToProfile(browser()->profile());
406 431
407 std::vector<BluetoothGattCharacteristic*> characteristics; 432 std::vector<BluetoothGattCharacteristic*> characteristics;
408 characteristics.push_back(chrc0_.get()); 433 characteristics.push_back(chrc0_.get());
409 characteristics.push_back(chrc1_.get()); 434 characteristics.push_back(chrc1_.get());
410 435
411 event_router()->DeviceAdded(mock_adapter_, device_.get()); 436 event_router()->DeviceAdded(mock_adapter_, device0_.get());
412 event_router()->GattServiceAdded(device_.get(), service0_.get()); 437 event_router()->GattServiceAdded(device0_.get(), service0_.get());
413 438
414 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(3).WillRepeatedly( 439 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(3).WillRepeatedly(
415 Return(device_.get())); 440 Return(device0_.get()));
416 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 441 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
417 .Times(3) 442 .Times(3)
418 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) 443 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL)))
419 .WillRepeatedly(Return(service0_.get())); 444 .WillRepeatedly(Return(service0_.get()));
420 EXPECT_CALL(*service0_, GetCharacteristics()) 445 EXPECT_CALL(*service0_, GetCharacteristics())
421 .Times(2) 446 .Times(2)
422 .WillOnce(Return(std::vector<BluetoothGattCharacteristic*>())) 447 .WillOnce(Return(std::vector<BluetoothGattCharacteristic*>()))
423 .WillOnce(Return(characteristics)); 448 .WillOnce(Return(characteristics));
424 449
425 ExtensionTestMessageListener listener("ready", true); 450 ExtensionTestMessageListener listener("ready", true);
426 ASSERT_TRUE(LoadExtension( 451 ASSERT_TRUE(LoadExtension(
427 test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristics"))); 452 test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristics")));
428 EXPECT_TRUE(listener.WaitUntilSatisfied()); 453 EXPECT_TRUE(listener.WaitUntilSatisfied());
429 454
430 listener.Reply("go"); 455 listener.Reply("go");
431 456
432 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 457 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
433 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 458 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
434 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 459 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
435 } 460 }
436 461
437 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristic) { 462 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetCharacteristic) {
438 ResultCatcher catcher; 463 ResultCatcher catcher;
439 catcher.RestrictToProfile(browser()->profile()); 464 catcher.RestrictToProfile(browser()->profile());
440 465
441 event_router()->DeviceAdded(mock_adapter_, device_.get()); 466 event_router()->DeviceAdded(mock_adapter_, device0_.get());
442 event_router()->GattServiceAdded(device_.get(), service0_.get()); 467 event_router()->GattServiceAdded(device0_.get(), service0_.get());
443 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 468 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
444 469
445 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 470 EXPECT_CALL(*mock_adapter_, GetDevice(_))
446 .Times(4) 471 .Times(4)
447 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) 472 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL)))
448 .WillRepeatedly(Return(device_.get())); 473 .WillRepeatedly(Return(device0_.get()));
449 474
450 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 475 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
451 .Times(3) 476 .Times(3)
452 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) 477 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL)))
453 .WillRepeatedly(Return(service0_.get())); 478 .WillRepeatedly(Return(service0_.get()));
454 479
455 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 480 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
456 .Times(2) 481 .Times(2)
457 .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL))) 482 .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL)))
458 .WillOnce(Return(chrc0_.get())); 483 .WillOnce(Return(chrc0_.get()));
459 484
460 // Load the extension and wait for first test. 485 // Load the extension and wait for first test.
461 ExtensionTestMessageListener listener("ready", true); 486 ExtensionTestMessageListener listener("ready", true);
462 ASSERT_TRUE(LoadExtension( 487 ASSERT_TRUE(LoadExtension(
463 test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristic"))); 488 test_data_dir_.AppendASCII("bluetooth_low_energy/get_characteristic")));
464 EXPECT_TRUE(listener.WaitUntilSatisfied()); 489 EXPECT_TRUE(listener.WaitUntilSatisfied());
465 490
466 listener.Reply("go"); 491 listener.Reply("go");
467 492
468 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 493 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
469 494
470 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 495 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
471 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 496 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
472 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 497 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
473 } 498 }
474 499
475 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, CharacteristicProperties) { 500 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, CharacteristicProperties) {
476 ResultCatcher catcher; 501 ResultCatcher catcher;
477 catcher.RestrictToProfile(browser()->profile()); 502 catcher.RestrictToProfile(browser()->profile());
478 503
479 event_router()->DeviceAdded(mock_adapter_, device_.get()); 504 event_router()->DeviceAdded(mock_adapter_, device0_.get());
480 event_router()->GattServiceAdded(device_.get(), service0_.get()); 505 event_router()->GattServiceAdded(device0_.get(), service0_.get());
481 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 506 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
482 507
483 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 508 EXPECT_CALL(*mock_adapter_, GetDevice(_))
484 .Times(12) 509 .Times(12)
485 .WillRepeatedly(Return(device_.get())); 510 .WillRepeatedly(Return(device0_.get()));
486 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 511 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
487 .Times(12) 512 .Times(12)
488 .WillRepeatedly(Return(service0_.get())); 513 .WillRepeatedly(Return(service0_.get()));
489 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 514 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
490 .Times(12) 515 .Times(12)
491 .WillRepeatedly(Return(chrc0_.get())); 516 .WillRepeatedly(Return(chrc0_.get()));
492 EXPECT_CALL(*chrc0_, GetProperties()) 517 EXPECT_CALL(*chrc0_, GetProperties())
493 .Times(12) 518 .Times(12)
494 .WillOnce(Return(BluetoothGattCharacteristic::kPropertyNone)) 519 .WillOnce(Return(BluetoothGattCharacteristic::kPropertyNone))
495 .WillOnce(Return(BluetoothGattCharacteristic::kPropertyBroadcast)) 520 .WillOnce(Return(BluetoothGattCharacteristic::kPropertyBroadcast))
496 .WillOnce(Return(BluetoothGattCharacteristic::kPropertyRead)) 521 .WillOnce(Return(BluetoothGattCharacteristic::kPropertyRead))
(...skipping 24 matching lines...) Expand all
521 ExtensionTestMessageListener listener("ready", true); 546 ExtensionTestMessageListener listener("ready", true);
522 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 547 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
523 "bluetooth_low_energy/characteristic_properties"))); 548 "bluetooth_low_energy/characteristic_properties")));
524 EXPECT_TRUE(listener.WaitUntilSatisfied()); 549 EXPECT_TRUE(listener.WaitUntilSatisfied());
525 550
526 listener.Reply("go"); 551 listener.Reply("go");
527 552
528 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 553 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
529 554
530 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 555 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
531 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 556 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
532 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 557 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
533 } 558 }
534 559
535 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedCharacteristic) { 560 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedCharacteristic) {
536 ResultCatcher catcher; 561 ResultCatcher catcher;
537 catcher.RestrictToProfile(browser()->profile()); 562 catcher.RestrictToProfile(browser()->profile());
538 563
539 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 564 EXPECT_CALL(*mock_adapter_, GetDevice(_))
540 .Times(1) 565 .Times(1)
541 .WillOnce(Return(device_.get())); 566 .WillOnce(Return(device0_.get()));
542 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 567 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
543 .Times(1) 568 .Times(1)
544 .WillOnce(Return(service0_.get())); 569 .WillOnce(Return(service0_.get()));
545 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 570 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
546 .Times(1) 571 .Times(1)
547 .WillOnce(Return(chrc0_.get())); 572 .WillOnce(Return(chrc0_.get()));
548 573
549 event_router()->DeviceAdded(mock_adapter_, device_.get()); 574 event_router()->DeviceAdded(mock_adapter_, device0_.get());
550 event_router()->GattServiceAdded(device_.get(), service0_.get()); 575 event_router()->GattServiceAdded(device0_.get(), service0_.get());
551 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 576 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
552 577
553 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 578 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
554 "bluetooth_low_energy/get_removed_characteristic"))); 579 "bluetooth_low_energy/get_removed_characteristic")));
555 580
556 ExtensionTestMessageListener listener("ready", true); 581 ExtensionTestMessageListener listener("ready", true);
557 EXPECT_TRUE(listener.WaitUntilSatisfied()); 582 EXPECT_TRUE(listener.WaitUntilSatisfied());
558 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 583 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
559 testing::Mock::VerifyAndClearExpectations(device_.get()); 584 testing::Mock::VerifyAndClearExpectations(device0_.get());
560 testing::Mock::VerifyAndClearExpectations(service0_.get()); 585 testing::Mock::VerifyAndClearExpectations(service0_.get());
561 586
562 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0); 587 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0);
563 EXPECT_CALL(*device_, GetGattService(_)).Times(0); 588 EXPECT_CALL(*device0_, GetGattService(_)).Times(0);
564 EXPECT_CALL(*service0_, GetCharacteristic(_)).Times(0); 589 EXPECT_CALL(*service0_, GetCharacteristic(_)).Times(0);
565 590
566 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 591 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
567 592
568 listener.Reply("go"); 593 listener.Reply("go");
569 listener.Reset(); 594 listener.Reset();
570 EXPECT_TRUE(listener.WaitUntilSatisfied()); 595 EXPECT_TRUE(listener.WaitUntilSatisfied());
571 596
572 listener.Reply("go"); 597 listener.Reply("go");
573 598
574 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 599 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
575 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 600 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
576 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 601 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
577 } 602 }
578 603
579 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, CharacteristicValueChanged) { 604 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, CharacteristicValueChanged) {
580 ResultCatcher catcher; 605 ResultCatcher catcher;
581 catcher.RestrictToProfile(browser()->profile()); 606 catcher.RestrictToProfile(browser()->profile());
582 607
583 // Load the extension and let it set up. 608 // Load the extension and let it set up.
584 ExtensionTestMessageListener listener("ready", true); 609 ExtensionTestMessageListener listener("ready", true);
585 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 610 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
586 "bluetooth_low_energy/characteristic_value_changed"))); 611 "bluetooth_low_energy/characteristic_value_changed")));
587 612
588 // Cause events to be sent to the extension. 613 // Cause events to be sent to the extension.
589 event_router()->DeviceAdded(mock_adapter_, device_.get()); 614 event_router()->DeviceAdded(mock_adapter_, device0_.get());
590 event_router()->GattServiceAdded(device_.get(), service0_.get()); 615 event_router()->GattServiceAdded(device0_.get(), service0_.get());
591 event_router()->GattServiceAdded(device_.get(), service1_.get()); 616 event_router()->GattServiceAdded(device0_.get(), service1_.get());
592 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 617 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
593 event_router()->GattCharacteristicAdded(service1_.get(), chrc2_.get()); 618 event_router()->GattCharacteristicAdded(service1_.get(), chrc2_.get());
594 619
595 std::vector<uint8> value; 620 std::vector<uint8> value;
596 event_router()->GattCharacteristicValueChanged( 621 event_router()->GattCharacteristicValueChanged(
597 service0_.get(), chrc0_.get(), value); 622 service0_.get(), chrc0_.get(), value);
598 event_router()->GattCharacteristicValueChanged( 623 event_router()->GattCharacteristicValueChanged(
599 service1_.get(), chrc2_.get(), value); 624 service1_.get(), chrc2_.get(), value);
600 625
601 EXPECT_TRUE(listener.WaitUntilSatisfied()); 626 EXPECT_TRUE(listener.WaitUntilSatisfied());
602 listener.Reply("go"); 627 listener.Reply("go");
603 628
604 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 629 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
605 event_router()->GattCharacteristicRemoved(service1_.get(), chrc2_.get()); 630 event_router()->GattCharacteristicRemoved(service1_.get(), chrc2_.get());
606 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 631 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
607 event_router()->GattServiceRemoved(device_.get(), service1_.get()); 632 event_router()->GattServiceRemoved(device0_.get(), service1_.get());
608 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 633 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
609 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 634 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
610 } 635 }
611 636
612 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReadCharacteristicValue) { 637 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReadCharacteristicValue) {
613 ResultCatcher catcher; 638 ResultCatcher catcher;
614 catcher.RestrictToProfile(browser()->profile()); 639 catcher.RestrictToProfile(browser()->profile());
615 640
616 event_router()->DeviceAdded(mock_adapter_, device_.get()); 641 event_router()->DeviceAdded(mock_adapter_, device0_.get());
617 event_router()->GattServiceAdded(device_.get(), service0_.get()); 642 event_router()->GattServiceAdded(device0_.get(), service0_.get());
618 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 643 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
619 644
620 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 645 EXPECT_CALL(*mock_adapter_, GetDevice(_))
621 .Times(3) 646 .Times(3)
622 .WillRepeatedly(Return(device_.get())); 647 .WillRepeatedly(Return(device0_.get()));
623 648
624 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 649 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
625 .Times(3) 650 .Times(3)
626 .WillRepeatedly(Return(service0_.get())); 651 .WillRepeatedly(Return(service0_.get()));
627 652
628 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 653 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
629 .Times(3) 654 .Times(3)
630 .WillRepeatedly(Return(chrc0_.get())); 655 .WillRepeatedly(Return(chrc0_.get()));
631 656
657 std::vector<uint8> value;
632 EXPECT_CALL(*chrc0_, ReadRemoteCharacteristic(_, _)) 658 EXPECT_CALL(*chrc0_, ReadRemoteCharacteristic(_, _))
633 .Times(2) 659 .Times(2)
634 .WillOnce(Invoke(&ReadValueErrorCallback)) 660 .WillOnce(InvokeCallbackArgument<1>())
635 .WillOnce(Invoke(&ReadValueSuccessCallback)); 661 .WillOnce(InvokeCallbackArgument<0>(value));
636 662
637 ExtensionTestMessageListener listener("ready", true); 663 ExtensionTestMessageListener listener("ready", true);
638 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 664 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
639 "bluetooth_low_energy/read_characteristic_value"))); 665 "bluetooth_low_energy/read_characteristic_value")));
640 EXPECT_TRUE(listener.WaitUntilSatisfied()); 666 EXPECT_TRUE(listener.WaitUntilSatisfied());
641 667
642 listener.Reply("go"); 668 listener.Reply("go");
643 669
644 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 670 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
645 671
646 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 672 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
647 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 673 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
648 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 674 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
649 } 675 }
650 676
651 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, WriteCharacteristicValue) { 677 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, WriteCharacteristicValue) {
652 ResultCatcher catcher; 678 ResultCatcher catcher;
653 catcher.RestrictToProfile(browser()->profile()); 679 catcher.RestrictToProfile(browser()->profile());
654 680
655 event_router()->DeviceAdded(mock_adapter_, device_.get()); 681 event_router()->DeviceAdded(mock_adapter_, device0_.get());
656 event_router()->GattServiceAdded(device_.get(), service0_.get()); 682 event_router()->GattServiceAdded(device0_.get(), service0_.get());
657 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 683 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
658 684
659 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 685 EXPECT_CALL(*mock_adapter_, GetDevice(_))
660 .Times(3) 686 .Times(3)
661 .WillRepeatedly(Return(device_.get())); 687 .WillRepeatedly(Return(device0_.get()));
662 688
663 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 689 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
664 .Times(3) 690 .Times(3)
665 .WillRepeatedly(Return(service0_.get())); 691 .WillRepeatedly(Return(service0_.get()));
666 692
667 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 693 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
668 .Times(3) 694 .Times(3)
669 .WillRepeatedly(Return(chrc0_.get())); 695 .WillRepeatedly(Return(chrc0_.get()));
670 696
671 std::vector<uint8> write_value; 697 std::vector<uint8> write_value;
672 EXPECT_CALL(*chrc0_, WriteRemoteCharacteristic(_, _, _)) 698 EXPECT_CALL(*chrc0_, WriteRemoteCharacteristic(_, _, _))
673 .Times(2) 699 .Times(2)
674 .WillOnce(Invoke(&WriteValueErrorCallback)) 700 .WillOnce(InvokeCallbackArgument<2>())
675 .WillOnce( 701 .WillOnce(DoAll(SaveArg<0>(&write_value), InvokeCallbackArgument<1>()));
676 DoAll(SaveArg<0>(&write_value), Invoke(&WriteValueSuccessCallback))); 702
677 EXPECT_CALL(*chrc0_, GetValue()).Times(1).WillOnce(ReturnRef(write_value)); 703 EXPECT_CALL(*chrc0_, GetValue()).Times(1).WillOnce(ReturnRef(write_value));
678 704
679 ExtensionTestMessageListener listener("ready", true); 705 ExtensionTestMessageListener listener("ready", true);
680 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 706 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
681 "bluetooth_low_energy/write_characteristic_value"))); 707 "bluetooth_low_energy/write_characteristic_value")));
682 EXPECT_TRUE(listener.WaitUntilSatisfied()); 708 EXPECT_TRUE(listener.WaitUntilSatisfied());
683 709
684 listener.Reply("go"); 710 listener.Reply("go");
685 711
686 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 712 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
687 713
688 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 714 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
689 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 715 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
690 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 716 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
691 } 717 }
692 718
693 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetDescriptors) { 719 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetDescriptors) {
694 ResultCatcher catcher; 720 ResultCatcher catcher;
695 catcher.RestrictToProfile(browser()->profile()); 721 catcher.RestrictToProfile(browser()->profile());
696 722
697 std::vector<BluetoothGattDescriptor*> descriptors; 723 std::vector<BluetoothGattDescriptor*> descriptors;
698 descriptors.push_back(desc0_.get()); 724 descriptors.push_back(desc0_.get());
699 descriptors.push_back(desc1_.get()); 725 descriptors.push_back(desc1_.get());
700 726
701 event_router()->DeviceAdded(mock_adapter_, device_.get()); 727 event_router()->DeviceAdded(mock_adapter_, device0_.get());
702 event_router()->GattServiceAdded(device_.get(), service0_.get()); 728 event_router()->GattServiceAdded(device0_.get(), service0_.get());
703 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 729 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
704 730
705 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 731 EXPECT_CALL(*mock_adapter_, GetDevice(_))
706 .Times(3) 732 .Times(3)
707 .WillRepeatedly(Return(device_.get())); 733 .WillRepeatedly(Return(device0_.get()));
708 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 734 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
709 .Times(3) 735 .Times(3)
710 .WillRepeatedly(Return(service0_.get())); 736 .WillRepeatedly(Return(service0_.get()));
711 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 737 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
712 .Times(3) 738 .Times(3)
713 .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL))) 739 .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL)))
714 .WillRepeatedly(Return(chrc0_.get())); 740 .WillRepeatedly(Return(chrc0_.get()));
715 EXPECT_CALL(*chrc0_, GetDescriptors()) 741 EXPECT_CALL(*chrc0_, GetDescriptors())
716 .Times(2) 742 .Times(2)
717 .WillOnce(Return(std::vector<BluetoothGattDescriptor*>())) 743 .WillOnce(Return(std::vector<BluetoothGattDescriptor*>()))
718 .WillOnce(Return(descriptors)); 744 .WillOnce(Return(descriptors));
719 745
720 ExtensionTestMessageListener listener("ready", true); 746 ExtensionTestMessageListener listener("ready", true);
721 ASSERT_TRUE(LoadExtension( 747 ASSERT_TRUE(LoadExtension(
722 test_data_dir_.AppendASCII("bluetooth_low_energy/get_descriptors"))); 748 test_data_dir_.AppendASCII("bluetooth_low_energy/get_descriptors")));
723 EXPECT_TRUE(listener.WaitUntilSatisfied()); 749 EXPECT_TRUE(listener.WaitUntilSatisfied());
724 750
725 listener.Reply("go"); 751 listener.Reply("go");
726 752
727 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 753 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
728 754
729 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 755 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
730 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 756 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
731 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 757 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
732 } 758 }
733 759
734 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetDescriptor) { 760 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetDescriptor) {
735 ResultCatcher catcher; 761 ResultCatcher catcher;
736 catcher.RestrictToProfile(browser()->profile()); 762 catcher.RestrictToProfile(browser()->profile());
737 763
738 event_router()->DeviceAdded(mock_adapter_, device_.get()); 764 event_router()->DeviceAdded(mock_adapter_, device0_.get());
739 event_router()->GattServiceAdded(device_.get(), service0_.get()); 765 event_router()->GattServiceAdded(device0_.get(), service0_.get());
740 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 766 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
741 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 767 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
742 768
743 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 769 EXPECT_CALL(*mock_adapter_, GetDevice(_))
744 .Times(5) 770 .Times(5)
745 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL))) 771 .WillOnce(Return(static_cast<BluetoothDevice*>(NULL)))
746 .WillRepeatedly(Return(device_.get())); 772 .WillRepeatedly(Return(device0_.get()));
747 773
748 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 774 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
749 .Times(4) 775 .Times(4)
750 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL))) 776 .WillOnce(Return(static_cast<BluetoothGattService*>(NULL)))
751 .WillRepeatedly(Return(service0_.get())); 777 .WillRepeatedly(Return(service0_.get()));
752 778
753 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 779 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
754 .Times(3) 780 .Times(3)
755 .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL))) 781 .WillOnce(Return(static_cast<BluetoothGattCharacteristic*>(NULL)))
756 .WillRepeatedly(Return(chrc0_.get())); 782 .WillRepeatedly(Return(chrc0_.get()));
757 783
758 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) 784 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0))
759 .Times(2) 785 .Times(2)
760 .WillOnce(Return(static_cast<BluetoothGattDescriptor*>(NULL))) 786 .WillOnce(Return(static_cast<BluetoothGattDescriptor*>(NULL)))
761 .WillOnce(Return(desc0_.get())); 787 .WillOnce(Return(desc0_.get()));
762 788
763 // Load the extension and wait for first test. 789 // Load the extension and wait for first test.
764 ExtensionTestMessageListener listener("ready", true); 790 ExtensionTestMessageListener listener("ready", true);
765 ASSERT_TRUE(LoadExtension( 791 ASSERT_TRUE(LoadExtension(
766 test_data_dir_.AppendASCII("bluetooth_low_energy/get_descriptor"))); 792 test_data_dir_.AppendASCII("bluetooth_low_energy/get_descriptor")));
767 EXPECT_TRUE(listener.WaitUntilSatisfied()); 793 EXPECT_TRUE(listener.WaitUntilSatisfied());
768 794
769 listener.Reply("go"); 795 listener.Reply("go");
770 796
771 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 797 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
772 798
773 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 799 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
774 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 800 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
775 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 801 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
776 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 802 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
777 } 803 }
778 804
779 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedDescriptor) { 805 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GetRemovedDescriptor) {
780 ResultCatcher catcher; 806 ResultCatcher catcher;
781 catcher.RestrictToProfile(browser()->profile()); 807 catcher.RestrictToProfile(browser()->profile());
782 808
783 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 809 EXPECT_CALL(*mock_adapter_, GetDevice(_))
784 .Times(1) 810 .Times(1)
785 .WillOnce(Return(device_.get())); 811 .WillOnce(Return(device0_.get()));
786 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 812 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
787 .Times(1) 813 .Times(1)
788 .WillOnce(Return(service0_.get())); 814 .WillOnce(Return(service0_.get()));
789 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 815 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
790 .Times(1) 816 .Times(1)
791 .WillOnce(Return(chrc0_.get())); 817 .WillOnce(Return(chrc0_.get()));
792 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) 818 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0))
793 .Times(1) 819 .Times(1)
794 .WillOnce(Return(desc0_.get())); 820 .WillOnce(Return(desc0_.get()));
795 821
796 event_router()->DeviceAdded(mock_adapter_, device_.get()); 822 event_router()->DeviceAdded(mock_adapter_, device0_.get());
797 event_router()->GattServiceAdded(device_.get(), service0_.get()); 823 event_router()->GattServiceAdded(device0_.get(), service0_.get());
798 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 824 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
799 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 825 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
800 826
801 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 827 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
802 "bluetooth_low_energy/get_removed_descriptor"))); 828 "bluetooth_low_energy/get_removed_descriptor")));
803 829
804 ExtensionTestMessageListener listener("ready", true); 830 ExtensionTestMessageListener listener("ready", true);
805 EXPECT_TRUE(listener.WaitUntilSatisfied()); 831 EXPECT_TRUE(listener.WaitUntilSatisfied());
806 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 832 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
807 testing::Mock::VerifyAndClearExpectations(device_.get()); 833 testing::Mock::VerifyAndClearExpectations(device0_.get());
808 testing::Mock::VerifyAndClearExpectations(service0_.get()); 834 testing::Mock::VerifyAndClearExpectations(service0_.get());
809 testing::Mock::VerifyAndClearExpectations(chrc0_.get()); 835 testing::Mock::VerifyAndClearExpectations(chrc0_.get());
810 836
811 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0); 837 EXPECT_CALL(*mock_adapter_, GetDevice(_)).Times(0);
812 EXPECT_CALL(*device_, GetGattService(_)).Times(0); 838 EXPECT_CALL(*device0_, GetGattService(_)).Times(0);
813 EXPECT_CALL(*service0_, GetCharacteristic(_)).Times(0); 839 EXPECT_CALL(*service0_, GetCharacteristic(_)).Times(0);
814 EXPECT_CALL(*chrc0_, GetDescriptor(_)).Times(0); 840 EXPECT_CALL(*chrc0_, GetDescriptor(_)).Times(0);
815 841
816 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 842 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
817 843
818 listener.Reply("go"); 844 listener.Reply("go");
819 listener.Reset(); 845 listener.Reset();
820 EXPECT_TRUE(listener.WaitUntilSatisfied()); 846 EXPECT_TRUE(listener.WaitUntilSatisfied());
821 847
822 listener.Reply("go"); 848 listener.Reply("go");
823 849
824 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 850 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
825 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 851 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
826 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 852 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
827 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 853 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
828 } 854 }
829 855
830 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, DescriptorValueChanged) { 856 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, DescriptorValueChanged) {
831 ResultCatcher catcher; 857 ResultCatcher catcher;
832 catcher.RestrictToProfile(browser()->profile()); 858 catcher.RestrictToProfile(browser()->profile());
833 859
834 event_router()->DeviceAdded(mock_adapter_, device_.get()); 860 event_router()->DeviceAdded(mock_adapter_, device0_.get());
835 event_router()->GattServiceAdded(device_.get(), service0_.get()); 861 event_router()->GattServiceAdded(device0_.get(), service0_.get());
836 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 862 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
837 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 863 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
838 event_router()->GattDescriptorAdded(chrc0_.get(), desc1_.get()); 864 event_router()->GattDescriptorAdded(chrc0_.get(), desc1_.get());
839 865
840 // Load the extension and let it set up. 866 // Load the extension and let it set up.
841 ExtensionTestMessageListener listener("ready", true); 867 ExtensionTestMessageListener listener("ready", true);
842 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 868 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
843 "bluetooth_low_energy/descriptor_value_changed"))); 869 "bluetooth_low_energy/descriptor_value_changed")));
844 870
845 // Cause events to be sent to the extension. 871 // Cause events to be sent to the extension.
846 std::vector<uint8> value; 872 std::vector<uint8> value;
847 event_router()->GattDescriptorValueChanged(chrc0_.get(), desc0_.get(), value); 873 event_router()->GattDescriptorValueChanged(chrc0_.get(), desc0_.get(), value);
848 event_router()->GattDescriptorValueChanged(chrc0_.get(), desc1_.get(), value); 874 event_router()->GattDescriptorValueChanged(chrc0_.get(), desc1_.get(), value);
849 875
850 EXPECT_TRUE(listener.WaitUntilSatisfied()); 876 EXPECT_TRUE(listener.WaitUntilSatisfied());
851 listener.Reply("go"); 877 listener.Reply("go");
852 878
853 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 879 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
854 event_router()->GattDescriptorRemoved(chrc0_.get(), desc1_.get()); 880 event_router()->GattDescriptorRemoved(chrc0_.get(), desc1_.get());
855 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 881 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
856 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 882 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
857 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 883 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
858 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 884 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
859 } 885 }
860 886
861 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReadDescriptorValue) { 887 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReadDescriptorValue) {
862 ResultCatcher catcher; 888 ResultCatcher catcher;
863 catcher.RestrictToProfile(browser()->profile()); 889 catcher.RestrictToProfile(browser()->profile());
864 890
865 event_router()->DeviceAdded(mock_adapter_, device_.get()); 891 event_router()->DeviceAdded(mock_adapter_, device0_.get());
866 event_router()->GattServiceAdded(device_.get(), service0_.get()); 892 event_router()->GattServiceAdded(device0_.get(), service0_.get());
867 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 893 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
868 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 894 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
869 895
870 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 896 EXPECT_CALL(*mock_adapter_, GetDevice(_))
871 .Times(3) 897 .Times(3)
872 .WillRepeatedly(Return(device_.get())); 898 .WillRepeatedly(Return(device0_.get()));
873 899
874 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 900 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
875 .Times(3) 901 .Times(3)
876 .WillRepeatedly(Return(service0_.get())); 902 .WillRepeatedly(Return(service0_.get()));
877 903
878 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 904 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
879 .Times(3) 905 .Times(3)
880 .WillRepeatedly(Return(chrc0_.get())); 906 .WillRepeatedly(Return(chrc0_.get()));
881 907
882 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) 908 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0))
883 .Times(3) 909 .Times(3)
884 .WillRepeatedly(Return(desc0_.get())); 910 .WillRepeatedly(Return(desc0_.get()));
885 911
912 std::vector<uint8> value;
886 EXPECT_CALL(*desc0_, ReadRemoteDescriptor(_, _)) 913 EXPECT_CALL(*desc0_, ReadRemoteDescriptor(_, _))
887 .Times(2) 914 .Times(2)
888 .WillOnce(Invoke(&ReadValueErrorCallback)) 915 .WillOnce(InvokeCallbackArgument<1>())
889 .WillOnce(Invoke(&ReadValueSuccessCallback)); 916 .WillOnce(InvokeCallbackArgument<0>(value));
890 917
891 ExtensionTestMessageListener listener("ready", true); 918 ExtensionTestMessageListener listener("ready", true);
892 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 919 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
893 "bluetooth_low_energy/read_descriptor_value"))); 920 "bluetooth_low_energy/read_descriptor_value")));
894 EXPECT_TRUE(listener.WaitUntilSatisfied()); 921 EXPECT_TRUE(listener.WaitUntilSatisfied());
895 922
896 listener.Reply("go"); 923 listener.Reply("go");
897 924
898 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 925 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
899 926
900 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 927 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
901 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 928 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
902 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 929 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
903 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 930 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
904 } 931 }
905 932
906 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, WriteDescriptorValue) { 933 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, WriteDescriptorValue) {
907 ResultCatcher catcher; 934 ResultCatcher catcher;
908 catcher.RestrictToProfile(browser()->profile()); 935 catcher.RestrictToProfile(browser()->profile());
909 936
910 event_router()->DeviceAdded(mock_adapter_, device_.get()); 937 event_router()->DeviceAdded(mock_adapter_, device0_.get());
911 event_router()->GattServiceAdded(device_.get(), service0_.get()); 938 event_router()->GattServiceAdded(device0_.get(), service0_.get());
912 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 939 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
913 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 940 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
914 941
915 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 942 EXPECT_CALL(*mock_adapter_, GetDevice(_))
916 .Times(3) 943 .Times(3)
917 .WillRepeatedly(Return(device_.get())); 944 .WillRepeatedly(Return(device0_.get()));
918 945
919 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 946 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
920 .Times(3) 947 .Times(3)
921 .WillRepeatedly(Return(service0_.get())); 948 .WillRepeatedly(Return(service0_.get()));
922 949
923 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 950 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
924 .Times(3) 951 .Times(3)
925 .WillRepeatedly(Return(chrc0_.get())); 952 .WillRepeatedly(Return(chrc0_.get()));
926 953
927 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) 954 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0))
928 .Times(3) 955 .Times(3)
929 .WillRepeatedly(Return(desc0_.get())); 956 .WillRepeatedly(Return(desc0_.get()));
930 957
931 std::vector<uint8> write_value; 958 std::vector<uint8> write_value;
932 EXPECT_CALL(*desc0_, WriteRemoteDescriptor(_, _, _)) 959 EXPECT_CALL(*desc0_, WriteRemoteDescriptor(_, _, _))
933 .Times(2) 960 .Times(2)
934 .WillOnce(Invoke(&WriteValueErrorCallback)) 961 .WillOnce(InvokeCallbackArgument<2>())
935 .WillOnce( 962 .WillOnce(DoAll(SaveArg<0>(&write_value), InvokeCallbackArgument<1>()));
936 DoAll(SaveArg<0>(&write_value), Invoke(&WriteValueSuccessCallback)));
937 963
938 EXPECT_CALL(*desc0_, GetValue()).Times(1).WillOnce(ReturnRef(write_value)); 964 EXPECT_CALL(*desc0_, GetValue()).Times(1).WillOnce(ReturnRef(write_value));
939 965
940 ExtensionTestMessageListener listener("ready", true); 966 ExtensionTestMessageListener listener("ready", true);
941 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 967 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
942 "bluetooth_low_energy/write_descriptor_value"))); 968 "bluetooth_low_energy/write_descriptor_value")));
943 EXPECT_TRUE(listener.WaitUntilSatisfied()); 969 EXPECT_TRUE(listener.WaitUntilSatisfied());
944 970
945 listener.Reply("go"); 971 listener.Reply("go");
946 972
947 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 973 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
948 974
949 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 975 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
950 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 976 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
951 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 977 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
952 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 978 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
953 } 979 }
954 980
955 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, PermissionDenied) { 981 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, PermissionDenied) {
956 ResultCatcher catcher; 982 ResultCatcher catcher;
957 catcher.RestrictToProfile(browser()->profile()); 983 catcher.RestrictToProfile(browser()->profile());
958 984
959 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 985 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
960 "bluetooth_low_energy/permission_denied"))); 986 "bluetooth_low_energy/permission_denied")));
961 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 987 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
962 } 988 }
963 989
964 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, UuidPermissionMethods) { 990 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, UuidPermissionMethods) {
965 ResultCatcher catcher; 991 ResultCatcher catcher;
966 catcher.RestrictToProfile(browser()->profile()); 992 catcher.RestrictToProfile(browser()->profile());
967 993
968 event_router()->DeviceAdded(mock_adapter_, device_.get()); 994 event_router()->DeviceAdded(mock_adapter_, device0_.get());
969 event_router()->GattServiceAdded(device_.get(), service0_.get()); 995 event_router()->GattServiceAdded(device0_.get(), service0_.get());
970 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 996 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
971 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 997 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
972 998
973 std::vector<BluetoothGattService*> services; 999 std::vector<BluetoothGattService*> services;
974 services.push_back(service0_.get()); 1000 services.push_back(service0_.get());
975 1001
976 EXPECT_CALL(*mock_adapter_, GetDevice(_)) 1002 EXPECT_CALL(*mock_adapter_, GetDevice(_))
977 .WillRepeatedly(Return(device_.get())); 1003 .WillRepeatedly(Return(device0_.get()));
978 EXPECT_CALL(*device_, GetGattServices()).WillOnce(Return(services)); 1004 EXPECT_CALL(*device0_, GetGattServices()).WillOnce(Return(services));
979 EXPECT_CALL(*device_, GetGattService(kTestServiceId0)) 1005 EXPECT_CALL(*device0_, GetGattService(kTestServiceId0))
980 .WillRepeatedly(Return(service0_.get())); 1006 .WillRepeatedly(Return(service0_.get()));
981 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0)) 1007 EXPECT_CALL(*service0_, GetCharacteristic(kTestCharacteristicId0))
982 .WillRepeatedly(Return(chrc0_.get())); 1008 .WillRepeatedly(Return(chrc0_.get()));
983 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0)) 1009 EXPECT_CALL(*chrc0_, GetDescriptor(kTestDescriptorId0))
984 .WillRepeatedly(Return(desc0_.get())); 1010 .WillRepeatedly(Return(desc0_.get()));
985 1011
986 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 1012 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
987 "bluetooth_low_energy/uuid_permission_methods"))); 1013 "bluetooth_low_energy/uuid_permission_methods")));
988 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 1014 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
989 1015
990 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 1016 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
991 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 1017 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
992 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 1018 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
993 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 1019 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
994 } 1020 }
995 1021
996 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, UuidPermissionEvents) { 1022 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, UuidPermissionEvents) {
997 ResultCatcher catcher; 1023 ResultCatcher catcher;
998 catcher.RestrictToProfile(browser()->profile()); 1024 catcher.RestrictToProfile(browser()->profile());
999 1025
1000 ExtensionTestMessageListener listener("ready", true); 1026 ExtensionTestMessageListener listener("ready", true);
1001 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII( 1027 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
1002 "bluetooth_low_energy/uuid_permission_events"))); 1028 "bluetooth_low_energy/uuid_permission_events")));
1003 1029
1004 // Cause events to be sent to the extension. 1030 // Cause events to be sent to the extension.
1005 event_router()->DeviceAdded(mock_adapter_, device_.get()); 1031 event_router()->DeviceAdded(mock_adapter_, device0_.get());
1006 event_router()->GattServiceAdded(device_.get(), service0_.get()); 1032 event_router()->GattServiceAdded(device0_.get(), service0_.get());
1007 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get()); 1033 event_router()->GattCharacteristicAdded(service0_.get(), chrc0_.get());
1008 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get()); 1034 event_router()->GattDescriptorAdded(chrc0_.get(), desc0_.get());
1009 1035
1010 std::vector<uint8> value; 1036 std::vector<uint8> value;
1011 event_router()->GattCharacteristicValueChanged( 1037 event_router()->GattCharacteristicValueChanged(
1012 service0_.get(), chrc0_.get(), value); 1038 service0_.get(), chrc0_.get(), value);
1013 event_router()->GattDescriptorValueChanged(chrc0_.get(), desc0_.get(), value); 1039 event_router()->GattDescriptorValueChanged(chrc0_.get(), desc0_.get(), value);
1014 event_router()->GattServiceChanged(service0_.get()); 1040 event_router()->GattServiceChanged(service0_.get());
1015 1041
1016 EXPECT_TRUE(listener.WaitUntilSatisfied()); 1042 EXPECT_TRUE(listener.WaitUntilSatisfied());
1017 listener.Reply("go"); 1043 listener.Reply("go");
1018 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 1044 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
1019 1045
1020 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get()); 1046 event_router()->GattDescriptorRemoved(chrc0_.get(), desc0_.get());
1021 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get()); 1047 event_router()->GattCharacteristicRemoved(service0_.get(), chrc0_.get());
1022 event_router()->GattServiceRemoved(device_.get(), service0_.get()); 1048 event_router()->GattServiceRemoved(device0_.get(), service0_.get());
1023 event_router()->DeviceRemoved(mock_adapter_, device_.get()); 1049 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
1050 }
1051
1052 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, GattConnection) {
1053 ResultCatcher catcher;
1054 catcher.RestrictToProfile(browser()->profile());
1055
1056 event_router()->DeviceAdded(mock_adapter_, device0_.get());
1057 event_router()->DeviceAdded(mock_adapter_, device1_.get());
1058
1059 EXPECT_CALL(*mock_adapter_, GetDevice(_))
1060 .WillRepeatedly(Return(static_cast<BluetoothDevice*>(NULL)));
1061 EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0))
1062 .WillRepeatedly(Return(device0_.get()));
1063 EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress1))
1064 .WillRepeatedly(Return(device1_.get()));
1065 EXPECT_CALL(*device0_, CreateGattConnection(_, _))
1066 .Times(3)
1067 .WillOnce(InvokeCallbackArgument<1>(BluetoothDevice::ERROR_FAILED))
1068 .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>(
1069 CreateGattConnection(kTestLeDeviceAddress0,
1070 true /* expect_disconnect */)))
1071 .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>(
1072 CreateGattConnection(kTestLeDeviceAddress0,
1073 false /* expect_disconnect */)));
1074 EXPECT_CALL(*device1_, CreateGattConnection(_, _))
1075 .Times(1)
1076 .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>(
1077 CreateGattConnection(kTestLeDeviceAddress1,
1078 true /* expect_disconnect */)));
1079
1080 ASSERT_TRUE(LoadExtension(
1081 test_data_dir_.AppendASCII("bluetooth_low_energy/gatt_connection")));
1082 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
1083
1084 event_router()->DeviceRemoved(mock_adapter_, device1_.get());
1085 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
1086 }
1087
1088 IN_PROC_BROWSER_TEST_F(BluetoothLowEnergyApiTest, ReconnectAfterDisconnected) {
1089 ResultCatcher catcher;
1090 catcher.RestrictToProfile(browser()->profile());
1091
1092 event_router()->DeviceAdded(mock_adapter_, device0_.get());
1093
1094 EXPECT_CALL(*mock_adapter_, GetDevice(kTestLeDeviceAddress0))
1095 .WillRepeatedly(Return(device0_.get()));
1096
1097 MockBluetoothGattConnection* first_conn =
1098 static_cast<MockBluetoothGattConnection*>(CreateGattConnection(
1099 kTestLeDeviceAddress0, false /* expect_disconnect */));
1100 EXPECT_CALL(*first_conn, IsConnected())
1101 .Times(2)
1102 .WillOnce(Return(true))
1103 .WillOnce(Return(false));
1104
1105 EXPECT_CALL(*device0_, CreateGattConnection(_, _))
1106 .Times(2)
1107 .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>(
1108 first_conn))
1109 .WillOnce(InvokeCallbackWithScopedPtrArg<0, BluetoothGattConnection>(
1110 CreateGattConnection(kTestLeDeviceAddress0,
1111 false /* expect_disconnect */)));
1112
1113 ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(
1114 "bluetooth_low_energy/reconnect_after_disconnected")));
1115 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
1116
1117 event_router()->DeviceRemoved(mock_adapter_, device0_.get());
1024 } 1118 }
1025 1119
1026 } // namespace 1120 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698