| Index: content/browser/media/session/pepper_playback_observer.cc
|
| diff --git a/content/browser/media/session/pepper_playback_observer.cc b/content/browser/media/session/pepper_playback_observer.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..e22af4b4b6c4079217c0fb6cca0b78e7daae3e82
|
| --- /dev/null
|
| +++ b/content/browser/media/session/pepper_playback_observer.cc
|
| @@ -0,0 +1,66 @@
|
| +// 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.
|
| +
|
| +#include "content/browser/media/session/pepper_playback_observer.h"
|
| +
|
| +#include "base/feature_list.h"
|
| +#include "content/browser/media/session/media_session.h"
|
| +#include "content/browser/media/session/pepper_player_delegate.h"
|
| +#include "content/common/frame_messages.h"
|
| +#include "ipc/ipc_message_macros.h"
|
| +#include "media/base/media_switches.h"
|
| +
|
| +namespace content {
|
| +
|
| +namespace {
|
| +
|
| +const int kPlayerId = 0;
|
| +
|
| +}
|
| +
|
| +PepperPlaybackObserver::PepperPlaybackObserver(WebContentsImpl *contents)
|
| + : contents_(contents) {}
|
| +
|
| +PepperPlaybackObserver::~PepperPlaybackObserver() {
|
| + // At this point WebContents is being destructed, so it's safe to
|
| + // call this. MediaSession may decide to send further IPC messages
|
| + // through PepperPlayerDelegates, which might be declined if the
|
| + // RenderViewHost has been destroyed.
|
| + for (PlayersMap::iterator iter(&players_map_);
|
| + !iter.IsAtEnd(); iter.Advance()) {
|
| + PepperStopsPlayback(iter.GetCurrentKey());
|
| + }
|
| +}
|
| +
|
| +void PepperPlaybackObserver::PepperInstanceCreated(int32_t pp_instance) {
|
| +}
|
| +
|
| +void PepperPlaybackObserver::PepperInstanceDeleted(int32_t pp_instance) {
|
| + PepperStopsPlayback(pp_instance);
|
| +}
|
| +
|
| +void PepperPlaybackObserver::PepperStartsPlayback(int32_t pp_instance) {
|
| + if (!base::FeatureList::IsEnabled(media::kFlashJoinsMediaSession))
|
| + return;
|
| +
|
| + if (players_map_.Lookup(pp_instance))
|
| + return;
|
| +
|
| + players_map_.AddWithID(new PepperPlayerDelegate(
|
| + contents_, pp_instance), pp_instance);
|
| + MediaSession::Get(contents_)->AddPlayer(
|
| + players_map_.Lookup(pp_instance), kPlayerId, MediaSession::Type::Content);
|
| +}
|
| +
|
| +void PepperPlaybackObserver::PepperStopsPlayback(int32_t pp_instance) {
|
| + if (!players_map_.Lookup(pp_instance))
|
| + return;
|
| +
|
| + MediaSession::Get(contents_)->RemovePlayer(
|
| + players_map_.Lookup(pp_instance), kPlayerId);
|
| +
|
| + players_map_.Remove(pp_instance);
|
| +}
|
| +
|
| +} // namespace content
|
|
|