910e62b5创建于 1月15日历史提交
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_PUBLIC_BROWSER_PERMISSION_REQUEST_DESCRIPTION_H_
#define CONTENT_PUBLIC_BROWSER_PERMISSION_REQUEST_DESCRIPTION_H_

#include <vector>

#include "content/common/content_export.h"
#include "third_party/blink/public/common/permissions/permission_utils.h"
#include "third_party/blink/public/mojom/permissions/permission.mojom.h"
#include "third_party/blink/public/mojom/permissions/permission_status.mojom.h"
#include "ui/gfx/geometry/rect.h"
#include "url/gurl.h"

namespace content {

// This structure represents a subset of information necessary to request
// permission from a renderer, including important contextual information.
struct CONTENT_EXPORT PermissionRequestDescription {
  explicit PermissionRequestDescription(
      std::vector<blink::mojom::PermissionDescriptorPtr> permissions,
      bool user_gesture = false,
      const GURL& requesting_origin = GURL());

  explicit PermissionRequestDescription(
      blink::mojom::PermissionDescriptorPtr permission,
      bool user_gesture = false,
      const GURL& requesting_origin = GURL());

  explicit PermissionRequestDescription(
      std::vector<blink::mojom::PermissionDescriptorPtr> permissions,
      blink::mojom::EmbeddedPermissionRequestDescriptorPtr descriptor);

  PermissionRequestDescription& operator=(const PermissionRequestDescription&) =
      delete;
  // The copy constructor is used in GMOCK-based tests which need to be able to
  // copy the object in order to create the corresponding Matcher.
  PermissionRequestDescription(const PermissionRequestDescription&);

  PermissionRequestDescription& operator=(PermissionRequestDescription&&);
  PermissionRequestDescription(PermissionRequestDescription&&);
  ~PermissionRequestDescription();

  bool operator==(const PermissionRequestDescription& other) const;

  // Defines the list of permissions we will request.
  std::vector<blink::mojom::PermissionDescriptorPtr> permissions;

  // Indicates the request is initiated by a user gesture.
  bool user_gesture;

  // The origin on whose behalf this permission request is being made.
  GURL requesting_origin;

  // If not null, this request comes from an embedded permission element,
  // and this struct holds element-specific data.
  blink::mojom::EmbeddedPermissionRequestDescriptorPtr
      embedded_permission_request_descriptor;
  std::vector<std::string> requested_audio_capture_device_ids;
  std::vector<std::string> requested_video_capture_device_ids;
};

}  // namespace content

#endif  // CONTENT_PUBLIC_BROWSER_PERMISSION_REQUEST_DESCRIPTION_H_