// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

library fuchsia.mediasession;

using zx;
using fuchsia.mediaplayer;

/// |Observer| is a handle for media playback, allowing clients to observe
/// a playback session.
[FragileBase]
protocol Observer {
    /// Sent on first connection and when playback
    /// status changes.
    -> OnPlaybackStatusChanged(PlaybackStatus playback_status);
    /// Sent on first connection and when metadata
    /// changes.
    // TODO(turnage): Do a soft or hard transition to move Metadata into
    // fuchsia.media.
    -> OnMetadataChanged(fuchsia.mediaplayer.Metadata media_metadata);
};
