1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_PUBLIC_BROWSER_DEVTOOLS_PERMISSION_OVERRIDES_H_ 6 #define CONTENT_PUBLIC_BROWSER_DEVTOOLS_PERMISSION_OVERRIDES_H_ 7 8 #include <vector> 9 10 #include "base/containers/flat_map.h" 11 #include "base/optional.h" 12 #include "content/common/content_export.h" 13 #include "content/public/browser/permission_type.h" 14 #include "third_party/blink/public/mojom/permissions/permission_status.mojom.h" 15 #include "url/origin.h" 16 17 namespace content { 18 19 // Maintains permission overrides for each origin. 20 class CONTENT_EXPORT DevToolsPermissionOverrides { 21 public: 22 explicit DevToolsPermissionOverrides(); 23 ~DevToolsPermissionOverrides(); 24 DevToolsPermissionOverrides(DevToolsPermissionOverrides&& other); 25 DevToolsPermissionOverrides& operator=(DevToolsPermissionOverrides&& other); 26 27 DevToolsPermissionOverrides(const DevToolsPermissionOverrides&) = delete; 28 DevToolsPermissionOverrides& operator=(const DevToolsPermissionOverrides&) = 29 delete; 30 31 using PermissionOverrides = 32 base::flat_map<PermissionType, blink::mojom::PermissionStatus>; 33 34 // Set permission override for |permission| at |origin| to |status|. 35 // Null |origin| specifies global overrides. 36 void Set(const base::Optional<url::Origin>& origin, 37 PermissionType permission, 38 const blink::mojom::PermissionStatus& status); 39 40 // Get override for |origin| set for |permission|, if specified. 41 base::Optional<blink::mojom::PermissionStatus> Get( 42 const url::Origin& origin, 43 PermissionType permission) const; 44 45 // Get all overrides for particular |origin|, stored in |overrides| 46 // if found. Will return empty overrides if none previously existed. Returns 47 // global overrides when |origin| is nullptr. 48 const PermissionOverrides& GetAll( 49 const base::Optional<url::Origin>& origin) const; 50 51 // Resets overrides for |origin|. 52 // Null |origin| resets global overrides. 53 void Reset(const base::Optional<url::Origin>& origin); 54 55 // Sets status for |permissions| to GRANTED in |origin|, and DENIED 56 // for all others. 57 // Null |origin| grants permissions globally for context. 58 void GrantPermissions(const base::Optional<url::Origin>& origin, 59 const std::vector<PermissionType>& permissions); 60 61 private: 62 url::Origin global_overrides_origin_; 63 base::flat_map<url::Origin, PermissionOverrides> overrides_; 64 }; 65 66 } // namespace content 67 68 #endif // CONTENT_PUBLIC_BROWSER_DEVTOOLS_PERMISSION_OVERRIDES_H_ 69