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

Side by Side Diff: media/base/android/media_player_bridge.cc

Issue 193303002: WeakPtr destruction order cleanup: media edition. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 6 years, 9 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
« no previous file with comments | « media/base/android/media_player_bridge.h ('k') | media/base/android/media_source_player.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "media/base/android/media_player_bridge.h" 5 #include "media/base/android/media_player_bridge.h"
6 6
7 #include "base/android/jni_android.h" 7 #include "base/android/jni_android.h"
8 #include "base/android/jni_string.h" 8 #include "base/android/jni_string.h"
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 16 matching lines...) Expand all
27 27
28 MediaPlayerBridge::MediaPlayerBridge( 28 MediaPlayerBridge::MediaPlayerBridge(
29 int player_id, 29 int player_id,
30 const GURL& url, 30 const GURL& url,
31 const GURL& first_party_for_cookies, 31 const GURL& first_party_for_cookies,
32 const std::string& user_agent, 32 const std::string& user_agent,
33 bool hide_url_log, 33 bool hide_url_log,
34 MediaPlayerManager* manager, 34 MediaPlayerManager* manager,
35 const RequestMediaResourcesCB& request_media_resources_cb, 35 const RequestMediaResourcesCB& request_media_resources_cb,
36 const ReleaseMediaResourcesCB& release_media_resources_cb) 36 const ReleaseMediaResourcesCB& release_media_resources_cb)
37 : MediaPlayerAndroid(player_id, manager, request_media_resources_cb, 37 : MediaPlayerAndroid(player_id,
38 manager,
39 request_media_resources_cb,
38 release_media_resources_cb), 40 release_media_resources_cb),
39 prepared_(false), 41 prepared_(false),
40 pending_play_(false), 42 pending_play_(false),
41 url_(url), 43 url_(url),
42 first_party_for_cookies_(first_party_for_cookies), 44 first_party_for_cookies_(first_party_for_cookies),
43 user_agent_(user_agent), 45 user_agent_(user_agent),
44 hide_url_log_(hide_url_log), 46 hide_url_log_(hide_url_log),
45 width_(0), 47 width_(0),
46 height_(0), 48 height_(0),
47 can_pause_(true), 49 can_pause_(true),
48 can_seek_forward_(true), 50 can_seek_forward_(true),
49 can_seek_backward_(true), 51 can_seek_backward_(true),
50 weak_this_(this), 52 is_surface_in_use_(false),
51 listener_(base::MessageLoopProxy::current(), 53 weak_factory_(this) {
52 weak_this_.GetWeakPtr()), 54 listener_.reset(new MediaPlayerListener(base::MessageLoopProxy::current(),
53 is_surface_in_use_(false) { 55 weak_factory_.GetWeakPtr()));
54 } 56 }
55 57
56 MediaPlayerBridge::~MediaPlayerBridge() { 58 MediaPlayerBridge::~MediaPlayerBridge() {
57 if (!j_media_player_bridge_.is_null()) { 59 if (!j_media_player_bridge_.is_null()) {
58 JNIEnv* env = base::android::AttachCurrentThread(); 60 JNIEnv* env = base::android::AttachCurrentThread();
59 CHECK(env); 61 CHECK(env);
60 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj()); 62 Java_MediaPlayerBridge_destroy(env, j_media_player_bridge_.obj());
61 } 63 }
62 Release(); 64 Release();
63 } 65 }
64 66
65 void MediaPlayerBridge::Initialize() { 67 void MediaPlayerBridge::Initialize() {
66 cookies_.clear(); 68 cookies_.clear();
67 if (url_.SchemeIsFile()) { 69 if (url_.SchemeIsFile()) {
68 ExtractMediaMetadata(url_.spec()); 70 ExtractMediaMetadata(url_.spec());
69 return; 71 return;
70 } 72 }
71 73
72 media::MediaResourceGetter* resource_getter = 74 media::MediaResourceGetter* resource_getter =
73 manager()->GetMediaResourceGetter(); 75 manager()->GetMediaResourceGetter();
74 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) { 76 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) {
75 resource_getter->GetPlatformPathFromURL(url_, base::Bind( 77 resource_getter->GetPlatformPathFromURL(
76 &MediaPlayerBridge::ExtractMediaMetadata, weak_this_.GetWeakPtr())); 78 url_,
79 base::Bind(&MediaPlayerBridge::ExtractMediaMetadata,
80 weak_factory_.GetWeakPtr()));
77 return; 81 return;
78 } 82 }
79 83
80 resource_getter->GetCookies(url_, first_party_for_cookies_, base::Bind( 84 resource_getter->GetCookies(url_,
81 &MediaPlayerBridge::OnCookiesRetrieved, weak_this_.GetWeakPtr())); 85 first_party_for_cookies_,
86 base::Bind(&MediaPlayerBridge::OnCookiesRetrieved,
87 weak_factory_.GetWeakPtr()));
82 } 88 }
83 89
84 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() { 90 void MediaPlayerBridge::CreateJavaMediaPlayerBridge() {
85 JNIEnv* env = base::android::AttachCurrentThread(); 91 JNIEnv* env = base::android::AttachCurrentThread();
86 CHECK(env); 92 CHECK(env);
87 93
88 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create( 94 j_media_player_bridge_.Reset(Java_MediaPlayerBridge_create(
89 env, reinterpret_cast<intptr_t>(this))); 95 env, reinterpret_cast<intptr_t>(this)));
90 96
91 SetMediaPlayerListener(); 97 SetMediaPlayerListener();
(...skipping 11 matching lines...) Expand all
103 GetJavaMediaPlayerBridge() { 109 GetJavaMediaPlayerBridge() {
104 base::android::ScopedJavaLocalRef<jobject> j_bridge( 110 base::android::ScopedJavaLocalRef<jobject> j_bridge(
105 j_media_player_bridge_); 111 j_media_player_bridge_);
106 return j_bridge; 112 return j_bridge;
107 } 113 }
108 114
109 void MediaPlayerBridge::SetMediaPlayerListener() { 115 void MediaPlayerBridge::SetMediaPlayerListener() {
110 jobject j_context = base::android::GetApplicationContext(); 116 jobject j_context = base::android::GetApplicationContext();
111 DCHECK(j_context); 117 DCHECK(j_context);
112 118
113 listener_.CreateMediaPlayerListener(j_context, j_media_player_bridge_.obj()); 119 listener_->CreateMediaPlayerListener(j_context, j_media_player_bridge_.obj());
114 } 120 }
115 121
116 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) { 122 void MediaPlayerBridge::SetDuration(base::TimeDelta duration) {
117 duration_ = duration; 123 duration_ = duration;
118 } 124 }
119 125
120 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) { 126 void MediaPlayerBridge::SetVideoSurface(gfx::ScopedJavaSurface surface) {
121 if (j_media_player_bridge_.is_null()) { 127 if (j_media_player_bridge_.is_null()) {
122 if (surface.IsEmpty()) 128 if (surface.IsEmpty())
123 return; 129 return;
124 Prepare(); 130 Prepare();
125 } 131 }
126 132
127 JNIEnv* env = base::android::AttachCurrentThread(); 133 JNIEnv* env = base::android::AttachCurrentThread();
128 CHECK(env); 134 CHECK(env);
129 is_surface_in_use_ = true; 135 is_surface_in_use_ = true;
130 Java_MediaPlayerBridge_setSurface( 136 Java_MediaPlayerBridge_setSurface(
131 env, j_media_player_bridge_.obj(), surface.j_surface().obj()); 137 env, j_media_player_bridge_.obj(), surface.j_surface().obj());
132 } 138 }
133 139
134 void MediaPlayerBridge::Prepare() { 140 void MediaPlayerBridge::Prepare() {
135 DCHECK(j_media_player_bridge_.is_null()); 141 DCHECK(j_media_player_bridge_.is_null());
136 CreateJavaMediaPlayerBridge(); 142 CreateJavaMediaPlayerBridge();
137 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) { 143 if (url_.SchemeIsFileSystem() || url_.SchemeIs(kBlobScheme)) {
138 manager()->GetMediaResourceGetter()->GetPlatformPathFromURL( 144 manager()->GetMediaResourceGetter()->GetPlatformPathFromURL(
139 url_, base::Bind(&MediaPlayerBridge::SetDataSource, 145 url_,
140 weak_this_.GetWeakPtr())); 146 base::Bind(&MediaPlayerBridge::SetDataSource,
147 weak_factory_.GetWeakPtr()));
141 return; 148 return;
142 } 149 }
143 150
144 SetDataSource(url_.spec()); 151 SetDataSource(url_.spec());
145 } 152 }
146 153
147 void MediaPlayerBridge::SetDataSource(const std::string& url) { 154 void MediaPlayerBridge::SetDataSource(const std::string& url) {
148 if (j_media_player_bridge_.is_null()) 155 if (j_media_player_bridge_.is_null())
149 return; 156 return;
150 157
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
194 OnMediaError(MEDIA_ERROR_FORMAT); 201 OnMediaError(MEDIA_ERROR_FORMAT);
195 } 202 }
196 203
197 void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) { 204 void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) {
198 cookies_ = cookies; 205 cookies_ = cookies;
199 ExtractMediaMetadata(url_.spec()); 206 ExtractMediaMetadata(url_.spec());
200 } 207 }
201 208
202 void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { 209 void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) {
203 manager()->GetMediaResourceGetter()->ExtractMediaMetadata( 210 manager()->GetMediaResourceGetter()->ExtractMediaMetadata(
204 url, cookies_, user_agent_, 211 url,
212 cookies_,
213 user_agent_,
205 base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, 214 base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted,
206 weak_this_.GetWeakPtr())); 215 weak_factory_.GetWeakPtr()));
207 } 216 }
208 217
209 void MediaPlayerBridge::OnMediaMetadataExtracted( 218 void MediaPlayerBridge::OnMediaMetadataExtracted(
210 base::TimeDelta duration, int width, int height, bool success) { 219 base::TimeDelta duration, int width, int height, bool success) {
211 if (success) { 220 if (success) {
212 duration_ = duration; 221 duration_ = duration;
213 width_ = width; 222 width_ = width;
214 height_ = height; 223 height_ = height;
215 } 224 }
216 manager()->OnMediaMetadataChanged( 225 manager()->OnMediaMetadataChanged(
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 if (prepared_) 312 if (prepared_)
304 pending_seek_ = GetCurrentTime(); 313 pending_seek_ = GetCurrentTime();
305 prepared_ = false; 314 prepared_ = false;
306 pending_play_ = false; 315 pending_play_ = false;
307 is_surface_in_use_ = false; 316 is_surface_in_use_ = false;
308 SetVideoSurface(gfx::ScopedJavaSurface()); 317 SetVideoSurface(gfx::ScopedJavaSurface());
309 JNIEnv* env = base::android::AttachCurrentThread(); 318 JNIEnv* env = base::android::AttachCurrentThread();
310 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj()); 319 Java_MediaPlayerBridge_release(env, j_media_player_bridge_.obj());
311 j_media_player_bridge_.Reset(); 320 j_media_player_bridge_.Reset();
312 release_media_resources_cb_.Run(player_id()); 321 release_media_resources_cb_.Run(player_id());
313 listener_.ReleaseMediaPlayerListenerResources(); 322 listener_->ReleaseMediaPlayerListenerResources();
314 } 323 }
315 324
316 void MediaPlayerBridge::SetVolume(double volume) { 325 void MediaPlayerBridge::SetVolume(double volume) {
317 if (j_media_player_bridge_.is_null()) 326 if (j_media_player_bridge_.is_null())
318 return; 327 return;
319 328
320 JNIEnv* env = base::android::AttachCurrentThread(); 329 JNIEnv* env = base::android::AttachCurrentThread();
321 CHECK(env); 330 CHECK(env);
322 Java_MediaPlayerBridge_setVolume( 331 Java_MediaPlayerBridge_setVolume(
323 env, j_media_player_bridge_.obj(), volume); 332 env, j_media_player_bridge_.obj(), volume);
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 473
465 GURL MediaPlayerBridge::GetFirstPartyForCookies() { 474 GURL MediaPlayerBridge::GetFirstPartyForCookies() {
466 return first_party_for_cookies_; 475 return first_party_for_cookies_;
467 } 476 }
468 477
469 bool MediaPlayerBridge::IsSurfaceInUse() const { 478 bool MediaPlayerBridge::IsSurfaceInUse() const {
470 return is_surface_in_use_; 479 return is_surface_in_use_;
471 } 480 }
472 481
473 } // namespace media 482 } // namespace media
OLDNEW
« no previous file with comments | « media/base/android/media_player_bridge.h ('k') | media/base/android/media_source_player.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698