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..6e7ade15e1e3d4402ed937a122727891c5960f09 100644 |
--- a/media/base/android/media_player_bridge.cc |
+++ b/media/base/android/media_player_bridge.cc |
@@ -13,6 +13,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 +165,43 @@ 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_); |
+ int fd; |
+ int64 offset; |
+ int64 size; |
+ if (InterceptMediaUrl(url, &fd, &offset, &size)) { |
+ if (!Java_MediaPlayerBridge_setDataSourceFromFd( |
+ 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); |
+ |
+ 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; |
+ } |
- jobject j_context = base::android::GetApplicationContext(); |
- DCHECK(j_context); |
+ ScopedJavaLocalRef<jstring> j_cookies = ConvertUTF8ToJavaString( |
+ env, cookies_); |
+ ScopedJavaLocalRef<jstring> j_user_agent = ConvertUTF8ToJavaString( |
+ env, user_agent_); |
- 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())) { |
+ 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; |
} |
- 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()); |
@@ -195,6 +209,25 @@ void MediaPlayerBridge::SetDataSource(const std::string& url) { |
OnMediaError(MEDIA_ERROR_FORMAT); |
} |
+bool MediaPlayerBridge::InterceptMediaUrl( |
+ const std::string& url, int* fd, int64* offset, int64* size) { |
+ // Sentinel value to check whether the output arguments have been set. |
+ const int unset_value = -1; |
mnaganov (inactive)
2014/07/29 08:40:49
kUnsetValue
Ignacio Solla
2014/07/29 09:03:52
Done.
|
+ |
+ *fd = unset_value; |
+ *offset = unset_value; |
+ *size = unset_value; |
+ media::MediaUrlInterceptor* url_interceptor = |
+ manager()->GetMediaUrlInterceptor(); |
qinmin
2014/07/28 21:16:01
-2 indent
Ignacio Solla
2014/07/29 09:03:52
Done.
|
+ if (url_interceptor && url_interceptor->Intercept(url, fd, offset, size)) { |
+ DCHECK_NE(unset_value, *fd); |
+ DCHECK_NE(unset_value, *offset); |
+ DCHECK_NE(unset_value, *size); |
+ return true; |
+ } |
+ return false; |
+} |
+ |
void MediaPlayerBridge::OnDidSetDataUriDataSource(JNIEnv* env, jobject obj, |
jboolean success) { |
if (!success) { |
@@ -228,12 +261,20 @@ void MediaPlayerBridge::OnAuthCredentialsRetrieved( |
} |
void MediaPlayerBridge::ExtractMediaMetadata(const std::string& url) { |
- manager()->GetMediaResourceGetter()->ExtractMediaMetadata( |
- url, |
- cookies_, |
- user_agent_, |
- base::Bind(&MediaPlayerBridge::OnMediaMetadataExtracted, |
- weak_factory_.GetWeakPtr())); |
+ int fd; |
+ int64 offset; |
+ int64 size; |
+ if (InterceptMediaUrl(url, &fd, &offset, &size)) { |
+ manager()->GetMediaResourceGetter()->ExtractMediaMetadata( |
+ fd, offset, size, |
+ 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( |