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

Unified Diff: chrome/browser/usb/usb_blocklist.h

Issue 2581543002: Add infrastructure for a USB device blocklist. (Closed)
Patch Set: Fix typo. Created 4 years 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
« no previous file with comments | « chrome/browser/BUILD.gn ('k') | chrome/browser/usb/usb_blocklist.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/usb/usb_blocklist.h
diff --git a/chrome/browser/usb/usb_blocklist.h b/chrome/browser/usb/usb_blocklist.h
new file mode 100644
index 0000000000000000000000000000000000000000..4a444f95a20f0a3ee1966692e40a51ab7a5a43e2
--- /dev/null
+++ b/chrome/browser/usb/usb_blocklist.h
@@ -0,0 +1,85 @@
+// Copyright 2016 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.
+
+#ifndef CHROME_BROWSER_USB_USB_BLOCKLIST_H_
+#define CHROME_BROWSER_USB_USB_BLOCKLIST_H_
+
+#include <stdint.h>
+
+#include <set>
+
+#include "base/lazy_instance.h"
+#include "base/macros.h"
+#include "base/memory/ref_counted.h"
+#include "base/strings/string_piece.h"
+
+namespace device {
+class UsbDevice;
+}
+
+class UsbBlocklist final {
+ public:
+ // An entry in the blocklist. Represents a specific version of a device that
+ // should not be accessible. These fields correspond to the idVendor,
+ // idProduct and bcdDevice fields of the device's USB device descriptor.
+ struct Entry {
+ Entry(uint16_t vendor_id, uint16_t product_id, uint16_t version);
+
+ uint16_t vendor_id;
+ uint16_t product_id;
+ uint16_t version;
+ };
+
+ ~UsbBlocklist();
+
+ // Returns a singleton instance of the blocklist.
+ static UsbBlocklist& Get();
+
+ // Adds a device to the blocklist to be excluded from access.
+ void Exclude(const Entry&);
+
+ // Adds a device to the blocklist by parsing a blocklist string and calling
+ // Exclude(entry).
+ //
+ // The blocklist string must be a comma-separated list of
+ // idVendor:idProduct:bcdDevice triples, where each member of the triple is a
+ // 16-bit integer written as exactly 4 hexadecimal digits. The triples may
+ // be separated by whitespace. Triple components are colon-separated and must
+ // not have whitespace around the colon.
+ //
+ // Invalid entries in the comma-separated list will be ignored.
+ //
+ // Example:
+ // "1000:001C:0100, 1000:001D:0101, 123:ignored:0"
+ void Exclude(base::StringPiece blocklist_string);
+
+ // Returns if a device is excluded from access.
+ bool IsExcluded(const Entry&);
+ bool IsExcluded(scoped_refptr<const device::UsbDevice>);
+
+ // Size of the blocklist.
+ size_t size() { return blocklisted_devices_.size(); }
+
+ // Reload the blocklist for testing purposes.
+ void ResetToDefaultValuesForTest();
+
+ private:
+ // friend LazyInstance to permit access to private constructor.
+ friend base::DefaultLazyInstanceTraits<UsbBlocklist>;
+
+ UsbBlocklist();
+
+ void PopulateWithDefaultValues();
+
+ // Populates the blocklist with values obtained dynamically from a server,
+ // able to be updated without shipping new executable versions.
+ void PopulateWithServerProvidedValues();
+
+ // Set of blocklist entries.
+ std::set<Entry> blocklisted_devices_;
+
+ DISALLOW_COPY_AND_ASSIGN(UsbBlocklist);
+};
+
+#endif // CHROME_BROWSER_USB_USB_BLOCKLIST_H_
« no previous file with comments | « chrome/browser/BUILD.gn ('k') | chrome/browser/usb/usb_blocklist.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698