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

Side by Side Diff: content/browser/android/surface_texture_peer_browser_impl.cc

Issue 278353003: Make RendererMediaPlayerManager a RenderFrameObserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/android/surface_texture_peer_browser_impl.h" 5 #include "content/browser/android/surface_texture_peer_browser_impl.h"
6 6
7 #include "content/browser/media/android/browser_media_player_manager.h" 7 #include "content/browser/media/android/browser_media_player_manager.h"
8 #include "content/browser/media/android/media_web_contents_observer.h"
8 #include "content/browser/renderer_host/render_view_host_impl.h" 9 #include "content/browser/renderer_host/render_view_host_impl.h"
9 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/render_process_host.h" 11 #include "content/public/browser/render_process_host.h"
11 #include "media/base/android/media_player_android.h" 12 #include "media/base/android/media_player_android.h"
12 #include "ui/gl/android/scoped_java_surface.h" 13 #include "ui/gl/android/scoped_java_surface.h"
13 14
14 namespace content { 15 namespace content {
15 16
16 namespace { 17 namespace {
17 18
18 // Pass a java surface object to the MediaPlayerAndroid object 19 // Pass a java surface object to the MediaPlayerAndroid object
19 // identified by render process handle, render view ID and player ID. 20 // identified by render process handle, render view ID and player ID.
20 static void SetSurfacePeer( 21 static void SetSurfacePeer(
21 scoped_refptr<gfx::SurfaceTexture> surface_texture, 22 scoped_refptr<gfx::SurfaceTexture> surface_texture,
22 base::ProcessHandle render_process_handle, 23 base::ProcessHandle render_process_handle,
23 int render_view_id, 24 int render_view_id,
24 int player_id) { 25 int player_id) {
25 int renderer_id = 0; 26 int renderer_id = 0;
26 RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator(); 27 RenderProcessHost::iterator it = RenderProcessHost::AllHostsIterator();
27 while (!it.IsAtEnd()) { 28 while (!it.IsAtEnd()) {
28 if (it.GetCurrentValue()->GetHandle() == render_process_handle) { 29 if (it.GetCurrentValue()->GetHandle() == render_process_handle) {
29 renderer_id = it.GetCurrentValue()->GetID(); 30 renderer_id = it.GetCurrentValue()->GetID();
30 break; 31 break;
31 } 32 }
32 it.Advance(); 33 it.Advance();
33 } 34 }
34 35
35 if (renderer_id) { 36 if (!renderer_id) {
36 RenderViewHostImpl* host = RenderViewHostImpl::FromID( 37 DVLOG(1) << "Cannot find renderer for " << render_process_handle;
37 renderer_id, render_view_id); 38 return;
38 if (host) { 39 }
39 media::MediaPlayerAndroid* player = 40
40 host->media_player_manager()->GetPlayer(player_id); 41 RenderViewHostImpl* host =
41 if (player && 42 RenderViewHostImpl::FromID(renderer_id, render_view_id);
42 player != host->media_player_manager()->GetFullscreenPlayer()) { 43
43 gfx::ScopedJavaSurface surface(surface_texture.get()); 44 if (!host) {
44 player->SetVideoSurface(surface.Pass()); 45 DVLOG(1) << "Cannot find host for render_view" << render_view_id;
45 } 46 return;
46 } 47 }
48
49 // TODO(xhwang): This assumes all media elements are in the main frame which
50 // is not true. Update the SetSurfacePeer() stack to use |render_frame_id|
51 // instead of |render_view_id|.
52 RenderFrameHost* frame = host->GetMainFrame();
53 if (!frame) {
54 DVLOG(1) << "Cannot find the main frame.";
55 return;
56 }
57
58 BrowserMediaPlayerManager* player_manager =
59 host->media_web_contents_observer()->GetMediaPlayerManager(frame);
60 if (!player_manager) {
61 DVLOG(1) << "Cannot find the media player manager for frame " << frame;
62 return;
63 }
64
65 media::MediaPlayerAndroid* player = player_manager->GetPlayer(player_id);
66 if (!player) {
67 DVLOG(1) << "Cannot find the media player player_id " << player_id;
68 return;
69 }
70
71 if (player != player_manager->GetFullscreenPlayer()) {
72 gfx::ScopedJavaSurface scoped_surface(surface_texture);
73 player->SetVideoSurface(scoped_surface.Pass());
47 } 74 }
48 } 75 }
49 76
50 } // anonymous namespace 77 } // anonymous namespace
51 78
52 SurfaceTexturePeerBrowserImpl::SurfaceTexturePeerBrowserImpl() { 79 SurfaceTexturePeerBrowserImpl::SurfaceTexturePeerBrowserImpl() {
53 } 80 }
54 81
55 SurfaceTexturePeerBrowserImpl::~SurfaceTexturePeerBrowserImpl() { 82 SurfaceTexturePeerBrowserImpl::~SurfaceTexturePeerBrowserImpl() {
56 } 83 }
57 84
58 void SurfaceTexturePeerBrowserImpl::EstablishSurfaceTexturePeer( 85 void SurfaceTexturePeerBrowserImpl::EstablishSurfaceTexturePeer(
59 base::ProcessHandle render_process_handle, 86 base::ProcessHandle render_process_handle,
60 scoped_refptr<gfx::SurfaceTexture> surface_texture, 87 scoped_refptr<gfx::SurfaceTexture> surface_texture,
61 int render_view_id, 88 int render_view_id,
62 int player_id) { 89 int player_id) {
63 if (!surface_texture.get()) 90 if (!surface_texture.get())
64 return; 91 return;
65 92
66 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( 93 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind(
67 &SetSurfacePeer, surface_texture, render_process_handle, 94 &SetSurfacePeer, surface_texture, render_process_handle,
68 render_view_id, player_id)); 95 render_view_id, player_id));
69 } 96 }
70 97
71 } // namespace content 98 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698