// Copyright 2015 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_CHOOSER_CONTEXT_H_ #define CHROME_BROWSER_USB_USB_CHOOSER_CONTEXT_H_ #include #include #include #include #include #include "base/macros.h" #include "base/scoped_observer.h" #include "chrome/browser/permissions/chooser_context_base.h" #include "device/usb/usb_service.h" namespace device { namespace usb { class DeviceInfo; } } class UsbChooserContext : public ChooserContextBase, public device::UsbService::Observer { public: explicit UsbChooserContext(Profile* profile); ~UsbChooserContext() override; // These methods from ChooserContextBase are overridden in order to expose // ephemeral devices through the public interface. std::vector> GetGrantedObjects( const GURL& requesting_origin, const GURL& embedding_origin) override; std::vector> GetAllGrantedObjects() override; void RevokeObjectPermission(const GURL& requesting_origin, const GURL& embedding_origin, const base::DictionaryValue& object) override; // Grants |requesting_origin| access to the USB device known to // device::UsbService as |guid|. void GrantDevicePermission(const GURL& requesting_origin, const GURL& embedding_origin, const std::string& guid); // Checks if |requesting_origin| (when embedded within |embedding_origin| has // access to a device with |device_info|. bool HasDevicePermission(const GURL& requesting_origin, const GURL& embedding_origin, const device::usb::DeviceInfo& device_info); private: // ChooserContextBase implementation. bool IsValidObject(const base::DictionaryValue& object) override; // device::UsbService::Observer implementation. void OnDeviceRemoved(scoped_refptr device) override; bool is_off_the_record_; std::map, std::set> ephemeral_devices_; device::UsbService* usb_service_; ScopedObserver observer_; DISALLOW_COPY_AND_ASSIGN(UsbChooserContext); }; #endif // CHROME_BROWSER_USB_USB_CHOOSER_CONTEXT_H_