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

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

Issue 74293002: Fix browser crash when calling MediaPlayerBridge::PrepareAsync (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: addressing scherkus's comments Created 7 years, 1 month 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/java/src/org/chromium/media/MediaPlayerBridge.java ('k') | no next file » | 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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 } 111 }
112 112
113 JNIEnv* env = base::android::AttachCurrentThread(); 113 JNIEnv* env = base::android::AttachCurrentThread();
114 CHECK(env); 114 CHECK(env);
115 115
116 Java_MediaPlayerBridge_setSurface( 116 Java_MediaPlayerBridge_setSurface(
117 env, j_media_player_bridge_.obj(), surface.j_surface().obj()); 117 env, j_media_player_bridge_.obj(), surface.j_surface().obj());
118 } 118 }
119 119
120 void MediaPlayerBridge::Prepare() { 120 void MediaPlayerBridge::Prepare() {
121 if (j_media_player_bridge_.is_null()) 121 DCHECK(j_media_player_bridge_.is_null());
122 CreateJavaMediaPlayerBridge(); 122 CreateJavaMediaPlayerBridge();
123 if (url_.SchemeIsFileSystem()) { 123 if (url_.SchemeIsFileSystem()) {
124 manager()->GetMediaResourceGetter()->GetPlatformPathFromFileSystemURL( 124 manager()->GetMediaResourceGetter()->GetPlatformPathFromFileSystemURL(
125 url_, base::Bind(&MediaPlayerBridge::SetDataSource, 125 url_, base::Bind(&MediaPlayerBridge::SetDataSource,
126 weak_this_.GetWeakPtr())); 126 weak_this_.GetWeakPtr()));
127 } else { 127 } else {
128 SetDataSource(url_.spec()); 128 SetDataSource(url_.spec());
129 } 129 }
130 } 130 }
131 131
132 void MediaPlayerBridge::SetDataSource(const std::string& url) { 132 void MediaPlayerBridge::SetDataSource(const std::string& url) {
133 if (j_media_player_bridge_.is_null()) 133 if (j_media_player_bridge_.is_null())
134 return; 134 return;
135 135
136 JNIEnv* env = base::android::AttachCurrentThread(); 136 JNIEnv* env = base::android::AttachCurrentThread();
137 CHECK(env); 137 CHECK(env);
138 138
139 // Create a Java String for the URL. 139 // Create a Java String for the URL.
140 ScopedJavaLocalRef<jstring> j_url_string = ConvertUTF8ToJavaString(env, url); 140 ScopedJavaLocalRef<jstring> j_url_string = ConvertUTF8ToJavaString(env, url);
141 ScopedJavaLocalRef<jstring> j_cookies = ConvertUTF8ToJavaString( 141 ScopedJavaLocalRef<jstring> j_cookies = ConvertUTF8ToJavaString(
142 env, cookies_); 142 env, cookies_);
143 143
144 jobject j_context = base::android::GetApplicationContext(); 144 jobject j_context = base::android::GetApplicationContext();
145 DCHECK(j_context); 145 DCHECK(j_context);
146 146
147 if (Java_MediaPlayerBridge_setDataSource( 147 if (!Java_MediaPlayerBridge_setDataSource(
148 env, j_media_player_bridge_.obj(), j_context, j_url_string.obj(), 148 env, j_media_player_bridge_.obj(), j_context, j_url_string.obj(),
149 j_cookies.obj(), hide_url_log_)) { 149 j_cookies.obj(), hide_url_log_)) {
150 manager()->RequestMediaResources(player_id());
151 Java_MediaPlayerBridge_prepareAsync(
152 env, j_media_player_bridge_.obj());
153 } else {
154 OnMediaError(MEDIA_ERROR_FORMAT); 150 OnMediaError(MEDIA_ERROR_FORMAT);
151 return;
155 } 152 }
153
154 manager()->RequestMediaResources(player_id());
155 if (!Java_MediaPlayerBridge_prepareAsync(env, j_media_player_bridge_.obj()))
156 OnMediaError(MEDIA_ERROR_FORMAT);
156 } 157 }
157 158
158 void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) { 159 void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) {
159 cookies_ = cookies; 160 cookies_ = cookies;
160 ExtractMediaMetadata(url_.spec()); 161 ExtractMediaMetadata(url_.spec());
161 } 162 }
162 163
163 void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { 164 void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) {
164 manager()->GetMediaResourceGetter()->ExtractMediaMetadata( 165 manager()->GetMediaResourceGetter()->ExtractMediaMetadata(
165 url, cookies_, base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, 166 url, cookies_, base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted,
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 421
421 GURL MediaPlayerBridge::GetUrl() { 422 GURL MediaPlayerBridge::GetUrl() {
422 return url_; 423 return url_;
423 } 424 }
424 425
425 GURL MediaPlayerBridge::GetFirstPartyForCookies() { 426 GURL MediaPlayerBridge::GetFirstPartyForCookies() {
426 return first_party_for_cookies_; 427 return first_party_for_cookies_;
427 } 428 }
428 429
429 } // namespace media 430 } // namespace media
OLDNEW
« no previous file with comments | « media/base/android/java/src/org/chromium/media/MediaPlayerBridge.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698