blob: d2a02ef498efd68bed2ac802fddd55ab2dc5d75a [file] [log] [blame]
// Copyright 2017 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_UTIL_H_
#define CONTENT_BROWSER_MEDIA_MEDIA_DEVICES_UTIL_H_
#include <string>
#include <utility>
#include "base/callback.h"
#include "content/common/content_export.h"
#include "content/common/media/media_devices.h"
#include "url/origin.h"
namespace content {
// Returns the ID of the user-default device ID via |callback|.
// If no such device ID can be found, |callback| receives an empty string.
CONTENT_EXPORT void GetDefaultMediaDeviceID(
MediaDeviceType device_type,
int render_process_id,
int render_frame_id,
const base::Callback<void(const std::string&)>& callback);
struct CONTENT_EXPORT MediaDeviceSaltAndOrigin {
MediaDeviceSaltAndOrigin();
MediaDeviceSaltAndOrigin(std::string device_id_salt,
std::string group_id_salt,
url::Origin origin);
std::string device_id_salt;
std::string group_id_salt;
url::Origin origin;
};
// Returns the current media device ID salt and security origin for the given
// |render_process_id| and |render_frame_id|. These values are used to produce
// unique media-device IDs for each origin and renderer process. These values
// should not be cached since the user can explicitly change them at any time.
// This function must run on the UI thread.
MediaDeviceSaltAndOrigin GetMediaDeviceSaltAndOrigin(int render_process_id,
int render_frame_id);
// Returns a translated version of |device_info| suitable for use in a renderer
// process.
// The |device_id| field is hashed using |device_id_salt| and |security_origin|.
// The |group_id| field is hashed using |group_id_salt| and |security_origin|.
// The |label| field is removed if |has_permission| is false.
MediaDeviceInfo TranslateMediaDeviceInfo(
bool has_permission,
const MediaDeviceSaltAndOrigin& salt_and_origin,
const MediaDeviceInfo& device_info);
// Returns a translated version of |device_infos|, with each element translated
// using TranslateMediaDeviceInfo().
MediaDeviceInfoArray TranslateMediaDeviceInfoArray(
bool has_permission,
const MediaDeviceSaltAndOrigin& salt_and_origin,
const MediaDeviceInfoArray& device_infos);
// Type definition to make it easier to use mock alternatives to
// GetMediaDeviceSaltAndOrigin.
using MediaDeviceSaltAndOriginCallback =
base::RepeatingCallback<MediaDeviceSaltAndOrigin(int, int)>;
} // namespace content
#endif // CONTENT_BROWSER_MEDIA_MEDIA_DEVICES_UTIL_H_