| 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..3db9298a1f135f6370dce30a560e4e04268b1260
|
| --- /dev/null
|
| +++ b/content/browser/media/session/pepper_playback_observer.cc
|
| @@ -0,0 +1,64 @@
|
| +// 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 {
|
| +
|
| +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_.begin();
|
| + iter != players_map_.end();) {
|
| + MediaSession::Get(contents_)->RemovePlayer(
|
| + iter->second.get(), PepperPlayerDelegate::kPlayerId);
|
| + iter = players_map_.erase(iter);
|
| + }
|
| +}
|
| +
|
| +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_.count(pp_instance))
|
| + return;
|
| +
|
| + players_map_[pp_instance].reset(new PepperPlayerDelegate(
|
| + contents_, pp_instance));
|
| + MediaSession::Get(contents_)->AddPlayer(
|
| + players_map_[pp_instance].get(),
|
| + PepperPlayerDelegate::kPlayerId,
|
| + MediaSession::Type::Content);
|
| +}
|
| +
|
| +void PepperPlaybackObserver::PepperStopsPlayback(int32_t pp_instance) {
|
| + if (!players_map_.count(pp_instance))
|
| + return;
|
| +
|
| + MediaSession::Get(contents_)->RemovePlayer(
|
| + players_map_[pp_instance].get(), PepperPlayerDelegate::kPlayerId);
|
| +
|
| + players_map_.erase(pp_instance);
|
| +}
|
| +
|
| +} // namespace content
|
|
|