| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "content/browser/bluetooth/bluetooth_blacklist.h" | 5 #include "content/browser/bluetooth/bluetooth_blacklist.h" |
| 6 | 6 |
| 7 #include "content/common/bluetooth/bluetooth_scan_filter.h" | |
| 8 #include "device/bluetooth/bluetooth_uuid.h" | 7 #include "device/bluetooth/bluetooth_uuid.h" |
| 9 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 10 | 9 |
| 11 using device::BluetoothUUID; | 10 using device::BluetoothUUID; |
| 12 | 11 |
| 13 namespace content { | 12 namespace content { |
| 14 | 13 |
| 14 namespace { |
| 15 |
| 16 std::string Canonicalize(const std::string& string) { |
| 17 return device::BluetoothUUID(string).canonical_value(); |
| 18 } |
| 19 |
| 20 } // namespace |
| 21 |
| 15 class BluetoothBlacklistTest : public ::testing::Test { | 22 class BluetoothBlacklistTest : public ::testing::Test { |
| 16 public: | 23 public: |
| 17 BluetoothBlacklistTest() : list_(BluetoothBlacklist::Get()) { | 24 BluetoothBlacklistTest() : list_(BluetoothBlacklist::Get()) { |
| 18 // Because BluetoothBlacklist is used via a singleton instance, the data | 25 // Because BluetoothBlacklist is used via a singleton instance, the data |
| 19 // must be reset for each test. | 26 // must be reset for each test. |
| 20 list_.ResetToDefaultValuesForTest(); | 27 list_.ResetToDefaultValuesForTest(); |
| 21 } | 28 } |
| 22 BluetoothBlacklist& list_; | 29 BluetoothBlacklist& list_; |
| 23 }; | 30 }; |
| 24 | 31 |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 list_.Add("\r\n0009:e\n\r"); | 218 list_.Add("\r\n0009:e\n\r"); |
| 212 EXPECT_EQ(++previous_list_size, list_.size()); | 219 EXPECT_EQ(++previous_list_size, list_.size()); |
| 213 EXPECT_TRUE(list_.IsExcluded(BluetoothUUID("0009"))); | 220 EXPECT_TRUE(list_.IsExcluded(BluetoothUUID("0009"))); |
| 214 } | 221 } |
| 215 | 222 |
| 216 TEST_F(BluetoothBlacklistTest, IsExcluded_BluetoothScanFilter_ReturnsFalse) { | 223 TEST_F(BluetoothBlacklistTest, IsExcluded_BluetoothScanFilter_ReturnsFalse) { |
| 217 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); | 224 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); |
| 218 list_.Add(BluetoothUUID("ee01"), BluetoothBlacklist::Value::EXCLUDE_READS); | 225 list_.Add(BluetoothUUID("ee01"), BluetoothBlacklist::Value::EXCLUDE_READS); |
| 219 list_.Add(BluetoothUUID("ee02"), BluetoothBlacklist::Value::EXCLUDE_WRITES); | 226 list_.Add(BluetoothUUID("ee02"), BluetoothBlacklist::Value::EXCLUDE_WRITES); |
| 220 { | 227 { |
| 221 std::vector<BluetoothScanFilter> empty_filters; | 228 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> empty_filters; |
| 222 EXPECT_FALSE(list_.IsExcluded(empty_filters)); | 229 EXPECT_FALSE(list_.IsExcluded(empty_filters)); |
| 223 } | 230 } |
| 224 { | 231 { |
| 225 std::vector<BluetoothScanFilter> single_empty_filter(1); | 232 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> single_empty_filter(1); |
| 226 EXPECT_EQ(0u, single_empty_filter[0].services.size()); | 233 |
| 234 single_empty_filter[0] = blink::mojom::WebBluetoothScanFilter::New(); |
| 235 single_empty_filter[0]->services = mojo::Array<mojo::String>(); |
| 236 |
| 237 EXPECT_EQ(0u, single_empty_filter[0]->services.size()); |
| 227 EXPECT_FALSE(list_.IsExcluded(single_empty_filter)); | 238 EXPECT_FALSE(list_.IsExcluded(single_empty_filter)); |
| 228 } | 239 } |
| 229 { | 240 { |
| 230 std::vector<BluetoothScanFilter> single_non_matching_filter(1); | 241 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> |
| 231 single_non_matching_filter[0].services.push_back(BluetoothUUID("0000")); | 242 single_non_matching_filter(1); |
| 243 |
| 244 single_non_matching_filter[0] = blink::mojom::WebBluetoothScanFilter::New(); |
| 245 single_non_matching_filter[0]->services.push_back(Canonicalize("0000")); |
| 246 |
| 232 EXPECT_FALSE(list_.IsExcluded(single_non_matching_filter)); | 247 EXPECT_FALSE(list_.IsExcluded(single_non_matching_filter)); |
| 233 } | 248 } |
| 234 { | 249 { |
| 235 std::vector<BluetoothScanFilter> multiple_non_matching_filter(2); | 250 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> |
| 236 multiple_non_matching_filter[0].services.push_back(BluetoothUUID("0000")); | 251 multiple_non_matching_filters(2); |
| 237 multiple_non_matching_filter[0].services.push_back(BluetoothUUID("ee01")); | 252 |
| 238 multiple_non_matching_filter[1].services.push_back(BluetoothUUID("ee02")); | 253 multiple_non_matching_filters[0] = |
| 239 multiple_non_matching_filter[1].services.push_back(BluetoothUUID("0003")); | 254 blink::mojom::WebBluetoothScanFilter::New(); |
| 240 EXPECT_FALSE(list_.IsExcluded(multiple_non_matching_filter)); | 255 multiple_non_matching_filters[0]->services.push_back(Canonicalize("0000")); |
| 256 multiple_non_matching_filters[0]->services.push_back(Canonicalize("ee01")); |
| 257 |
| 258 multiple_non_matching_filters[1] = |
| 259 blink::mojom::WebBluetoothScanFilter::New(); |
| 260 multiple_non_matching_filters[1]->services.push_back(Canonicalize("ee02")); |
| 261 multiple_non_matching_filters[1]->services.push_back(Canonicalize("0003")); |
| 262 |
| 263 EXPECT_FALSE(list_.IsExcluded(multiple_non_matching_filters)); |
| 241 } | 264 } |
| 242 } | 265 } |
| 243 | 266 |
| 244 TEST_F(BluetoothBlacklistTest, IsExcluded_BluetoothScanFilter_ReturnsTrue) { | 267 TEST_F(BluetoothBlacklistTest, IsExcluded_BluetoothScanFilter_ReturnsTrue) { |
| 245 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); | 268 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); |
| 246 { | 269 { |
| 247 std::vector<BluetoothScanFilter> single_matching_filter(1); | 270 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> single_matching_filter( |
| 248 single_matching_filter[0].services.push_back(BluetoothUUID("eeee")); | 271 1); |
| 272 |
| 273 single_matching_filter[0] = blink::mojom::WebBluetoothScanFilter::New(); |
| 274 single_matching_filter[0]->services.push_back(Canonicalize("eeee")); |
| 275 |
| 249 EXPECT_TRUE(list_.IsExcluded(single_matching_filter)); | 276 EXPECT_TRUE(list_.IsExcluded(single_matching_filter)); |
| 250 } | 277 } |
| 251 { | 278 { |
| 252 std::vector<BluetoothScanFilter> first_matching_filter(2); | 279 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> first_matching_filter( |
| 253 first_matching_filter[0].services.push_back(BluetoothUUID("eeee")); | 280 2); |
| 254 first_matching_filter[0].services.push_back(BluetoothUUID("0001")); | 281 |
| 255 first_matching_filter[1].services.push_back(BluetoothUUID("0002")); | 282 first_matching_filter[0] = blink::mojom::WebBluetoothScanFilter::New(); |
| 256 first_matching_filter[1].services.push_back(BluetoothUUID("0003")); | 283 first_matching_filter[0]->services.push_back(Canonicalize("eeee")); |
| 284 first_matching_filter[0]->services.push_back(Canonicalize("0001")); |
| 285 |
| 286 first_matching_filter[1] = blink::mojom::WebBluetoothScanFilter::New(); |
| 287 first_matching_filter[1]->services.push_back(Canonicalize("0002")); |
| 288 first_matching_filter[1]->services.push_back(Canonicalize("0003")); |
| 289 |
| 257 EXPECT_TRUE(list_.IsExcluded(first_matching_filter)); | 290 EXPECT_TRUE(list_.IsExcluded(first_matching_filter)); |
| 258 } | 291 } |
| 259 { | 292 { |
| 260 std::vector<BluetoothScanFilter> last_matching_filter(2); | 293 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> last_matching_filter( |
| 261 last_matching_filter[0].services.push_back(BluetoothUUID("0001")); | 294 2); |
| 262 last_matching_filter[0].services.push_back(BluetoothUUID("0001")); | 295 |
| 263 last_matching_filter[1].services.push_back(BluetoothUUID("0002")); | 296 last_matching_filter[0] = blink::mojom::WebBluetoothScanFilter::New(); |
| 264 last_matching_filter[1].services.push_back(BluetoothUUID("eeee")); | 297 last_matching_filter[0]->services.push_back(Canonicalize("0001")); |
| 298 last_matching_filter[0]->services.push_back(Canonicalize("0001")); |
| 299 |
| 300 last_matching_filter[1] = blink::mojom::WebBluetoothScanFilter::New(); |
| 301 last_matching_filter[1]->services.push_back(Canonicalize("0002")); |
| 302 last_matching_filter[1]->services.push_back(Canonicalize("eeee")); |
| 303 |
| 265 EXPECT_TRUE(list_.IsExcluded(last_matching_filter)); | 304 EXPECT_TRUE(list_.IsExcluded(last_matching_filter)); |
| 266 } | 305 } |
| 267 { | 306 { |
| 268 std::vector<BluetoothScanFilter> multiple_matching_filter(2); | 307 mojo::Array<blink::mojom::WebBluetoothScanFilterPtr> |
| 269 multiple_matching_filter[0].services.push_back(BluetoothUUID("eeee")); | 308 multiple_matching_filters(2); |
| 270 multiple_matching_filter[0].services.push_back(BluetoothUUID("eeee")); | 309 |
| 271 multiple_matching_filter[1].services.push_back(BluetoothUUID("eeee")); | 310 multiple_matching_filters[0] = blink::mojom::WebBluetoothScanFilter::New(); |
| 272 multiple_matching_filter[1].services.push_back(BluetoothUUID("eeee")); | 311 multiple_matching_filters[0]->services.push_back(Canonicalize("eeee")); |
| 273 EXPECT_TRUE(list_.IsExcluded(multiple_matching_filter)); | 312 multiple_matching_filters[0]->services.push_back(Canonicalize("eeee")); |
| 313 |
| 314 multiple_matching_filters[1] = blink::mojom::WebBluetoothScanFilter::New(); |
| 315 multiple_matching_filters[1]->services.push_back(Canonicalize("eeee")); |
| 316 multiple_matching_filters[1]->services.push_back(Canonicalize("eeee")); |
| 317 |
| 318 EXPECT_TRUE(list_.IsExcluded(multiple_matching_filters)); |
| 274 } | 319 } |
| 275 } | 320 } |
| 276 | 321 |
| 277 TEST_F(BluetoothBlacklistTest, RemoveExcludedUuids_NonMatching) { | 322 TEST_F(BluetoothBlacklistTest, RemoveExcludedUUIDs_NonMatching) { |
| 278 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); | 323 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); |
| 279 list_.Add(BluetoothUUID("ee01"), BluetoothBlacklist::Value::EXCLUDE_READS); | 324 list_.Add(BluetoothUUID("ee01"), BluetoothBlacklist::Value::EXCLUDE_READS); |
| 280 list_.Add(BluetoothUUID("ee02"), BluetoothBlacklist::Value::EXCLUDE_WRITES); | 325 list_.Add(BluetoothUUID("ee02"), BluetoothBlacklist::Value::EXCLUDE_WRITES); |
| 326 |
| 327 // options.optional_services should be the same before and after |
| 328 // RemoveExcludedUUIDs(). |
| 281 { | 329 { |
| 282 std::vector<BluetoothUUID> empty; | 330 // Empty optional_services. |
| 283 std::vector<BluetoothUUID> expected_empty; | 331 blink::mojom::WebBluetoothRequestDeviceOptions options; |
| 284 list_.RemoveExcludedUuids(&empty); | 332 options.optional_services = mojo::Array<mojo::String>(); |
| 285 EXPECT_EQ(expected_empty, empty); | 333 |
| 334 mojo::Array<mojo::String> expected = options.optional_services.Clone(); |
| 335 |
| 336 list_.RemoveExcludedUUIDs(&options); |
| 337 EXPECT_TRUE(options.optional_services.Equals(expected)); |
| 286 } | 338 } |
| 287 { | 339 { |
| 288 std::vector<BluetoothUUID> single_non_matching; | 340 // One non-matching service in optional_services. |
| 289 single_non_matching.push_back(BluetoothUUID("0000")); | 341 blink::mojom::WebBluetoothRequestDeviceOptions options; |
| 342 options.optional_services.push_back(Canonicalize("0000")); |
| 290 | 343 |
| 291 std::vector<BluetoothUUID> expected_copy(single_non_matching); | 344 mojo::Array<mojo::String> expected = options.optional_services.Clone(); |
| 292 | 345 |
| 293 list_.RemoveExcludedUuids(&single_non_matching); | 346 list_.RemoveExcludedUUIDs(&options); |
| 294 EXPECT_EQ(expected_copy, single_non_matching); | 347 EXPECT_TRUE(options.optional_services.Equals(expected)); |
| 295 } | 348 } |
| 296 { | 349 { |
| 297 std::vector<BluetoothUUID> multiple_non_matching; | 350 // Multiple non-matching services in optional_services. |
| 298 multiple_non_matching.push_back(BluetoothUUID("0000")); | 351 blink::mojom::WebBluetoothRequestDeviceOptions options; |
| 299 multiple_non_matching.push_back(BluetoothUUID("ee01")); | 352 options.optional_services.push_back(Canonicalize("0000")); |
| 300 multiple_non_matching.push_back(BluetoothUUID("ee02")); | 353 options.optional_services.push_back(Canonicalize("ee01")); |
| 301 multiple_non_matching.push_back(BluetoothUUID("0003")); | 354 options.optional_services.push_back(Canonicalize("ee02")); |
| 355 options.optional_services.push_back(Canonicalize("0003")); |
| 302 | 356 |
| 303 std::vector<BluetoothUUID> expected_copy(multiple_non_matching); | 357 mojo::Array<mojo::String> expected = options.optional_services.Clone(); |
| 304 | 358 |
| 305 list_.RemoveExcludedUuids(&multiple_non_matching); | 359 list_.RemoveExcludedUUIDs(&options); |
| 306 EXPECT_EQ(expected_copy, multiple_non_matching); | 360 EXPECT_TRUE(options.optional_services.Equals(expected)); |
| 307 } | 361 } |
| 308 } | 362 } |
| 309 | 363 |
| 310 TEST_F(BluetoothBlacklistTest, RemoveExcludedUuids_Matching) { | 364 TEST_F(BluetoothBlacklistTest, RemoveExcludedUuids_Matching) { |
| 311 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); | 365 list_.Add(BluetoothUUID("eeee"), BluetoothBlacklist::Value::EXCLUDE); |
| 312 list_.Add(BluetoothUUID("eee2"), BluetoothBlacklist::Value::EXCLUDE); | 366 list_.Add(BluetoothUUID("eee2"), BluetoothBlacklist::Value::EXCLUDE); |
| 313 list_.Add(BluetoothUUID("eee3"), BluetoothBlacklist::Value::EXCLUDE); | 367 list_.Add(BluetoothUUID("eee3"), BluetoothBlacklist::Value::EXCLUDE); |
| 314 list_.Add(BluetoothUUID("eee4"), BluetoothBlacklist::Value::EXCLUDE); | 368 list_.Add(BluetoothUUID("eee4"), BluetoothBlacklist::Value::EXCLUDE); |
| 315 { | 369 { |
| 316 std::vector<BluetoothUUID> single_matching; | 370 // Single matching service in optional_services. |
| 317 single_matching.push_back(BluetoothUUID("eeee")); | 371 blink::mojom::WebBluetoothRequestDeviceOptions options; |
| 372 options.optional_services.push_back(Canonicalize("eeee")); |
| 318 | 373 |
| 319 std::vector<BluetoothUUID> expected_empty; | 374 mojo::Array<mojo::String> expected = mojo::Array<mojo::String>(); |
| 320 | 375 |
| 321 list_.RemoveExcludedUuids(&single_matching); | 376 list_.RemoveExcludedUUIDs(&options); |
| 322 EXPECT_EQ(expected_empty, single_matching); | 377 |
| 378 EXPECT_TRUE(options.optional_services.Equals(expected)); |
| 323 } | 379 } |
| 324 { | 380 { |
| 325 std::vector<BluetoothUUID> single_matching_of_many; | 381 // Single matching of many services in optional_services. |
| 326 single_matching_of_many.push_back(BluetoothUUID("0000")); | 382 blink::mojom::WebBluetoothRequestDeviceOptions options; |
| 327 single_matching_of_many.push_back(BluetoothUUID("eeee")); | 383 options.optional_services.push_back(Canonicalize("0000")); |
| 328 single_matching_of_many.push_back(BluetoothUUID("0001")); | 384 options.optional_services.push_back(Canonicalize("eeee")); |
| 385 options.optional_services.push_back(Canonicalize("0001")); |
| 329 | 386 |
| 330 std::vector<BluetoothUUID> expected; | 387 mojo::Array<mojo::String> expected; |
| 331 expected.push_back(BluetoothUUID("0000")); | 388 expected.push_back(Canonicalize("0000")); |
| 332 expected.push_back(BluetoothUUID("0001")); | 389 expected.push_back(Canonicalize("0001")); |
| 333 | 390 |
| 334 list_.RemoveExcludedUuids(&single_matching_of_many); | 391 list_.RemoveExcludedUUIDs(&options); |
| 335 EXPECT_EQ(expected, single_matching_of_many); | 392 EXPECT_TRUE(options.optional_services.Equals(expected)); |
| 336 } | 393 } |
| 337 { | 394 { |
| 338 std::vector<BluetoothUUID> all_matching_of_many; | 395 // All matching of many services in optional_services. |
| 339 all_matching_of_many.push_back(BluetoothUUID("eee2")); | 396 blink::mojom::WebBluetoothRequestDeviceOptions options; |
| 340 all_matching_of_many.push_back(BluetoothUUID("eee4")); | 397 options.optional_services.push_back(Canonicalize("eee2")); |
| 341 all_matching_of_many.push_back(BluetoothUUID("eee3")); | 398 options.optional_services.push_back(Canonicalize("eee4")); |
| 342 all_matching_of_many.push_back(BluetoothUUID("eeee")); | 399 options.optional_services.push_back(Canonicalize("eee3")); |
| 400 options.optional_services.push_back(Canonicalize("eeee")); |
| 343 | 401 |
| 344 std::vector<BluetoothUUID> expected_empty; | 402 mojo::Array<mojo::String> expected = mojo::Array<mojo::String>(); |
| 345 | 403 |
| 346 list_.RemoveExcludedUuids(&all_matching_of_many); | 404 list_.RemoveExcludedUUIDs(&options); |
| 347 EXPECT_EQ(expected_empty, all_matching_of_many); | 405 EXPECT_TRUE(options.optional_services.Equals(expected)); |
| 348 } | 406 } |
| 349 } | 407 } |
| 350 | 408 |
| 351 TEST_F(BluetoothBlacklistTest, VerifyDefaultBlacklistSize) { | 409 TEST_F(BluetoothBlacklistTest, VerifyDefaultBlacklistSize) { |
| 352 // When adding items to the blacklist the new values should be added in the | 410 // When adding items to the blacklist the new values should be added in the |
| 353 // tests below for each exclusion type. | 411 // tests below for each exclusion type. |
| 354 EXPECT_EQ(11u, list_.size()); | 412 EXPECT_EQ(11u, list_.size()); |
| 355 } | 413 } |
| 356 | 414 |
| 357 TEST_F(BluetoothBlacklistTest, VerifyDefaultExcludeList) { | 415 TEST_F(BluetoothBlacklistTest, VerifyDefaultExcludeList) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2a02"))); | 447 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2a02"))); |
| 390 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2a03"))); | 448 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2a03"))); |
| 391 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2a25"))); | 449 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2a25"))); |
| 392 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2902"))); | 450 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2902"))); |
| 393 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2903"))); | 451 EXPECT_TRUE(list_.IsExcludedFromWrites(BluetoothUUID("2903"))); |
| 394 EXPECT_TRUE(list_.IsExcludedFromWrites( | 452 EXPECT_TRUE(list_.IsExcludedFromWrites( |
| 395 BluetoothUUID("bad2ddcf-60db-45cd-bef9-fd72b153cf7c"))); | 453 BluetoothUUID("bad2ddcf-60db-45cd-bef9-fd72b153cf7c"))); |
| 396 } | 454 } |
| 397 | 455 |
| 398 } // namespace content | 456 } // namespace content |
| OLD | NEW |