blob: babbf971f26fb8ea21aa941d4dc433b54d336af6 [file] [log] [blame]
// 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 CONTENT_BROWSER_MEDIA_MEDIA_DEVICES_PERMISSION_CHECKER_H_
#define CONTENT_BROWSER_MEDIA_MEDIA_DEVICES_PERMISSION_CHECKER_H_
#include <memory>
#include "base/callback.h"
#include "base/macros.h"
#include "content/browser/renderer_host/media/media_devices_manager.h"
#include "content/common/content_export.h"
namespace content {
// This class provides various utility functions to check if a render frame
// has permission to access media devices. Note that none of the methods
// prompts the user to request permission.
class CONTENT_EXPORT MediaDevicesPermissionChecker {
public:
MediaDevicesPermissionChecker();
// This constructor creates a MediaDevicesPermissionChecker that replies
// |override_value| to all permission requests. Use only for testing.
explicit MediaDevicesPermissionChecker(bool override_value);
// Checks if the origin associated to a render frame identified by
// |render_process_id| and |render_frame_id| is allowed to access the media
// device type |device_type|.
// This method must be called on the UI thread.
bool CheckPermissionOnUIThread(MediaDeviceType device_type,
int render_process_id,
int render_frame_id) const;
// Checks if the origin associated to a render frame identified by
// |render_process_id| and |render_frame_id| is allowed to access the media
// device type |device_type|. The result is passed to |callback|.
// This method can be called on any thread. |callback| is fired on the same
// thread this method is called on.
void CheckPermission(MediaDeviceType device_type,
int render_process_id,
int render_frame_id,
base::OnceCallback<void(bool)> callback) const;
// Checks if the origin associated to a render frame identified by
// |render_process_id| and |render_frame_id| is allowed to access the media
// device types marked with a value of true in |requested_device_types|. The
// result is passed to |callback|. The result is indexed by MediaDeviceType.
// Entries in the result with a value of true for requested device types
// indicate that the frame has permission to access devices of the
// corresponding types.
// This method can be called on any thread. |callback| is fired on the same
// thread this method is called on.
void CheckPermissions(
MediaDevicesManager::BoolDeviceTypes requested_device_types,
int render_process_id,
int render_frame_id,
base::OnceCallback<void(const MediaDevicesManager::BoolDeviceTypes&)>
callback) const;
private:
const bool use_override_;
const bool override_value_;
DISALLOW_COPY_AND_ASSIGN(MediaDevicesPermissionChecker);
};
} // namespace content
#endif // CONTENT_BROWSER_MEDIA_MEDIA_DEVICES_PERMISSION_CHECKER_H_