| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/media/android/webmediaplayer_android.h" | 5 #include "content/renderer/media/android/webmediaplayer_android.h" |
| 6 | 6 |
| 7 #include <limits> |
| 8 |
| 7 #include "base/bind.h" | 9 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| 9 #include "base/files/file_path.h" | 11 #include "base/files/file_path.h" |
| 10 #include "base/logging.h" | 12 #include "base/logging.h" |
| 11 #include "base/metrics/histogram.h" | 13 #include "base/metrics/histogram.h" |
| 12 #include "base/strings/string_number_conversions.h" | 14 #include "base/strings/string_number_conversions.h" |
| 13 #include "cc/layers/video_layer.h" | 15 #include "cc/layers/video_layer.h" |
| 14 #include "content/renderer/media/android/proxy_media_keys.h" | 16 #include "content/renderer/media/android/proxy_media_keys.h" |
| 15 #include "content/renderer/media/android/renderer_media_player_manager.h" | 17 #include "content/renderer/media/android/renderer_media_player_manager.h" |
| 16 #include "content/renderer/media/android/webmediaplayer_proxy_android.h" | 18 #include "content/renderer/media/android/webmediaplayer_proxy_android.h" |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 // TODO(xhwang): Report an error when there is encrypted stream but EME is | 141 // TODO(xhwang): Report an error when there is encrypted stream but EME is |
| 140 // not enabled. Currently the player just doesn't start and waits for ever. | 142 // not enabled. Currently the player just doesn't start and waits for ever. |
| 141 decryptor_.reset(new ProxyDecryptor( | 143 decryptor_.reset(new ProxyDecryptor( |
| 142 #if defined(ENABLE_PEPPER_CDMS) | 144 #if defined(ENABLE_PEPPER_CDMS) |
| 143 client, | 145 client, |
| 144 frame, | 146 frame, |
| 145 #else | 147 #else |
| 146 proxy_, | 148 proxy_, |
| 147 player_id_, // TODO(xhwang): Use media_keys_id when MediaKeys are | 149 player_id_, // TODO(xhwang): Use media_keys_id when MediaKeys are |
| 148 // separated from WebMediaPlayer. | 150 // separated from WebMediaPlayer. |
| 149 #endif // defined(ENABLE_PEPPER_CDMS) | 151 #endif // defined(ENABLE_PEPPER_CDMS) |
| 150 // |decryptor_| is owned, so Unretained() is safe here. | 152 // |decryptor_| is owned, so Unretained() is safe here. |
| 151 base::Bind(&WebMediaPlayerAndroid::OnKeyAdded, base::Unretained(this)), | 153 base::Bind(&WebMediaPlayerAndroid::OnKeyAdded, base::Unretained(this)), |
| 152 base::Bind(&WebMediaPlayerAndroid::OnKeyError, base::Unretained(this)), | 154 base::Bind(&WebMediaPlayerAndroid::OnKeyError, base::Unretained(this)), |
| 153 base::Bind(&WebMediaPlayerAndroid::OnKeyMessage, | 155 base::Bind(&WebMediaPlayerAndroid::OnKeyMessage, |
| 154 base::Unretained(this)))); | 156 base::Unretained(this)))); |
| 155 } | 157 } |
| 156 } | 158 } |
| 157 | 159 |
| 158 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { | 160 WebMediaPlayerAndroid::~WebMediaPlayerAndroid() { |
| 159 SetVideoFrameProviderClient(NULL); | 161 SetVideoFrameProviderClient(NULL); |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 // content contains video. Android does not provide any function to do | 358 // content contains video. Android does not provide any function to do |
| 357 // this. | 359 // this. |
| 358 // We don't know whether the current media content has video unless | 360 // We don't know whether the current media content has video unless |
| 359 // the player is prepared. If the player is not prepared, we fall back | 361 // the player is prepared. If the player is not prepared, we fall back |
| 360 // to the mime-type. There may be no mime-type on a redirect URL. | 362 // to the mime-type. There may be no mime-type on a redirect URL. |
| 361 // In that case, we conservatively assume it contains video so that | 363 // In that case, we conservatively assume it contains video so that |
| 362 // enterfullscreen call will not fail. | 364 // enterfullscreen call will not fail. |
| 363 if (!url_.has_path()) | 365 if (!url_.has_path()) |
| 364 return false; | 366 return false; |
| 365 std::string mime; | 367 std::string mime; |
| 366 if(!net::GetMimeTypeFromFile(base::FilePath(url_.path()), &mime)) | 368 if (!net::GetMimeTypeFromFile(base::FilePath(url_.path()), &mime)) |
| 367 return true; | 369 return true; |
| 368 return mime.find("audio/") == std::string::npos; | 370 return mime.find("audio/") == std::string::npos; |
| 369 } | 371 } |
| 370 | 372 |
| 371 bool WebMediaPlayerAndroid::hasAudio() const { | 373 bool WebMediaPlayerAndroid::hasAudio() const { |
| 372 // TODO(hclam): Query status of audio and return the actual value. | 374 // TODO(hclam): Query status of audio and return the actual value. |
| 373 return true; | 375 return true; |
| 374 } | 376 } |
| 375 | 377 |
| 376 bool WebMediaPlayerAndroid::paused() const { | 378 bool WebMediaPlayerAndroid::paused() const { |
| (...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1082 if (current_key_system_.isEmpty() || key_system != current_key_system_) | 1084 if (current_key_system_.isEmpty() || key_system != current_key_system_) |
| 1083 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; | 1085 return WebMediaPlayer::MediaKeyExceptionInvalidPlayerState; |
| 1084 | 1086 |
| 1085 decryptor_->CancelKeyRequest(session_id.utf8()); | 1087 decryptor_->CancelKeyRequest(session_id.utf8()); |
| 1086 return WebMediaPlayer::MediaKeyExceptionNoError; | 1088 return WebMediaPlayer::MediaKeyExceptionNoError; |
| 1087 } | 1089 } |
| 1088 | 1090 |
| 1089 void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) { | 1091 void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) { |
| 1090 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1); | 1092 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1); |
| 1091 | 1093 |
| 1094 #if defined(GOOGLE_TV) |
| 1092 if (media_source_delegate_) | 1095 if (media_source_delegate_) |
| 1093 media_source_delegate_->NotifyKeyAdded(current_key_system_.utf8()); | 1096 media_source_delegate_->NotifyKeyAdded(current_key_system_.utf8()); |
| 1097 #endif // defined(GOOGLE_TV) |
| 1094 | 1098 |
| 1095 client_->keyAdded(current_key_system_, WebString::fromUTF8(session_id)); | 1099 client_->keyAdded(current_key_system_, WebString::fromUTF8(session_id)); |
| 1096 } | 1100 } |
| 1097 | 1101 |
| 1098 void WebMediaPlayerAndroid::OnKeyError(const std::string& session_id, | 1102 void WebMediaPlayerAndroid::OnKeyError(const std::string& session_id, |
| 1099 media::MediaKeys::KeyError error_code, | 1103 media::MediaKeys::KeyError error_code, |
| 1100 int system_code) { | 1104 int system_code) { |
| 1101 EmeUMAHistogramEnumeration(current_key_system_, "KeyError", | 1105 EmeUMAHistogramEnumeration(current_key_system_, "KeyError", |
| 1102 error_code, media::MediaKeys::kMaxKeyError); | 1106 error_code, media::MediaKeys::kMaxKeyError); |
| 1103 | 1107 |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1178 | 1182 |
| 1179 void WebMediaPlayerAndroid::exitFullscreen() { | 1183 void WebMediaPlayerAndroid::exitFullscreen() { |
| 1180 proxy_->ExitFullscreen(player_id_); | 1184 proxy_->ExitFullscreen(player_id_); |
| 1181 } | 1185 } |
| 1182 | 1186 |
| 1183 bool WebMediaPlayerAndroid::canEnterFullscreen() const { | 1187 bool WebMediaPlayerAndroid::canEnterFullscreen() const { |
| 1184 return manager_->CanEnterFullscreen(frame_); | 1188 return manager_->CanEnterFullscreen(frame_); |
| 1185 } | 1189 } |
| 1186 | 1190 |
| 1187 } // namespace content | 1191 } // namespace content |
| OLD | NEW |