summaryrefslogtreecommitdiff
path: root/chromium/media/base/android
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base/android')
-rw-r--r--chromium/media/base/android/BUILD.gn6
-rw-r--r--chromium/media/base/android/media_drm_bridge.cc2
-rw-r--r--chromium/media/base/android/media_player_bridge.cc83
-rw-r--r--chromium/media/base/android/media_player_bridge.h8
4 files changed, 74 insertions, 25 deletions
diff --git a/chromium/media/base/android/BUILD.gn b/chromium/media/base/android/BUILD.gn
index 39766b7c387..886dbbf132e 100644
--- a/chromium/media/base/android/BUILD.gn
+++ b/chromium/media/base/android/BUILD.gn
@@ -163,7 +163,7 @@ if (is_android) {
":media_java_resources",
"//base:base_java",
"//base:jni_java",
- "//third_party/android_deps:androidx_annotation_annotation_java",
+ "//third_party/androidx:androidx_annotation_annotation_java",
]
annotation_processor_deps = [ "//base/android/jni_generator:jni_processor" ]
srcjar_deps = [
@@ -198,7 +198,7 @@ if (is_android) {
android_library("display_java") {
sources = [ "java/src/org/chromium/media/DisplayCompat.java" ]
- deps = [ "//third_party/android_deps:androidx_annotation_annotation_java" ]
+ deps = [ "//third_party/androidx:androidx_annotation_annotation_java" ]
}
junit_binary("media_base_junit_tests") {
@@ -211,7 +211,7 @@ if (is_android) {
":media_java",
"//base:base_java",
"//base:base_java_test_support",
- "//third_party/android_deps:androidx_test_runner_java",
+ "//third_party/androidx:androidx_test_runner_java",
"//third_party/junit",
]
}
diff --git a/chromium/media/base/android/media_drm_bridge.cc b/chromium/media/base/android/media_drm_bridge.cc
index e5d7978a28f..182dc13ad28 100644
--- a/chromium/media/base/android/media_drm_bridge.cc
+++ b/chromium/media/base/android/media_drm_bridge.cc
@@ -914,7 +914,7 @@ MediaDrmBridge::~MediaDrmBridge() {
}
// Rejects all pending promises.
- cdm_promise_adapter_.Clear();
+ cdm_promise_adapter_.Clear(CdmPromiseAdapter::ClearReason::kDestruction);
}
MediaDrmBridge::SecurityLevel MediaDrmBridge::GetSecurityLevel() {
diff --git a/chromium/media/base/android/media_player_bridge.cc b/chromium/media/base/android/media_player_bridge.cc
index eeab111c274..41d0ab6356d 100644
--- a/chromium/media/base/android/media_player_bridge.cc
+++ b/chromium/media/base/android/media_player_bridge.cc
@@ -80,6 +80,8 @@ MediaPlayerBridge::MediaPlayerBridge(const GURL& url,
url_(url),
site_for_cookies_(site_for_cookies),
top_frame_origin_(top_frame_origin),
+ pending_retrieve_cookies_(false),
+ should_prepare_on_retrieved_cookies_(false),
user_agent_(user_agent),
hide_url_log_(hide_url_log),
width_(0),
@@ -127,6 +129,7 @@ void MediaPlayerBridge::Initialize() {
media::MediaResourceGetter* resource_getter =
client_->GetMediaResourceGetter();
+ pending_retrieve_cookies_ = true;
resource_getter->GetCookies(
url_, site_for_cookies_, top_frame_origin_,
base::BindOnce(&MediaPlayerBridge::OnCookiesRetrieved,
@@ -164,6 +167,17 @@ void MediaPlayerBridge::SetVideoSurface(gl::ScopedJavaSurface surface) {
surface_.j_surface());
}
+void MediaPlayerBridge::SetPlaybackRate(double playback_rate) {
+ if (j_media_player_bridge_.is_null())
+ return;
+
+ JNIEnv* env = base::android::AttachCurrentThread();
+ CHECK(env);
+
+ Java_MediaPlayerBridge_setPlaybackRate(env, j_media_player_bridge_,
+ playback_rate);
+}
+
void MediaPlayerBridge::Prepare() {
DCHECK(j_media_player_bridge_.is_null());
@@ -200,31 +214,52 @@ void MediaPlayerBridge::SetDataSource(const std::string& url) {
OnMediaError(MEDIA_ERROR_FORMAT);
return;
}
- } else {
- // Create a Java String for the URL.
- ScopedJavaLocalRef<jstring> j_url_string =
- ConvertUTF8ToJavaString(env, url);
-
- const std::string data_uri_prefix("data:");
- if (base::StartsWith(url, data_uri_prefix, base::CompareCase::SENSITIVE)) {
- if (!Java_MediaPlayerBridge_setDataUriDataSource(
- env, j_media_player_bridge_, j_url_string)) {
- OnMediaError(MEDIA_ERROR_FORMAT);
- }
- return;
- }
- ScopedJavaLocalRef<jstring> j_cookies = ConvertUTF8ToJavaString(
- env, cookies_);
- ScopedJavaLocalRef<jstring> j_user_agent = ConvertUTF8ToJavaString(
- env, user_agent_);
+ if (!Java_MediaPlayerBridge_prepareAsync(env, j_media_player_bridge_))
+ OnMediaError(MEDIA_ERROR_FORMAT);
+
+ return;
+ }
- if (!Java_MediaPlayerBridge_setDataSource(env, j_media_player_bridge_,
- j_url_string, j_cookies,
- j_user_agent, hide_url_log_)) {
+ // Create a Java String for the URL.
+ ScopedJavaLocalRef<jstring> j_url_string = ConvertUTF8ToJavaString(env, url);
+
+ const std::string data_uri_prefix("data:");
+ if (base::StartsWith(url, data_uri_prefix, base::CompareCase::SENSITIVE)) {
+ if (!Java_MediaPlayerBridge_setDataUriDataSource(
+ env, j_media_player_bridge_, j_url_string)) {
OnMediaError(MEDIA_ERROR_FORMAT);
- return;
}
+ return;
+ }
+
+ // Cookies may not have been retrieved yet, delay prepare until they are
+ // retrieved.
+ if (pending_retrieve_cookies_) {
+ should_prepare_on_retrieved_cookies_ = true;
+ return;
+ }
+ SetDataSourceInternal();
+}
+
+void MediaPlayerBridge::SetDataSourceInternal() {
+ DCHECK(!pending_retrieve_cookies_);
+
+ JNIEnv* env = base::android::AttachCurrentThread();
+ CHECK(env);
+
+ ScopedJavaLocalRef<jstring> j_cookies =
+ ConvertUTF8ToJavaString(env, cookies_);
+ ScopedJavaLocalRef<jstring> j_user_agent =
+ ConvertUTF8ToJavaString(env, user_agent_);
+ ScopedJavaLocalRef<jstring> j_url_string =
+ ConvertUTF8ToJavaString(env, url_.spec());
+
+ if (!Java_MediaPlayerBridge_setDataSource(env, j_media_player_bridge_,
+ j_url_string, j_cookies,
+ j_user_agent, hide_url_log_)) {
+ OnMediaError(MEDIA_ERROR_FORMAT);
+ return;
}
if (!Java_MediaPlayerBridge_prepareAsync(env, j_media_player_bridge_))
@@ -267,9 +302,15 @@ void MediaPlayerBridge::OnDidSetDataUriDataSource(
void MediaPlayerBridge::OnCookiesRetrieved(const std::string& cookies) {
cookies_ = cookies;
+ pending_retrieve_cookies_ = false;
client_->GetMediaResourceGetter()->GetAuthCredentials(
url_, base::BindOnce(&MediaPlayerBridge::OnAuthCredentialsRetrieved,
weak_factory_.GetWeakPtr()));
+
+ if (should_prepare_on_retrieved_cookies_) {
+ SetDataSourceInternal();
+ should_prepare_on_retrieved_cookies_ = false;
+ }
}
void MediaPlayerBridge::OnAuthCredentialsRetrieved(
diff --git a/chromium/media/base/android/media_player_bridge.h b/chromium/media/base/android/media_player_bridge.h
index 8757e09b24a..52648721aa1 100644
--- a/chromium/media/base/android/media_player_bridge.h
+++ b/chromium/media/base/android/media_player_bridge.h
@@ -92,6 +92,7 @@ class MEDIA_EXPORT MediaPlayerBridge {
// Methods to partially expose the underlying MediaPlayer.
void SetVideoSurface(gl::ScopedJavaSurface surface);
+ void SetPlaybackRate(double playback_rate);
void Pause();
void SeekTo(base::TimeDelta timestamp);
base::TimeDelta GetCurrentTime();
@@ -153,6 +154,7 @@ class MEDIA_EXPORT MediaPlayerBridge {
// Set the data source for the media player.
void SetDataSource(const std::string& url);
+ void SetDataSourceInternal();
// Functions that implements media player control.
void StartInternal();
@@ -220,6 +222,12 @@ class MEDIA_EXPORT MediaPlayerBridge {
// Used to check for cookie content settings.
url::Origin top_frame_origin_;
+ // Waiting to retrieve cookies for |url_|.
+ bool pending_retrieve_cookies_;
+
+ // Whether to prepare after cookies retrieved.
+ bool should_prepare_on_retrieved_cookies_;
+
// User agent string to be used for media player.
const std::string user_agent_;