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

Side by Side Diff: content/browser/bluetooth/bluetooth_allowed_devices_map.cc

Issue 1527853002: bluetooth: Add disconnect function (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth-device-identifier
Patch Set: Address jyasskin's comments Created 4 years, 11 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_allowed_devices_map.h" 5 #include "content/browser/bluetooth/bluetooth_allowed_devices_map.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/base64.h" 9 #include "base/base64.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 return origin_to_device_address_to_id_map_[origin][device_address]; 60 return origin_to_device_address_to_id_map_[origin][device_address];
61 } 61 }
62 const std::string device_id = GenerateDeviceId(origin); 62 const std::string device_id = GenerateDeviceId(origin);
63 VLOG(1) << "Id generated for device: " << device_id; 63 VLOG(1) << "Id generated for device: " << device_id;
64 64
65 origin_to_device_address_to_id_map_[origin][device_address] = device_id; 65 origin_to_device_address_to_id_map_[origin][device_address] = device_id;
66 origin_to_device_id_to_address_map_[origin][device_id] = device_address; 66 origin_to_device_id_to_address_map_[origin][device_id] = device_address;
67 origin_to_device_id_to_services_map_[origin][device_id] = 67 origin_to_device_id_to_services_map_[origin][device_id] =
68 UnionOfServices(filters, optional_services); 68 UnionOfServices(filters, optional_services);
69 69
70 CHECK(device_id_set_.insert(device_id).second);
71
70 return origin_to_device_address_to_id_map_[origin][device_address]; 72 return origin_to_device_address_to_id_map_[origin][device_address];
71 } 73 }
72 74
73 void BluetoothAllowedDevicesMap::RemoveDevice( 75 void BluetoothAllowedDevicesMap::RemoveDevice(
74 const url::Origin& origin, 76 const url::Origin& origin,
75 const std::string& device_address) { 77 const std::string& device_address) {
76 const std::string device_id = GetDeviceId(origin, device_address); 78 const std::string device_id = GetDeviceId(origin, device_address);
77 DCHECK(!device_id.empty()); 79 DCHECK(!device_id.empty());
78 80
79 // 1. Remove from all three maps. 81 // 1. Remove from all three maps.
80 CHECK(origin_to_device_address_to_id_map_[origin].erase(device_address)); 82 CHECK(origin_to_device_address_to_id_map_[origin].erase(device_address));
81 CHECK(origin_to_device_id_to_address_map_[origin].erase(device_id)); 83 CHECK(origin_to_device_id_to_address_map_[origin].erase(device_id));
82 CHECK(origin_to_device_id_to_services_map_[origin].erase(device_id)); 84 CHECK(origin_to_device_id_to_services_map_[origin].erase(device_id));
83 85
84 // 2. Remove empty map for origin. 86 // 2. Remove empty map for origin.
85 if (origin_to_device_address_to_id_map_[origin].empty()) { 87 if (origin_to_device_address_to_id_map_[origin].empty()) {
86 CHECK(origin_to_device_address_to_id_map_.erase(origin)); 88 CHECK(origin_to_device_address_to_id_map_.erase(origin));
87 CHECK(origin_to_device_id_to_address_map_.erase(origin)); 89 CHECK(origin_to_device_id_to_address_map_.erase(origin));
88 CHECK(origin_to_device_id_to_services_map_.erase(origin)); 90 CHECK(origin_to_device_id_to_services_map_.erase(origin));
89 } 91 }
92
93 // 3. Remove from set of ids.
94 CHECK(device_id_set_.erase(device_id));
90 } 95 }
91 96
92 const std::string& BluetoothAllowedDevicesMap::GetDeviceId( 97 const std::string& BluetoothAllowedDevicesMap::GetDeviceId(
93 const url::Origin& origin, 98 const url::Origin& origin,
94 const std::string& device_address) { 99 const std::string& device_address) {
95 auto address_map_iter = origin_to_device_address_to_id_map_.find(origin); 100 auto address_map_iter = origin_to_device_address_to_id_map_.find(origin);
96 if (address_map_iter == origin_to_device_address_to_id_map_.end()) { 101 if (address_map_iter == origin_to_device_address_to_id_map_.end()) {
97 return base::EmptyString(); 102 return base::EmptyString();
98 } 103 }
99 104
(...skipping 16 matching lines...) Expand all
116 121
117 const auto& device_id_to_address_map = id_map_iter->second; 122 const auto& device_id_to_address_map = id_map_iter->second;
118 123
119 auto id_iter = device_id_to_address_map.find(device_id); 124 auto id_iter = device_id_to_address_map.find(device_id);
120 125
121 return id_iter == device_id_to_address_map.end() ? base::EmptyString() 126 return id_iter == device_id_to_address_map.end() ? base::EmptyString()
122 : id_iter->second; 127 : id_iter->second;
123 } 128 }
124 129
125 std::string BluetoothAllowedDevicesMap::GenerateDeviceId( 130 std::string BluetoothAllowedDevicesMap::GenerateDeviceId(
126 const url::Origin& origin) { 131 const url::Origin& origin) {
Jeffrey Yasskin 2016/01/15 01:12:19 Now that you're not using it, remove |origin| from
ortuno 2016/01/15 01:33:14 Done.
127 std::string device_id = GetBase64Id(); 132 std::string device_id = GetBase64Id();
128 auto id_map_iter = origin_to_device_id_to_address_map_.find(origin); 133 while (ContainsKey(device_id_set_, device_id)) {
129 if (id_map_iter == origin_to_device_id_to_address_map_.end()) {
130 return device_id;
131 }
132 while (ContainsKey(id_map_iter->second, device_id)) {
133 LOG(WARNING) << "Generated repeated id."; 134 LOG(WARNING) << "Generated repeated id.";
134 device_id = GetBase64Id(); 135 device_id = GetBase64Id();
135 } 136 }
136 return device_id; 137 return device_id;
137 } 138 }
138 139
139 std::set<std::string> BluetoothAllowedDevicesMap::UnionOfServices( 140 std::set<std::string> BluetoothAllowedDevicesMap::UnionOfServices(
140 const std::vector<BluetoothScanFilter>& filters, 141 const std::vector<BluetoothScanFilter>& filters,
141 const std::vector<BluetoothUUID>& optional_services) { 142 const std::vector<BluetoothUUID>& optional_services) {
142 std::set<std::string> unionOfServices; 143 std::set<std::string> unionOfServices;
143 for (const auto& filter : filters) { 144 for (const auto& filter : filters) {
144 for (const BluetoothUUID& uuid : filter.services) { 145 for (const BluetoothUUID& uuid : filter.services) {
145 unionOfServices.insert(uuid.canonical_value()); 146 unionOfServices.insert(uuid.canonical_value());
146 } 147 }
147 } 148 }
148 for (const BluetoothUUID& uuid : optional_services) { 149 for (const BluetoothUUID& uuid : optional_services) {
149 unionOfServices.insert(uuid.canonical_value()); 150 unionOfServices.insert(uuid.canonical_value());
150 } 151 }
151 return unionOfServices; 152 return unionOfServices;
152 } 153 }
153 154
154 } // namespace content 155 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698