diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-05-20 09:47:09 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-06-07 11:15:42 +0000 |
commit | 189d4fd8fad9e3c776873be51938cd31a42b6177 (patch) | |
tree | 6497caeff5e383937996768766ab3bb2081a40b2 /chromium/media/base/android | |
parent | 8bc75099d364490b22f43a7ce366b366c08f4164 (diff) | |
download | qtwebengine-chromium-189d4fd8fad9e3c776873be51938cd31a42b6177.tar.gz |
BASELINE: Update Chromium to 90.0.4430.221
Change-Id: Iff4d9d18d2fcf1a576f3b1f453010f744a232920
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/media/base/android')
-rw-r--r-- | chromium/media/base/android/BUILD.gn | 6 | ||||
-rw-r--r-- | chromium/media/base/android/media_drm_bridge.cc | 2 | ||||
-rw-r--r-- | chromium/media/base/android/media_player_bridge.cc | 83 | ||||
-rw-r--r-- | chromium/media/base/android/media_player_bridge.h | 8 |
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_; |