[go: nahoru, domu]

Move media device salt management into a keyed service

The new keyed service uses an async interface in preparation for a new
storage backend that will be async. Extra context at go/media-device-salt-partitioning

All call sites are migrated to the new async API.

No user-visible behavior changes intended.

Bug: 713733, 1410462

Change-Id: I2cf2bb9635576d9c2c99ccf250bf88fbf6b61152
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4608130
Reviewed-by: Thomas Guilbert <tguilbert@chromium.org>
Reviewed-by: Colin Blundell <blundell@chromium.org>
Reviewed-by: Wei Lee <wtlee@chromium.org>
Reviewed-by: Elad Alon <eladalon@chromium.org>
Reviewed-by: Kyle Williams <kdgwill@chromium.org>
Commit-Queue: Guido Urdaneta <guidou@chromium.org>
Reviewed-by: Gabriel Charette <gab@chromium.org>
Reviewed-by: Alex Ilin <alexilin@chromium.org>
Reviewed-by: Finnur Thorarinsson <finnur@chromium.org>
Reviewed-by: Alexander Timin <altimin@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1161175}
diff --git a/components/media_device_salt/media_device_id_salt.h b/components/media_device_salt/media_device_id_salt.h
new file mode 100644
index 0000000..2321b24
--- /dev/null
+++ b/components/media_device_salt/media_device_id_salt.h
@@ -0,0 +1,49 @@
+// Copyright 2013 The Chromium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef COMPONENTS_MEDIA_DEVICE_SALT_MEDIA_DEVICE_ID_SALT_H_
+#define COMPONENTS_MEDIA_DEVICE_SALT_MEDIA_DEVICE_ID_SALT_H_
+
+#include <string>
+
+#include "base/memory/ref_counted.h"
+#include "components/pref_registry/pref_registry_syncable.h"
+#include "components/prefs/pref_member.h"
+
+class PrefService;
+
+namespace media_device_salt {
+
+namespace prefs {
+extern const char kMediaDeviceIdSalt[];
+}
+
+// MediaDeviceIDSalt is responsible for creating and retrieving a salt string
+// that is used for creating MediaSource IDs that can be cached by a web
+// service. If the cache is cleared, the  MediaSourceIds are invalidated.
+//
+// The class is reference counted so that it can be used in the
+// callback returned by ResourceContext::GetMediaDeviceIDSalt.
+class MediaDeviceIDSalt : public base::RefCountedThreadSafe<MediaDeviceIDSalt> {
+ public:
+  explicit MediaDeviceIDSalt(PrefService* pref_service);
+
+  MediaDeviceIDSalt(const MediaDeviceIDSalt&) = delete;
+  MediaDeviceIDSalt& operator=(const MediaDeviceIDSalt&) = delete;
+
+  static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry);
+
+  std::string GetSalt() const;
+  static void Reset(PrefService* pref_service);
+
+ private:
+  friend class base::RefCountedThreadSafe<MediaDeviceIDSalt>;
+  ~MediaDeviceIDSalt();
+
+  mutable StringPrefMember media_device_id_salt_;
+};
+
+}  // namespace media_device_salt
+
+#endif  // COMPONENTS_MEDIA_DEVICE_SALT_MEDIA_DEVICE_ID_SALT_H_