Chromium Code Reviews| Index: media/base/android/media_player_bridge.cc |
| diff --git a/media/base/android/media_player_bridge.cc b/media/base/android/media_player_bridge.cc |
| index f07f11e3851c62c2670cfd325f5ba0741bde8771..76c9552edd65e36f75687c716b2b41e49572d9c4 100644 |
| --- a/media/base/android/media_player_bridge.cc |
| +++ b/media/base/android/media_player_bridge.cc |
| @@ -2,6 +2,7 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include <media/base/android/media_url_interceptor.h> |
|
qinmin
2014/07/24 21:05:27
remote this, the file is included below
Ignacio Solla
2014/07/25 10:35:07
Done.
|
| #include "media/base/android/media_player_bridge.h" |
| #include "base/android/jni_android.h" |
| @@ -13,6 +14,7 @@ |
| #include "jni/MediaPlayerBridge_jni.h" |
| #include "media/base/android/media_player_manager.h" |
| #include "media/base/android/media_resource_getter.h" |
| +#include "media/base/android/media_url_interceptor.h" |
| using base::android::ConvertUTF8ToJavaString; |
| using base::android::ScopedJavaLocalRef; |
| @@ -164,30 +166,44 @@ void MediaPlayerBridge::SetDataSource(const std::string& url) { |
| JNIEnv* env = base::android::AttachCurrentThread(); |
| CHECK(env); |
| - // Create a Java String for the URL. |
| - ScopedJavaLocalRef<jstring> j_url_string = ConvertUTF8ToJavaString(env, url); |
| - ScopedJavaLocalRef<jstring> j_cookies = ConvertUTF8ToJavaString( |
| - env, cookies_); |
| - ScopedJavaLocalRef<jstring> j_user_agent = ConvertUTF8ToJavaString( |
| - env, user_agent_); |
| - |
| - jobject j_context = base::android::GetApplicationContext(); |
| - DCHECK(j_context); |
| - |
| - const std::string data_uri_prefix("data:"); |
| - if (StartsWithASCII(url, data_uri_prefix, true)) { |
| - if (!Java_MediaPlayerBridge_setDataUriDataSource( |
| - env, j_media_player_bridge_.obj(), j_context, j_url_string.obj())) { |
| + media::MediaUrlInterceptor* url_interceptor = |
| + manager()->GetMediaUrlInterceptor(); |
| + int fd; |
| + int64 offset; |
| + int64 size; |
| + if (url_interceptor && url_interceptor->Intercept(url, &fd, &offset, &size)) { |
| + if (!Java_MediaPlayerBridge_setDataSourceFromFd( |
|
mnaganov (inactive)
2014/07/25 08:17:49
I recommend initializing fd, offset and size to "i
Ignacio Solla
2014/07/25 10:35:07
Done (and moved to private method to avoid duplica
|
| + env, j_media_player_bridge_.obj(), fd, offset, size)) { |
| OnMediaError(MEDIA_ERROR_FORMAT); |
| + return; |
| + } |
| + } else { |
| + // Create a Java String for the URL. |
| + ScopedJavaLocalRef<jstring> j_url_string = |
| + ConvertUTF8ToJavaString(env, url); |
| + ScopedJavaLocalRef<jstring> j_cookies = ConvertUTF8ToJavaString( |
|
qinmin
2014/07/24 21:05:27
j_cookies and j_user_agent declaration can be move
Ignacio Solla
2014/07/25 10:35:07
Done.
|
| + env, cookies_); |
| + ScopedJavaLocalRef<jstring> j_user_agent = ConvertUTF8ToJavaString( |
| + env, user_agent_); |
| + |
| + jobject j_context = base::android::GetApplicationContext(); |
| + DCHECK(j_context); |
| + |
| + const std::string data_uri_prefix("data:"); |
| + if (StartsWithASCII(url, data_uri_prefix, true)) { |
| + if (!Java_MediaPlayerBridge_setDataUriDataSource( |
| + env, j_media_player_bridge_.obj(), j_context, j_url_string.obj())) { |
| + OnMediaError(MEDIA_ERROR_FORMAT); |
| + } |
| + return; |
| } |
| - return; |
| - } |
| - if (!Java_MediaPlayerBridge_setDataSource( |
| - env, j_media_player_bridge_.obj(), j_context, j_url_string.obj(), |
| - j_cookies.obj(), j_user_agent.obj(), hide_url_log_)) { |
| - OnMediaError(MEDIA_ERROR_FORMAT); |
| - return; |
| + if (!Java_MediaPlayerBridge_setDataSource( |
| + env, j_media_player_bridge_.obj(), j_context, j_url_string.obj(), |
| + j_cookies.obj(), j_user_agent.obj(), hide_url_log_)) { |
| + OnMediaError(MEDIA_ERROR_FORMAT); |
| + return; |
| + } |
| } |
| request_media_resources_cb_.Run(player_id()); |
| @@ -228,12 +244,22 @@ void MediaPlayerBridge::OnAuthCredentialsRetrieved( |
| } |
| void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { |
| - manager()->GetMediaResourceGetter()->ExtractMediaMetadata( |
| - url, |
| - cookies_, |
| - user_agent_, |
| - base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, |
| - weak_factory_.GetWeakPtr())); |
| + media::MediaUrlInterceptor* url_interceptor = |
| + manager()->GetMediaUrlInterceptor(); |
| + int fd; |
| + int64 offset; |
| + int64 size; |
| + if (url_interceptor && url_interceptor->Intercept(url, &fd, &offset, &size)) { |
| + manager()->GetMediaResourceGetter()->ExtractMediaMetadata( |
| + fd, offset, size, |
|
mnaganov (inactive)
2014/07/25 08:17:49
nit: 'ExtractMediaMetadata' arguments alignment is
Ignacio Solla
2014/07/25 10:35:07
Done.
|
| + base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, |
| + weak_factory_.GetWeakPtr())); |
| + } else { |
| + manager()->GetMediaResourceGetter()->ExtractMediaMetadata( |
| + url, cookies_, user_agent_, |
| + base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, |
| + weak_factory_.GetWeakPtr())); |
| + } |
| } |
| void MediaPlayerBridge::OnMediaMetadataExtracted( |