1 // Copyright 2019 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef COMPONENTS_SYSTEM_MEDIA_CONTROLS_SYSTEM_MEDIA_CONTROLS_H_
6 #define COMPONENTS_SYSTEM_MEDIA_CONTROLS_SYSTEM_MEDIA_CONTROLS_H_
10 #include "base/component_export.h"
11 #include "services/media_session/public/cpp/media_position.h"
12 #include "third_party/skia/include/core/SkBitmap.h"
14 namespace system_media_controls {
16 class SystemMediaControlsObserver;
18 // OSes often provide a system-level media controls API (e.g. Media Player
19 // Remote Interfacing Specification on Linux or System Media Transport Controls
20 // on Windows). These tend to have similar APIs to each other.
21 // SystemMediaControls is a platform-agnostic API that clients can use to
22 // interface with the operating system's media controls API if it exists.
23 class COMPONENT_EXPORT(SYSTEM_MEDIA_CONTROLS) SystemMediaControls {
25 enum class PlaybackStatus {
31 // |window| used by Windows OS for web app (dPWA) connections.
32 static std::unique_ptr<SystemMediaControls> Create(
33 const std::string& product_name,
36 virtual ~SystemMediaControls() = default;
38 virtual void AddObserver(SystemMediaControlsObserver* observer) = 0;
39 virtual void RemoveObserver(SystemMediaControlsObserver* observer) = 0;
41 // Enable or disable the service.
42 virtual void SetEnabled(bool enabled) = 0;
44 // Enable or disable specific controls.
45 virtual void SetIsNextEnabled(bool value) = 0;
46 virtual void SetIsPreviousEnabled(bool value) = 0;
47 virtual void SetIsPlayPauseEnabled(bool value) = 0;
48 virtual void SetIsStopEnabled(bool value) = 0;
49 virtual void SetIsSeekToEnabled(bool value) {}
51 // Setters for metadata.
52 virtual void SetPlaybackStatus(PlaybackStatus value) = 0;
53 virtual void SetID(const std::string* value) {}
54 virtual void SetTitle(const std::u16string& value) = 0;
55 virtual void SetArtist(const std::u16string& value) = 0;
56 virtual void SetAlbum(const std::u16string& value) = 0;
57 virtual void SetThumbnail(const SkBitmap& bitmap) = 0;
58 virtual void SetPosition(const media_session::MediaPosition& position) {}
60 // Helpers for metadata
61 virtual void ClearThumbnail() = 0;
62 virtual void ClearMetadata() = 0;
63 virtual void UpdateDisplay() = 0;
66 } // namespace system_media_controls
68 #endif // COMPONENTS_SYSTEM_MEDIA_CONTROLS_SYSTEM_MEDIA_CONTROLS_H_