forked from chromium/chromium
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
BluetoothSocketCloseFunction: Fix accessing unpopulated params_.
CL d06a257 stopped using populating |params_| and started using local variables instead. However, one reference to |params_| still remained that is causing null pointer access. Fix this and also remove all bluetooth APIs' params_ where they are currently never used. Add a regression (unit) test as well, along with a small sanity test. Bug: 831651 Test: See bug for repro steps. Change-Id: Ic2df916bb7175563e21c816890bac1c8624d334f Reviewed-on: https://chromium-review.googlesource.com/1008065 Reviewed-by: James Hawkins <jhawkins@chromium.org> Commit-Queue: Istiaque Ahmed <lazyboy@chromium.org> Cr-Commit-Position: refs/heads/master@{#550019}
- Loading branch information
Istiaque Ahmed
authored and
Commit Bot
committed
Apr 12, 2018
1 parent
2296e05
commit a725a00
Showing
4 changed files
with
87 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
77 changes: 77 additions & 0 deletions
77
extensions/browser/api/bluetooth_socket/bluetooth_socket_api_unittest.cc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// Copyright 2018 The Chromium Authors. All rights reserved. | ||
// Use of this source code is governed by a BSD-style license that can be | ||
// found in the LICENSE file. | ||
|
||
#include "extensions/browser/api/bluetooth_socket/bluetooth_socket_api.h" | ||
|
||
#include <memory> | ||
|
||
#include "base/strings/stringprintf.h" | ||
#include "extensions/browser/api_test_utils.h" | ||
#include "extensions/browser/api_unittest.h" | ||
#include "extensions/common/extension_builder.h" | ||
#include "testing/gtest/include/gtest/gtest.h" | ||
|
||
namespace extensions { | ||
|
||
class BluetoothSocketApiUnittest : public ApiUnitTest { | ||
public: | ||
BluetoothSocketApiUnittest() = default; | ||
|
||
private: | ||
DISALLOW_COPY_AND_ASSIGN(BluetoothSocketApiUnittest); | ||
}; | ||
|
||
// Tests that bluetoothSocket.create fails as expected when extension does not | ||
// have permission. | ||
TEST_F(BluetoothSocketApiUnittest, Permission) { | ||
auto function = base::MakeRefCounted<api::BluetoothSocketCreateFunction>(); | ||
// Runs with an extension without bluetooth permission. | ||
EXPECT_EQ("Permission denied", | ||
RunFunctionAndReturnError(function.get(), "[]")); | ||
} | ||
|
||
// Tests bluetoothSocket.create() and bluetoothSocket.close(). | ||
// Regression test for https://crbug.com/831651. | ||
TEST_F(BluetoothSocketApiUnittest, CreateThenClose) { | ||
scoped_refptr<Extension> extension_with_socket_permitted = | ||
ExtensionBuilder() | ||
.SetManifest( | ||
DictionaryBuilder() | ||
.Set("name", "bluetooth app") | ||
.Set("version", "1.0") | ||
.Set("bluetooth", | ||
DictionaryBuilder().SetBoolean("socket", true).Build()) | ||
.Set("app", | ||
DictionaryBuilder() | ||
.Set("background", | ||
DictionaryBuilder() | ||
.Set("scripts", ListBuilder() | ||
.Append("background.js") | ||
.Build()) | ||
.Build()) | ||
.Build()) | ||
.Build()) | ||
.SetLocation(Manifest::COMPONENT) | ||
.Build(); | ||
|
||
ASSERT_TRUE(extension_with_socket_permitted); | ||
set_extension(extension_with_socket_permitted); | ||
|
||
auto create_function = | ||
base::MakeRefCounted<api::BluetoothSocketCreateFunction>(); | ||
std::unique_ptr<base::DictionaryValue> result = | ||
RunFunctionAndReturnDictionary(create_function.get(), "[]"); | ||
ASSERT_TRUE(result); | ||
|
||
api::bluetooth_socket::CreateInfo create_info; | ||
EXPECT_TRUE( | ||
api::bluetooth_socket::CreateInfo::Populate(*result, &create_info)); | ||
|
||
const int socket_id = create_info.socket_id; | ||
auto close_function = | ||
base::MakeRefCounted<api::BluetoothSocketCloseFunction>(); | ||
RunFunction(close_function.get(), base::StringPrintf("[%d]", socket_id)); | ||
} | ||
|
||
} // namespace extensions |