Commit 84869d69 authored by reillyg's avatar reillyg Committed by Commit bot

Read WebUSB landing page even if allowed origin read fails

Now that support for the GET_ALLOWED_ORIGINS request is optional WebUSB
devices may only support the GET_URL request used for reading the
landing page from the device. This patch fixes the descriptor reading
logic so that this is supported.

(Note, the logic to send the GET_ALLOWED_ORIGINS request will be removed
entirely as part of issue 711443.)

BUG=721546

Review-Url: https://codereview.chromium.org/2876463008
Cr-Commit-Position: refs/heads/master@{#471141}
parent 19776ea6
......@@ -157,24 +157,26 @@ void OnDoneReadingUrls(std::unique_ptr<WebUsbAllowedOrigins> allowed_origins,
uint8_t landing_page_id,
std::unique_ptr<std::map<uint8_t, GURL>> url_map,
const ReadWebUsbDescriptorsCallback& callback) {
for (uint8_t origin_id : allowed_origins->origin_ids) {
const auto& it = url_map->find(origin_id);
if (it != url_map->end())
allowed_origins->origins.push_back(it->second.GetOrigin());
}
for (auto& configuration : allowed_origins->configurations) {
for (uint8_t origin_id : configuration.origin_ids) {
if (allowed_origins) {
for (uint8_t origin_id : allowed_origins->origin_ids) {
const auto& it = url_map->find(origin_id);
if (it != url_map->end())
configuration.origins.push_back(it->second.GetOrigin());
allowed_origins->origins.push_back(it->second.GetOrigin());
}
for (auto& function : configuration.functions) {
for (uint8_t origin_id : function.origin_ids) {
for (auto& configuration : allowed_origins->configurations) {
for (uint8_t origin_id : configuration.origin_ids) {
const auto& it = url_map->find(origin_id);
if (it != url_map->end())
function.origins.push_back(it->second.GetOrigin());
configuration.origins.push_back(it->second.GetOrigin());
}
for (auto& function : configuration.functions) {
for (uint8_t origin_id : function.origin_ids) {
const auto& it = url_map->find(origin_id);
if (it != url_map->end())
function.origins.push_back(it->second.GetOrigin());
}
}
}
}
......@@ -223,27 +225,25 @@ void ReadUrlDescriptor(scoped_refptr<UsbDeviceHandle> device_handle,
}
// Reads URL descriptors from the device so that it can fill |allowed_origins|
// with the GURLs matching the indicies already collected.
// with the GURLs matching the indices already collected.
void ReadUrlDescriptors(scoped_refptr<UsbDeviceHandle> device_handle,
uint8_t vendor_code,
uint8_t landing_page_id,
const ReadWebUsbDescriptorsCallback& callback,
std::unique_ptr<WebUsbAllowedOrigins> allowed_origins) {
if (!allowed_origins) {
callback.Run(nullptr, GURL());
return;
}
std::set<uint8_t> to_request;
if (landing_page_id != 0)
to_request.insert(landing_page_id);
to_request.insert(allowed_origins->origin_ids.begin(),
allowed_origins->origin_ids.end());
for (auto& config : allowed_origins->configurations) {
to_request.insert(config.origin_ids.begin(), config.origin_ids.end());
for (auto& function : config.functions) {
to_request.insert(function.origin_ids.begin(), function.origin_ids.end());
if (allowed_origins) {
to_request.insert(allowed_origins->origin_ids.begin(),
allowed_origins->origin_ids.end());
for (auto& config : allowed_origins->configurations) {
to_request.insert(config.origin_ids.begin(), config.origin_ids.end());
for (auto& function : config.functions) {
to_request.insert(function.origin_ids.begin(),
function.origin_ids.end());
}
}
}
......@@ -255,9 +255,8 @@ void ReadUrlDescriptors(scoped_refptr<UsbDeviceHandle> device_handle,
base::Bind(&OnDoneReadingUrls, base::Passed(&allowed_origins),
landing_page_id, base::Passed(&url_map), callback));
for (uint8_t index : to_request) {
for (uint8_t index : to_request)
ReadUrlDescriptor(device_handle, vendor_code, url_map_ptr, index, barrier);
}
}
void OnReadWebUsbAllowedOrigins(
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment