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

Unified Diff: chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc

Issue 189463002: Migrate chrome.bluetooth API backend to use device::BluetoothDiscoverySession. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc
diff --git a/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc b/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc
index e6c553f892166f2442b76d75fe7383b8d30fcd58..8f0b28da2d56b0c5c9c15226aa1e2bff2993bf7c 100644
--- a/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc
+++ b/chrome/browser/extensions/api/bluetooth/bluetooth_apitest.cc
@@ -17,16 +17,19 @@
#include "device/bluetooth/bluetooth_out_of_band_pairing_data.h"
#include "device/bluetooth/test/mock_bluetooth_adapter.h"
#include "device/bluetooth/test/mock_bluetooth_device.h"
+#include "device/bluetooth/test/mock_bluetooth_discovery_session.h"
#include "device/bluetooth/test/mock_bluetooth_profile.h"
#include "device/bluetooth/test/mock_bluetooth_socket.h"
#include "testing/gmock/include/gmock/gmock.h"
using device::BluetoothAdapter;
using device::BluetoothDevice;
+using device::BluetoothDiscoverySession;
using device::BluetoothOutOfBandPairingData;
using device::BluetoothProfile;
using device::MockBluetoothAdapter;
using device::MockBluetoothDevice;
+using device::MockBluetoothDiscoverySession;
using device::MockBluetoothProfile;
using extensions::Extension;
@@ -65,6 +68,17 @@ class BluetoothApiTest : public ExtensionApiTest {
false /* paired */, false /* connected */));
}
+ void DiscoverySessionCallback(
+ const BluetoothAdapter::DiscoverySessionCallback& callback,
+ const BluetoothAdapter::ErrorCallback& error_callback) {
+ if (mock_session_.get()) {
+ callback.Run(
+ scoped_ptr<BluetoothDiscoverySession>(mock_session_.release()));
+ return;
+ }
+ error_callback.Run();
+ }
+
template <class T>
T* setupFunction(T* function) {
function->set_extension(empty_extension_.get());
@@ -74,6 +88,7 @@ class BluetoothApiTest : public ExtensionApiTest {
protected:
testing::StrictMock<MockBluetoothAdapter>* mock_adapter_;
+ scoped_ptr<testing::NiceMock<MockBluetoothDiscoverySession> > mock_session_;
scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device1_;
scoped_ptr<testing::NiceMock<MockBluetoothDevice> > device2_;
scoped_ptr<testing::NiceMock<MockBluetoothProfile> > profile1_;
@@ -129,18 +144,11 @@ static bool CallClosure(const base::Closure& callback) {
return true;
}
-static void CallDiscoveryCallback(
- const base::Closure& callback,
- const BluetoothAdapter::ErrorCallback& error_callback) {
+static void StopDiscoverySessionCallback(const base::Closure& callback,
+ const base::Closure& error_callback) {
callback.Run();
}
-static void CallDiscoveryErrorCallback(
- const base::Closure& callback,
- const BluetoothAdapter::ErrorCallback& error_callback) {
- error_callback.Run();
-}
-
static void CallOutOfBandPairingDataCallback(
const BluetoothAdapter::BluetoothOutOfBandPairingDataCallback& callback,
const BluetoothAdapter::ErrorCallback& error_callback) {
@@ -316,9 +324,12 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, SetOutOfBandPairingData) {
}
IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) {
- // Try with a failure to start
- EXPECT_CALL(*mock_adapter_, StartDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryErrorCallback));
+ // Try with a failure to start. This will return an error as we haven't
+ // initialied a session object.
+ EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_))
+ .WillOnce(
+ testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback));
+
// StartDiscovery failure will remove the adapter that is no longer used.
EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_));
scoped_refptr<api::BluetoothStartDiscoveryFunction> start_function;
@@ -327,19 +338,28 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) {
utils::RunFunctionAndReturnError(start_function.get(), "[]", browser()));
ASSERT_FALSE(error.empty());
- // Reset for a successful start
+ // Reset the adapter and initiate a discovery session. The ownership of the
+ // mock session will be passed to the event router.
+ ASSERT_FALSE(mock_session_.get());
SetUpMockAdapter();
- EXPECT_CALL(*mock_adapter_, StartDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryCallback));
+ // Create a mock session to be returned as a result. Get a handle to it as
+ // its ownership will be passed and |mock_session_| will be reset.
+ mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>());
+ MockBluetoothDiscoverySession* session = mock_session_.get();
+ EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_))
+ .WillOnce(
+ testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback));
start_function = setupFunction(new api::BluetoothStartDiscoveryFunction);
(void)
utils::RunFunctionAndReturnError(start_function.get(), "[]", browser());
- // Reset to try stopping
+ // End the discovery session. The StopDiscovery function should succeed.
testing::Mock::VerifyAndClearExpectations(mock_adapter_);
- EXPECT_CALL(*mock_adapter_, StopDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryCallback));
+ EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true));
+ EXPECT_CALL(*session, Stop(testing::_, testing::_))
+ .WillOnce(testing::Invoke(StopDiscoverySessionCallback));
+
// StopDiscovery success will remove the adapter that is no longer used.
EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_));
scoped_refptr<api::BluetoothStopDiscoveryFunction> stop_function;
@@ -347,10 +367,10 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) {
(void) utils::RunFunctionAndReturnSingleResult(
stop_function.get(), "[]", browser());
- // Reset to try stopping with an error
+ // Reset the adapter. Simulate failure for stop discovery. The event router
+ // still owns the session. Make it appear inactive.
SetUpMockAdapter();
- EXPECT_CALL(*mock_adapter_, StopDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryErrorCallback));
+ EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(false));
EXPECT_CALL(*mock_adapter_, RemoveObserver(testing::_));
stop_function = setupFunction(new api::BluetoothStopDiscoveryFunction);
error =
@@ -360,10 +380,14 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, Discovery) {
}
IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryCallback) {
- EXPECT_CALL(*mock_adapter_, StartDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryCallback));
- EXPECT_CALL(*mock_adapter_, StopDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryCallback));
+ mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>());
+ MockBluetoothDiscoverySession* session = mock_session_.get();
+ EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_))
+ .WillOnce(
+ testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback));
+ EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true));
+ EXPECT_CALL(*session, Stop(testing::_, testing::_))
+ .WillOnce(testing::Invoke(StopDiscoverySessionCallback));
ResultCatcher catcher;
catcher.RestrictToProfile(browser()->profile());
@@ -408,17 +432,22 @@ IN_PROC_BROWSER_TEST_F(BluetoothApiTest, DiscoveryInProgress) {
ResultCatcher catcher;
catcher.RestrictToProfile(browser()->profile());
- EXPECT_CALL(*mock_adapter_, StartDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryCallback));
- EXPECT_CALL(*mock_adapter_, StopDiscovering(testing::_, testing::_))
- .WillOnce(testing::Invoke(CallDiscoveryCallback));
+ mock_session_.reset(new testing::NiceMock<MockBluetoothDiscoverySession>());
+ MockBluetoothDiscoverySession* session = mock_session_.get();
+ EXPECT_CALL(*mock_adapter_, StartDiscoverySession(testing::_, testing::_))
+ .WillOnce(
+ testing::Invoke(this, &BluetoothApiTest::DiscoverySessionCallback));
+ EXPECT_CALL(*session, IsActive()).WillOnce(testing::Return(true));
+ EXPECT_CALL(*session, Stop(testing::_, testing::_))
+ .WillOnce(testing::Invoke(StopDiscoverySessionCallback));
ExtensionTestMessageListener discovery_started("ready", true);
ASSERT_TRUE(LoadExtension(
test_data_dir_.AppendASCII("bluetooth/discovery_in_progress")));
EXPECT_TRUE(discovery_started.WaitUntilSatisfied());
- // This should be received in addition to the cached device above.
+ // Only this should be received. No additional notification should be sent for
+ // devices discovered before the discovery session started.
event_router()->DeviceAdded(mock_adapter_, device2_.get());
discovery_started.Reply("go");

Powered by Google App Engine
This is Rietveld 408576698