Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(52)

Unified Diff: content/browser/media/android/media_web_contents_observer.cc

Issue 278353003: Make RendererMediaPlayerManager a RenderFrameObserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix VIDEO_HOLE DidCommitCompositorFrame. Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/media/android/media_web_contents_observer.cc
diff --git a/content/browser/media/android/media_web_contents_observer.cc b/content/browser/media/android/media_web_contents_observer.cc
new file mode 100644
index 0000000000000000000000000000000000000000..56a5577d4cc47c368b790a169167490b39a80b0a
--- /dev/null
+++ b/content/browser/media/android/media_web_contents_observer.cc
@@ -0,0 +1,133 @@
+// Copyright 2014 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/android/media_web_contents_observer.h"
+
+#include "base/stl_util.h"
+#include "content/browser/media/android/browser_media_player_manager.h"
+#include "content/common/media/cdm_messages.h"
+#include "content/common/media/media_player_messages_android.h"
+#include "content/public/browser/render_frame_host.h"
+#include "content/public/browser/web_contents.h"
+#include "ipc/ipc_message_macros.h"
+
+namespace content {
+
+MediaWebContentsObserver::MediaWebContentsObserver(
+ RenderViewHost* render_view_host)
+ : WebContentsObserver(WebContents::FromRenderViewHost(render_view_host)) {
+}
+
+MediaWebContentsObserver::~MediaWebContentsObserver() {
+ STLDeleteValues(&media_player_managers_);
+}
+
+void MediaWebContentsObserver::RenderFrameDeleted(
+ RenderFrameHost* render_frame_host) {
+ BrowserMediaPlayerManager* player_manager =
+ GetMediaPlayerManager(render_frame_host);
+ if (player_manager)
+ delete player_manager;
+ media_player_managers_.erase(render_frame_host);
+}
+
+bool MediaWebContentsObserver::OnMessageReceived(
+ const IPC::Message& msg,
+ RenderFrameHost* render_frame_host) {
+ BrowserMediaPlayerManager* player_manager =
+ GetMediaPlayerManager(render_frame_host);
+ DCHECK(player_manager);
+
+ bool handled = true;
+ IPC_BEGIN_MESSAGE_MAP(MediaWebContentsObserver, msg)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_EnterFullscreen,
+ player_manager,
+ BrowserMediaPlayerManager::OnEnterFullscreen)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_ExitFullscreen,
+ player_manager,
+ BrowserMediaPlayerManager::OnExitFullscreen)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Initialize,
+ player_manager,
+ BrowserMediaPlayerManager::OnInitialize)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Start,
+ player_manager,
+ BrowserMediaPlayerManager::OnStart)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Seek,
+ player_manager,
+ BrowserMediaPlayerManager::OnSeek)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Pause,
+ player_manager,
+ BrowserMediaPlayerManager::OnPause)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_SetVolume,
+ player_manager,
+ BrowserMediaPlayerManager::OnSetVolume)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_SetPoster,
+ player_manager,
+ BrowserMediaPlayerManager::OnSetPoster)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_Release,
+ player_manager,
+ BrowserMediaPlayerManager::OnReleaseResources)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_DestroyMediaPlayer,
+ player_manager,
+ BrowserMediaPlayerManager::OnDestroyPlayer)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_DestroyAllMediaPlayers,
+ player_manager,
+ BrowserMediaPlayerManager::DestroyAllMediaPlayers)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_SetCdm,
+ player_manager,
+ BrowserMediaPlayerManager::OnSetCdm)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_InitializeCdm,
+ player_manager,
+ BrowserMediaPlayerManager::OnInitializeCdm)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_CreateSession,
+ player_manager,
+ BrowserMediaPlayerManager::OnCreateSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_UpdateSession,
+ player_manager,
+ BrowserMediaPlayerManager::OnUpdateSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_ReleaseSession,
+ player_manager,
+ BrowserMediaPlayerManager::OnReleaseSession)
+ IPC_MESSAGE_FORWARD(CdmHostMsg_DestroyCdm,
+ player_manager,
+ BrowserMediaPlayerManager::OnDestroyCdm)
+#if defined(VIDEO_HOLE)
+ IPC_MESSAGE_FORWARD(MediaPlayerHostMsg_NotifyExternalSurface,
+ player_manager,
+ BrowserMediaPlayerManager::OnNotifyExternalSurface)
+#endif // defined(VIDEO_HOLE)
+ IPC_MESSAGE_UNHANDLED(handled = false)
+ IPC_END_MESSAGE_MAP()
+ return handled;
+}
+
+BrowserMediaPlayerManager* MediaWebContentsObserver::GetMediaPlayerManager(
+ RenderFrameHost* render_frame_host) {
+ if (!ContainsKey(media_player_managers_, render_frame_host)) {
+ media_player_managers_[render_frame_host] =
+ BrowserMediaPlayerManager::Create(render_frame_host);
+ }
+
+ return media_player_managers_[render_frame_host];
+}
+
+void MediaWebContentsObserver::PauseVideo() {
+ for (MediaPlayerManagerMap::iterator iter = media_player_managers_.begin();
+ iter != media_player_managers_.end(); ++iter) {
+ BrowserMediaPlayerManager* manager = iter->second;
+ manager->PauseVideo();
+ }
+}
+
+#if defined(VIDEO_HOLE)
+void MediaWebContentsObserver::OnFrameInfoUpdated() {
+ for (MediaPlayerManagerMap::iterator iter = media_player_managers_.begin();
+ iter != media_player_managers_.end(); ++iter) {
+ BrowserMediaPlayerManager* manager = iter->second;
+ manager->OnFrameInfoUpdated();
+ }
+}
+#endif // defined(VIDEO_HOLE)
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698