Chromium Code Reviews| Index: content/renderer/media/android/webmediaplayer_android.cc |
| diff --git a/content/renderer/media/android/webmediaplayer_android.cc b/content/renderer/media/android/webmediaplayer_android.cc |
| index 2a050c56e35e7c163aa90e5be92851824a0c92cd..c466a103db04e008ae31ba85d02f6418a42e49d7 100644 |
| --- a/content/renderer/media/android/webmediaplayer_android.cc |
| +++ b/content/renderer/media/android/webmediaplayer_android.cc |
| @@ -6,6 +6,7 @@ |
| #include <limits> |
| +#include "base/android/build_info.h" |
| #include "base/bind.h" |
| #include "base/callback_helpers.h" |
| #include "base/command_line.h" |
| @@ -55,6 +56,7 @@ |
| #include "ui/gfx/image/image.h" |
| static const uint32 kGLTextureExternalOES = 0x8D65; |
| +static const int kSDKVersionToSupportSecurityOriginCheck = 20; |
| using blink::WebMediaPlayer; |
| using blink::WebSize; |
| @@ -138,6 +140,7 @@ WebMediaPlayerAndroid::WebMediaPlayerAndroid( |
| is_remote_(false), |
| media_log_(media_log), |
| web_cdm_(NULL), |
| + allow_stored_credentials_(false), |
| weak_factory_(this) { |
| DCHECK(player_manager_); |
| DCHECK(cdm_manager_); |
| @@ -231,7 +234,8 @@ void WebMediaPlayerAndroid::load(LoadType load_type, |
| weak_factory_.GetWeakPtr()), |
| base::Bind(&WebMediaPlayerAndroid::OnDurationChanged, |
| weak_factory_.GetWeakPtr())); |
| - InitializePlayer(demuxer_client_id); |
| + InitializePlayer(url_, frame_->document().firstPartyForCookies(), |
| + true, demuxer_client_id); |
| } |
| } else { |
| info_loader_.reset( |
| @@ -240,11 +244,6 @@ void WebMediaPlayerAndroid::load(LoadType load_type, |
| cors_mode, |
| base::Bind(&WebMediaPlayerAndroid::DidLoadMediaInfo, |
| weak_factory_.GetWeakPtr()))); |
| - // TODO(qinmin): The url might be redirected when android media player |
| - // requests the stream. As a result, we cannot guarantee there is only |
| - // a single origin. Remove the following line when b/12573548 is fixed. |
| - // Check http://crbug.com/334204. |
| - info_loader_->set_single_origin(false); |
| info_loader_->Start(frame_); |
| } |
| @@ -252,7 +251,11 @@ void WebMediaPlayerAndroid::load(LoadType load_type, |
| UpdateReadyState(WebMediaPlayer::ReadyStateHaveNothing); |
| } |
| -void WebMediaPlayerAndroid::DidLoadMediaInfo(MediaInfoLoader::Status status) { |
| +void WebMediaPlayerAndroid::DidLoadMediaInfo( |
| + MediaInfoLoader::Status status, |
| + const GURL& redirected_url, |
| + const GURL& first_party_for_cookies, |
| + bool allow_stored_credentials) { |
| DCHECK(!media_source_delegate_); |
| if (status == MediaInfoLoader::kFailed) { |
| info_loader_.reset(); |
| @@ -260,7 +263,8 @@ void WebMediaPlayerAndroid::DidLoadMediaInfo(MediaInfoLoader::Status status) { |
| return; |
| } |
| - InitializePlayer(0); |
| + InitializePlayer( |
| + redirected_url, first_party_for_cookies, allow_stored_credentials, 0); |
| UpdateNetworkState(WebMediaPlayer::NetworkStateIdle); |
| } |
| @@ -602,12 +606,23 @@ bool WebMediaPlayerAndroid::copyVideoTextureToPlatformTexture( |
| } |
| bool WebMediaPlayerAndroid::hasSingleSecurityOrigin() const { |
| - if (info_loader_) |
| - return info_loader_->HasSingleOrigin(); |
| - // The info loader may have failed. |
| - if (player_type_ == MEDIA_PLAYER_TYPE_URL) |
| + if (player_type_ != MEDIA_PLAYER_TYPE_URL) |
| + return true; |
| + |
| + if (!info_loader_ || !info_loader_->HasSingleOrigin()) |
| return false; |
| - return true; |
| + |
| + // TODO(qinmin): The url might be redirected when android media player |
| + // requests the stream. As a result, we cannot guarantee there is only |
| + // a single origin. Only if the HTTP request was made without credentials, |
| + // we will honor the return value from HasSingleSecurityOriginInternal() |
| + // in pre-L android versions. |
| + // Check http://crbug.com/334204. |
| + if (!allow_stored_credentials_) |
| + return true; |
| + |
| + return base::android::BuildInfo::GetInstance()->sdk_int() >= |
| + kSDKVersionToSupportSecurityOriginCheck; |
|
dshwang
2014/08/11 08:01:33
This method allows SSO for systems >=L although th
dshwang
2014/08/15 09:25:55
This CL makes WebGL more restricted on systems <K,
|
| } |
| bool WebMediaPlayerAndroid::didPassCORSAccessCheck() const { |
| @@ -937,11 +952,14 @@ void WebMediaPlayerAndroid::OnDestruct() { |
| } |
| void WebMediaPlayerAndroid::InitializePlayer( |
| + const GURL& url, |
| + const GURL& first_party_for_cookies, |
| + bool allow_stored_credentials, |
| int demuxer_client_id) { |
| - GURL first_party_url = frame_->document().firstPartyForCookies(); |
| + allow_stored_credentials_ = allow_stored_credentials; |
| player_manager_->Initialize( |
| - player_type_, player_id_, url_, first_party_url, demuxer_client_id, |
| - frame_->document().url()); |
| + player_type_, player_id_, url, first_party_for_cookies, demuxer_client_id, |
| + frame_->document().url(), allow_stored_credentials); |
| if (player_manager_->ShouldEnterFullscreen(frame_)) |
| player_manager_->EnterFullscreen(player_id_, frame_); |
| } |