// 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.

package org.chromium.content_public.browser;

import android.support.annotation.Nullable;

import org.chromium.base.ObserverList;
import org.chromium.base.VisibleForTesting;
import org.chromium.content.browser.MediaSessionImpl;

/**
 * The MediaSession Java wrapper to allow communicating with the native MediaSession object.
 */
public abstract class MediaSession {
    /**
     * @return The MediaSession associated with |contents|.
     */
    @Nullable
    public static MediaSession fromWebContents(WebContents contents) {
        // TODO(zqzhang): directly call WebContentsImpl.getMediaSession() when WebContentsImpl
        // package restriction is removed.
        return MediaSessionImpl.fromWebContents(contents);
    }

    /**
     * @return The list of observers.
     */
    @VisibleForTesting
    public abstract ObserverList.RewindableIterator<MediaSessionObserver> getObserversForTesting();

    /**
     * Resumes the media session.
     */
    public abstract void resume();

    /**
     * Suspends the media session.
     */
    public abstract void suspend();

    /**
     * Stops the media session.
     */
    public abstract void stop();

    /**
     * Notify the media session that an action has been performed.
     */
    public abstract void didReceiveAction(int action);
}