1 // Copyright 2020 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 CHROME_BROWSER_MEDIA_WEBRTC_CAMERA_PAN_TILT_ZOOM_PERMISSION_CONTEXT_H_
6 #define CHROME_BROWSER_MEDIA_WEBRTC_CAMERA_PAN_TILT_ZOOM_PERMISSION_CONTEXT_H_
7 
8 #include "base/macros.h"
9 #include "build/build_config.h"
10 #include "components/content_settings/core/browser/content_settings_observer.h"
11 #include "components/content_settings/core/browser/host_content_settings_map.h"
12 #include "components/permissions/permission_context_base.h"
13 
14 // Manage user permissions that only control camera movement (pan, tilt, and
15 // zoom). Those permissions are automatically reset when the "regular" camera
16 // permission is blocked or reset.
17 class CameraPanTiltZoomPermissionContext
18     : public permissions::PermissionContextBase,
19       public content_settings::Observer {
20  public:
21   explicit CameraPanTiltZoomPermissionContext(
22       content::BrowserContext* browser_context);
23   ~CameraPanTiltZoomPermissionContext() override;
24 
25   CameraPanTiltZoomPermissionContext(
26       const CameraPanTiltZoomPermissionContext&) = delete;
27   CameraPanTiltZoomPermissionContext& operator=(
28       const CameraPanTiltZoomPermissionContext&) = delete;
29 
30  private:
31   // PermissionContextBase
32   void RequestPermission(
33       content::WebContents* web_contents,
34       const permissions::PermissionRequestID& id,
35       const GURL& requesting_frame_origin,
36       bool user_gesture,
37       permissions::BrowserPermissionCallback callback) override;
38 #if defined(OS_ANDROID)
39   ContentSetting GetPermissionStatusInternal(
40       content::RenderFrameHost* render_frame_host,
41       const GURL& requesting_origin,
42       const GURL& embedding_origin) const override;
43 #endif
44   bool IsRestrictedToSecureOrigins() const override;
45 
46   // content_settings::Observer
47   void OnContentSettingChanged(const ContentSettingsPattern& primary_pattern,
48                                const ContentSettingsPattern& secondary_pattern,
49                                ContentSettingsType content_type) override;
50 
51   // Returns true if at least one video capture device has PTZ capabilities.
52   // Otherwise returns false.
53   bool HasAvailableCameraPtzDevices() const;
54 
55   HostContentSettingsMap* host_content_settings_map_;
56 
57   bool updating_camera_ptz_permission_ = false;
58   bool updating_mediastream_camera_permission_ = false;
59 };
60 
61 #endif  // CHROME_BROWSER_MEDIA_WEBRTC_CAMERA_PAN_TILT_ZOOM_PERMISSION_CONTEXT_H_
62