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

Side by Side Diff: chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc

Issue 177113013: Bluetooth: add Device events, and cleanup JS API (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@arman-patch
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (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 <string.h> 5 #include <string.h>
6 6
7 #include "base/strings/stringprintf.h" 7 #include "base/strings/stringprintf.h"
8 #include "base/strings/utf_string_conversions.h"
8 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h" 9 #include "chrome/browser/extensions/api/bluetooth/bluetooth_api.h"
9 #include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h" 10 #include "chrome/browser/extensions/api/bluetooth/bluetooth_event_router.h"
10 #include "chrome/browser/extensions/extension_apitest.h" 11 #include "chrome/browser/extensions/extension_apitest.h"
11 #include "chrome/browser/extensions/extension_function_test_utils.h" 12 #include "chrome/browser/extensions/extension_function_test_utils.h"
12 #include "chrome/browser/extensions/extension_service.h" 13 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/extensions/extension_test_message_listener.h" 14 #include "chrome/browser/extensions/extension_test_message_listener.h"
14 #include "chrome/browser/ui/browser.h" 15 #include "chrome/browser/ui/browser.h"
15 #include "chrome/test/base/ui_test_utils.h" 16 #include "chrome/test/base/ui_test_utils.h"
16 #include "device/bluetooth/bluetooth_adapter.h" 17 #include "device/bluetooth/bluetooth_adapter.h"
17 #include "device/bluetooth/bluetooth_out_of_band_pairing_data.h" 18 #include "device/bluetooth/bluetooth_out_of_band_pairing_data.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
59 // The browser will clean this up when it is torn down 60 // The browser will clean this up when it is torn down
60 mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>(); 61 mock_adapter_ = new testing::StrictMock<MockBluetoothAdapter>();
61 event_router()->SetAdapterForTest(mock_adapter_); 62 event_router()->SetAdapterForTest(mock_adapter_);
62 63
63 device1_.reset(new testing::NiceMock<MockBluetoothDevice>( 64 device1_.reset(new testing::NiceMock<MockBluetoothDevice>(
64 mock_adapter_, 0, "d1", "11:12:13:14:15:16", 65 mock_adapter_, 0, "d1", "11:12:13:14:15:16",
65 true /* paired */, true /* connected */)); 66 true /* paired */, true /* connected */));
66 device2_.reset(new testing::NiceMock<MockBluetoothDevice>( 67 device2_.reset(new testing::NiceMock<MockBluetoothDevice>(
67 mock_adapter_, 0, "d2", "21:22:23:24:25:26", 68 mock_adapter_, 0, "d2", "21:22:23:24:25:26",
68 false /* paired */, false /* connected */)); 69 false /* paired */, false /* connected */));
70 device3_.reset(new testing::NiceMock<MockBluetoothDevice>(
71 mock_adapter_, 0, "d3", "31:32:33:34:35:36",
72 false /* paired */, false /* connected */));
73
69 } 74 }
70 75
71 void DiscoverySessionCallback( 76 void DiscoverySessionCallback(
72 const BluetoothAdapter::DiscoverySessionCallback& callback, 77 const BluetoothAdapter::DiscoverySessionCallback& callback,
73 const BluetoothAdapter::ErrorCallback& error_callback) { 78 const BluetoothAdapter::ErrorCallback& error_callback) {
74 if (mock_session_.get()) { 79 if (mock_session_.get()) {
75 callback.Run( 80 callback.Run(
76 scoped_ptr<BluetoothDiscoverySession>(mock_session_.release())); 81 scoped_ptr<BluetoothDiscoverySession>(mock_session_.release()));
77 return; 82 return;
78 } 83 }
79 error_callback.Run(); 84 error_callback.Run();
80 } 85 }
81 86
82 template <class T> 87 template <class T>
83 T* setupFunction(T* function) { 88 T* setupFunction(T* function) {
84 function->set_extension(empty_extension_.get()); 89 function->set_extension(empty_extension_.get());
85 function->set_has_callback(true); 90 function->set_has_callback(true);
86 return function; 91 return function;
87 } 92 }
88 93
89 protected: 94 protected:
90 testing::StrictMock<MockBluetoothAdapter>* mock_adapter_; 95 testing::StrictMock<MockBluetoothAdapter>* mock_adapter_;
91 scoped_ptr<testing::NiceMock<MockBluetoothDiscoverySession> > mock_session_; 96 scoped_ptr<testing::NiceMock<MockBluetoothDiscoverySession> > mock_session_;
92 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_; 97 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_;
93 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device2_; 98 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device2_;
99 scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device3_;
94 scoped_ptr<testing::NiceMock<MockBluetoothProfile> > profile1_; 100 scoped_ptr<testing::NiceMock<MockBluetoothProfile> > profile1_;
95 scoped_ptr<testing::NiceMock<MockBluetoothProfile> > profile2_; 101 scoped_ptr<testing::NiceMock<MockBluetoothProfile> > profile2_;
96 102
97 extensions::ExtensionBluetoothEventRouter* event_router() { 103 extensions::ExtensionBluetoothEventRouter* event_router() {
98 return extensions::BluetoothAPI::Get(browser()->profile()) 104 return extensions::BluetoothAPI::Get(browser()->profile())
99 ->bluetooth_event_router(); 105 ->bluetooth_event_router();
100 } 106 }
101 107
102 private: 108 private:
103 scoped_refptr<Extension> empty_extension_; 109 scoped_refptr<Extension> empty_extension_;
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 new api::BluetoothSetOutOfBandPairingDataFunction); 322 new api::BluetoothSetOutOfBandPairingDataFunction);
317 std::string error(utils::RunFunctionAndReturnError( 323 std::string error(utils::RunFunctionAndReturnError(
318 set_oob_function.get(), params, browser())); 324 set_oob_function.get(), params, browser()));
319 EXPECT_FALSE(error.empty()); 325 EXPECT_FALSE(error.empty());
320 326
321 // TODO(bryeung): Also test setting the data when there is support for 327 // TODO(bryeung): Also test setting the data when there is support for
322 // ArrayBuffers in the arguments to the RunFunctionAnd* methods. 328 // ArrayBuffers in the arguments to the RunFunctionAnd* methods.
323 // crbug.com/132796 329 // crbug.com/132796
324 } 330 }
325 331
332 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DeviceEvents) {
333 ResultCatcher catcher;
334 catcher.RestrictToProfile(browser()->profile());
335
336 ASSERT_TRUE(LoadExtension(
337 test_data_dir_.AppendASCII("bluetooth/device_events")));
338
339 ExtensionTestMessageListener events_received("ready", true);
340 event_router()->DeviceAdded(mock_adapter_, device1_.get());
341 event_router()->DeviceAdded(mock_adapter_, device2_.get());
342
343 EXPECT_CALL(*device2_.get(), GetDeviceName())
344 .WillRepeatedly(testing::Return("the real d2"));
345 EXPECT_CALL(*device2_.get(), GetName())
346 .WillRepeatedly(testing::Return(base::UTF8ToUTF16("the real d2")));
347 event_router()->DeviceChanged(mock_adapter_, device2_.get());
348
349 event_router()->DeviceAdded(mock_adapter_, device3_.get());
350 event_router()->DeviceRemoved(mock_adapter_, device1_.get());
351 EXPECT_TRUE(events_received.WaitUntilSatisfied());
352 events_received.Reply("go");
353
354 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
355 }
356
326 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) { 357 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) {
327 // Try with a failure to start. This will return an error as we haven't 358 // Try with a failure to start. This will return an error as we haven't
328 // initialied a session object. 359 // initialied a session object.
329 EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_)) 360 EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_))
330 .WillOnce( 361 .WillOnce(
331 testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback)); 362 testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback));
332 363
333 // StartDiscovery failure will remove the adapter that is no longer used. 364 // StartDiscovery failure will not reference the adapter.
334 EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_));
335 scoped_refptr<api::BluetoothStartDiscoveryFunction> start_function; 365 scoped_refptr<api::BluetoothStartDiscoveryFunction> start_function;
336 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction); 366 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction);
337 std::string error( 367 std::string error(
338 utils::RunFunctionAndReturnError(start_function.get(), "[]", browser())); 368 utils::RunFunctionAndReturnError(start_function.get(), "[]", browser()));
339 ASSERT_FALSE(error.empty()); 369 ASSERT_FALSE(error.empty());
340 370
341 // Reset the adapter and initiate a discovery session. The ownership of the 371 // Reset the adapter and initiate a discovery session. The ownership of the
342 // mock session will be passed to the event router. 372 // mock session will be passed to the event router.
343 ASSERT_FALSE(mock_session_.get()); 373 ASSERT_FALSE(mock_session_.get());
344 SetUpMockAdapter(); 374 SetUpMockAdapter();
345 375
346 // Create a mock session to be returned as a result. Get a handle to it as 376 // Create a mock session to be returned as a result. Get a handle to it as
347 // its ownership will be passed and |mock_session_| will be reset. 377 // its ownership will be passed and |mock_session_| will be reset.
348 mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>( 378 mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>(
349 scoped_refptr<BluetoothAdapter>(mock_adapter_))); 379 scoped_refptr<BluetoothAdapter>(mock_adapter_)));
350 MockBluetoothDiscoverySession* session = mock_session_.get(); 380 MockBluetoothDiscoverySession* session = mock_session_.get();
351 EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_)) 381 EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_))
352 .WillOnce( 382 .WillOnce(
353 testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback)); 383 testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback));
354 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction); 384 start_function = setupFunction(new api::BluetoothStartDiscoveryFunction);
355 (void) 385 (void)
356 utils::RunFunctionAndReturnError(start_function.get(), "[]", browser()); 386 utils::RunFunctionAndReturnError(start_function.get(), "[]", browser());
357 387
358 // End the discovery session. The StopDiscovery function should succeed. 388 // End the discovery session. The StopDiscovery function should succeed.
359 testing::Mock::VerifyAndClearExpectations(mock_adapter_); 389 testing::Mock::VerifyAndClearExpectations(mock_adapter_);
360 EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true)); 390 EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true));
361 EXPECT_CALL(*session, Stop(testing::_, testing::_)) 391 EXPECT_CALL(*session, Stop(testing::_, testing::_))
362 .WillOnce(testing::Invoke(StopDiscoverySessionCallback)); 392 .WillOnce(testing::Invoke(StopDiscoverySessionCallback));
363 393
364 // StopDiscovery success will remove the adapter that is no longer used. 394 // StopDiscovery success will remove the session object, unreferncing the
armansito 2014/03/05 21:44:15 s/unreferncing/unreferencing/
keybuk 2014/03/06 21:33:44 Done.
365 EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_)); 395 // adapter.
366 scoped_refptr<api::BluetoothStopDiscoveryFunction> stop_function; 396 scoped_refptr<api::BluetoothStopDiscoveryFunction> stop_function;
367 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction); 397 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction);
368 (void) utils::RunFunctionAndReturnSingleResult( 398 (void) utils::RunFunctionAndReturnSingleResult(
369 stop_function.get(), "[]", browser()); 399 stop_function.get(), "[]", browser());
370 400
371 // Reset the adapter. Simulate failure for stop discovery. The event router 401 // Reset the adapter. Simulate failure for stop discovery. The event router
372 // still owns the session. Make it appear inactive. 402 // still owns the session. Make it appear inactive.
373 SetUpMockAdapter(); 403 SetUpMockAdapter();
374 EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(false)); 404 EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(false));
375 EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_));
376 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction); 405 stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction);
377 error = 406 error =
378 utils::RunFunctionAndReturnError(stop_function.get(), "[]", browser()); 407 utils::RunFunctionAndReturnError(stop_function.get(), "[]", browser());
379 ASSERT_FALSE(error.empty()); 408 ASSERT_FALSE(error.empty());
380 SetUpMockAdapter(); 409 SetUpMockAdapter();
381 } 410 }
382 411
383 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryCallback) { 412 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryCallback) {
384 mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>( 413 mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>(
385 scoped_refptr<BluetoothAdapter>(mock_adapter_))); 414 scoped_refptr<BluetoothAdapter>(mock_adapter_)));
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 } 596 }
568 597
569 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) { 598 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevices) {
570 ResultCatcher catcher; 599 ResultCatcher catcher;
571 catcher.RestrictToProfile(browser()->profile()); 600 catcher.RestrictToProfile(browser()->profile());
572 601
573 BluetoothAdapter::ConstDeviceList devices; 602 BluetoothAdapter::ConstDeviceList devices;
574 devices.push_back(device1_.get()); 603 devices.push_back(device1_.get());
575 devices.push_back(device2_.get()); 604 devices.push_back(device2_.get());
576 605
577 EXPECT_CALL(*device1_, ProvidesServiceWithUUID(testing::_))
578 .WillOnce(testing::Return(false));
579
580 EXPECT_CALL(*device2_, ProvidesServiceWithUUID(testing::_))
581 .WillOnce(testing::Return(true));
582
583 EXPECT_CALL(*mock_adapter_, GetDevices()) 606 EXPECT_CALL(*mock_adapter_, GetDevices())
584 .Times(2) 607 .Times(1)
585 .WillRepeatedly(testing::Return(devices)); 608 .WillRepeatedly(testing::Return(devices));
586 609
587 // Load and wait for setup 610 // Load and wait for setup
588 ExtensionTestMessageListener listener("ready", true); 611 ExtensionTestMessageListener listener("ready", true);
589 ASSERT_TRUE( 612 ASSERT_TRUE(
590 LoadExtension(test_data_dir_.AppendASCII("bluetooth/get_devices"))); 613 LoadExtension(test_data_dir_.AppendASCII("bluetooth/get_devices")));
591 EXPECT_TRUE(listener.WaitUntilSatisfied()); 614 EXPECT_TRUE(listener.WaitUntilSatisfied());
592 615
593 listener.Reply("go"); 616 listener.Reply("go");
594 617
595 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); 618 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
596 } 619 }
597
598 IN_PROC_BROWSER_TEST_F(BluetoothApiTest, GetDevicesError) {
599 ResultCatcher catcher;
600 catcher.RestrictToProfile(browser()->profile());
601
602 // Load and wait for setup
603 ExtensionTestMessageListener listener("ready", true);
604 ASSERT_TRUE(LoadExtension(
605 test_data_dir_.AppendASCII("bluetooth/get_devices_error")));
606 EXPECT_TRUE(listener.WaitUntilSatisfied());
607
608 listener.Reply("go");
609
610 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message();
611 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698