Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: content/renderer/media/android/webmediaplayer_android.cc

Issue 1133033003: Eliminate MediaPlayer & MediaPlayerClient abstractions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed review comments Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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> 7 #include <limits>
8 8
9 #include "base/android/build_info.h" 9 #include "base/android/build_info.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 #include "media/base/video_frame.h" 43 #include "media/base/video_frame.h"
44 #include "media/blink/webcontentdecryptionmodule_impl.h" 44 #include "media/blink/webcontentdecryptionmodule_impl.h"
45 #include "media/blink/webmediaplayer_delegate.h" 45 #include "media/blink/webmediaplayer_delegate.h"
46 #include "media/blink/webmediaplayer_util.h" 46 #include "media/blink/webmediaplayer_util.h"
47 #include "net/base/mime_util.h" 47 #include "net/base/mime_util.h"
48 #include "third_party/WebKit/public/platform/Platform.h" 48 #include "third_party/WebKit/public/platform/Platform.h"
49 #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h" 49 #include "third_party/WebKit/public/platform/WebContentDecryptionModuleResult.h"
50 #include "third_party/WebKit/public/platform/WebEncryptedMediaTypes.h" 50 #include "third_party/WebKit/public/platform/WebEncryptedMediaTypes.h"
51 #include "third_party/WebKit/public/platform/WebGraphicsContext3DProvider.h" 51 #include "third_party/WebKit/public/platform/WebGraphicsContext3DProvider.h"
52 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" 52 #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h"
53 #include "third_party/WebKit/public/platform/WebMediaPlayerEncryptedMediaClient. h"
53 #include "third_party/WebKit/public/platform/WebString.h" 54 #include "third_party/WebKit/public/platform/WebString.h"
54 #include "third_party/WebKit/public/platform/WebURL.h" 55 #include "third_party/WebKit/public/platform/WebURL.h"
55 #include "third_party/WebKit/public/web/WebDocument.h" 56 #include "third_party/WebKit/public/web/WebDocument.h"
56 #include "third_party/WebKit/public/web/WebFrame.h" 57 #include "third_party/WebKit/public/web/WebFrame.h"
57 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" 58 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h"
58 #include "third_party/WebKit/public/web/WebSecurityOrigin.h" 59 #include "third_party/WebKit/public/web/WebSecurityOrigin.h"
59 #include "third_party/WebKit/public/web/WebView.h" 60 #include "third_party/WebKit/public/web/WebView.h"
60 #include "third_party/skia/include/core/SkCanvas.h" 61 #include "third_party/skia/include/core/SkCanvas.h"
61 #include "third_party/skia/include/core/SkPaint.h" 62 #include "third_party/skia/include/core/SkPaint.h"
62 #include "third_party/skia/include/core/SkTypeface.h" 63 #include "third_party/skia/include/core/SkTypeface.h"
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 blink::WebGraphicsContext3D* web_graphics_context_; 144 blink::WebGraphicsContext3D* web_graphics_context_;
144 }; 145 };
145 146
146 } // namespace 147 } // namespace
147 148
148 namespace content { 149 namespace content {
149 150
150 WebMediaPlayerAndroid::WebMediaPlayerAndroid( 151 WebMediaPlayerAndroid::WebMediaPlayerAndroid(
151 blink::WebFrame* frame, 152 blink::WebFrame* frame,
152 blink::WebMediaPlayerClient* client, 153 blink::WebMediaPlayerClient* client,
154 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
153 base::WeakPtr<media::WebMediaPlayerDelegate> delegate, 155 base::WeakPtr<media::WebMediaPlayerDelegate> delegate,
154 RendererMediaPlayerManager* player_manager, 156 RendererMediaPlayerManager* player_manager,
155 media::CdmFactory* cdm_factory, 157 media::CdmFactory* cdm_factory,
156 media::MediaPermission* media_permission, 158 media::MediaPermission* media_permission,
157 blink::WebContentDecryptionModule* initial_cdm, 159 blink::WebContentDecryptionModule* initial_cdm,
158 scoped_refptr<StreamTextureFactory> factory, 160 scoped_refptr<StreamTextureFactory> factory,
159 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner, 161 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner,
160 media::MediaLog* media_log) 162 media::MediaLog* media_log)
161 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)), 163 : RenderFrameObserver(RenderFrame::FromWebFrame(frame)),
162 frame_(frame), 164 frame_(frame),
163 client_(client), 165 client_(client),
166 encrypted_client_(encrypted_client),
164 delegate_(delegate), 167 delegate_(delegate),
165 buffered_(static_cast<size_t>(1)), 168 buffered_(static_cast<size_t>(1)),
166 media_task_runner_(task_runner), 169 media_task_runner_(task_runner),
167 ignore_metadata_duration_change_(false), 170 ignore_metadata_duration_change_(false),
168 pending_seek_(false), 171 pending_seek_(false),
169 seeking_(false), 172 seeking_(false),
170 did_loading_progress_(false), 173 did_loading_progress_(false),
171 player_manager_(player_manager), 174 player_manager_(player_manager),
172 cdm_factory_(cdm_factory), 175 cdm_factory_(cdm_factory),
173 media_permission_(media_permission), 176 media_permission_(media_permission),
(...skipping 1516 matching lines...) Expand 10 before | Expand all | Expand 10 after
1690 1693
1691 result.completeWithError( 1694 result.completeWithError(
1692 blink::WebContentDecryptionModuleExceptionNotSupportedError, 1695 blink::WebContentDecryptionModuleExceptionNotSupportedError,
1693 0, 1696 0,
1694 "Unable to set MediaKeys object"); 1697 "Unable to set MediaKeys object");
1695 } 1698 }
1696 1699
1697 void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) { 1700 void WebMediaPlayerAndroid::OnKeyAdded(const std::string& session_id) {
1698 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1); 1701 EmeUMAHistogramCounts(current_key_system_, "KeyAdded", 1);
1699 1702
1700 client_->keyAdded( 1703 encrypted_client_->keyAdded(
1701 WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)), 1704 WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)),
1702 WebString::fromUTF8(session_id)); 1705 WebString::fromUTF8(session_id));
1703 } 1706 }
1704 1707
1705 void WebMediaPlayerAndroid::OnKeyError(const std::string& session_id, 1708 void WebMediaPlayerAndroid::OnKeyError(const std::string& session_id,
1706 media::MediaKeys::KeyError error_code, 1709 media::MediaKeys::KeyError error_code,
1707 uint32 system_code) { 1710 uint32 system_code) {
1708 EmeUMAHistogramEnumeration(current_key_system_, "KeyError", 1711 EmeUMAHistogramEnumeration(current_key_system_, "KeyError",
1709 error_code, media::MediaKeys::kMaxKeyError); 1712 error_code, media::MediaKeys::kMaxKeyError);
1710 1713
1711 unsigned short short_system_code = 0; 1714 unsigned short short_system_code = 0;
1712 if (system_code > std::numeric_limits<unsigned short>::max()) { 1715 if (system_code > std::numeric_limits<unsigned short>::max()) {
1713 LOG(WARNING) << "system_code exceeds unsigned short limit."; 1716 LOG(WARNING) << "system_code exceeds unsigned short limit.";
1714 short_system_code = std::numeric_limits<unsigned short>::max(); 1717 short_system_code = std::numeric_limits<unsigned short>::max();
1715 } else { 1718 } else {
1716 short_system_code = static_cast<unsigned short>(system_code); 1719 short_system_code = static_cast<unsigned short>(system_code);
1717 } 1720 }
1718 1721
1719 client_->keyError( 1722 encrypted_client_->keyError(
1720 WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)), 1723 WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)),
1721 WebString::fromUTF8(session_id), 1724 WebString::fromUTF8(session_id),
1722 static_cast<blink::WebMediaPlayerClient::MediaKeyErrorCode>(error_code), 1725 static_cast<blink::WebMediaPlayerClient::MediaKeyErrorCode>(error_code),
1723 short_system_code); 1726 short_system_code);
1724 } 1727 }
1725 1728
1726 void WebMediaPlayerAndroid::OnKeyMessage(const std::string& session_id, 1729 void WebMediaPlayerAndroid::OnKeyMessage(const std::string& session_id,
1727 const std::vector<uint8>& message, 1730 const std::vector<uint8>& message,
1728 const GURL& destination_url) { 1731 const GURL& destination_url) {
1729 DCHECK(destination_url.is_empty() || destination_url.is_valid()); 1732 DCHECK(destination_url.is_empty() || destination_url.is_valid());
1730 1733
1731 client_->keyMessage( 1734 encrypted_client_->keyMessage(
1732 WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)), 1735 WebString::fromUTF8(media::GetPrefixedKeySystemName(current_key_system_)),
1733 WebString::fromUTF8(session_id), 1736 WebString::fromUTF8(session_id), message.empty() ? NULL : &message[0],
1734 message.empty() ? NULL : &message[0], 1737 message.size(), destination_url);
1735 message.size(),
1736 destination_url);
1737 } 1738 }
1738 1739
1739 void WebMediaPlayerAndroid::OnMediaSourceOpened( 1740 void WebMediaPlayerAndroid::OnMediaSourceOpened(
1740 blink::WebMediaSource* web_media_source) { 1741 blink::WebMediaSource* web_media_source) {
1741 client_->mediaSourceOpened(web_media_source); 1742 client_->mediaSourceOpened(web_media_source);
1742 } 1743 }
1743 1744
1744 void WebMediaPlayerAndroid::OnEncryptedMediaInitData( 1745 void WebMediaPlayerAndroid::OnEncryptedMediaInitData(
1745 media::EmeInitDataType init_data_type, 1746 media::EmeInitDataType init_data_type,
1746 const std::vector<uint8>& init_data) { 1747 const std::vector<uint8>& init_data) {
1747 DCHECK(main_thread_checker_.CalledOnValidThread()); 1748 DCHECK(main_thread_checker_.CalledOnValidThread());
1748 1749
1749 // Do not fire NeedKey event if encrypted media is not enabled. 1750 // Do not fire NeedKey event if encrypted media is not enabled.
1750 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() && 1751 if (!blink::WebRuntimeFeatures::isPrefixedEncryptedMediaEnabled() &&
1751 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) { 1752 !blink::WebRuntimeFeatures::isEncryptedMediaEnabled()) {
1752 return; 1753 return;
1753 } 1754 }
1754 1755
1755 UMA_HISTOGRAM_COUNTS(kMediaEme + std::string("NeedKey"), 1); 1756 UMA_HISTOGRAM_COUNTS(kMediaEme + std::string("NeedKey"), 1);
1756 1757
1757 DCHECK(init_data_type != media::EmeInitDataType::UNKNOWN); 1758 DCHECK(init_data_type != media::EmeInitDataType::UNKNOWN);
1758 DLOG_IF(WARNING, init_data_type_ != media::EmeInitDataType::UNKNOWN && 1759 DLOG_IF(WARNING, init_data_type_ != media::EmeInitDataType::UNKNOWN &&
1759 init_data_type != init_data_type_) 1760 init_data_type != init_data_type_)
1760 << "Mixed init data type not supported. The new type is ignored."; 1761 << "Mixed init data type not supported. The new type is ignored.";
1761 if (init_data_type_ == media::EmeInitDataType::UNKNOWN) 1762 if (init_data_type_ == media::EmeInitDataType::UNKNOWN)
1762 init_data_type_ = init_data_type; 1763 init_data_type_ = init_data_type;
1763 1764
1764 client_->encrypted(ConvertToWebInitDataType(init_data_type), 1765 encrypted_client_->encrypted(ConvertToWebInitDataType(init_data_type),
1765 vector_as_array(&init_data), init_data.size()); 1766 vector_as_array(&init_data), init_data.size());
1766 } 1767 }
1767 1768
1768 void WebMediaPlayerAndroid::OnWaitingForDecryptionKey() { 1769 void WebMediaPlayerAndroid::OnWaitingForDecryptionKey() {
1769 client_->didBlockPlaybackWaitingForKey(); 1770 encrypted_client_->didBlockPlaybackWaitingForKey();
1770 1771
1771 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called 1772 // TODO(jrummell): didResumePlaybackBlockedForKey() should only be called
1772 // when a key has been successfully added (e.g. OnSessionKeysChange() with 1773 // when a key has been successfully added (e.g. OnSessionKeysChange() with
1773 // |has_additional_usable_key| = true). http://crbug.com/461903 1774 // |has_additional_usable_key| = true). http://crbug.com/461903
1774 client_->didResumePlaybackBlockedForKey(); 1775 encrypted_client_->didResumePlaybackBlockedForKey();
1775 } 1776 }
1776 1777
1777 void WebMediaPlayerAndroid::OnCdmContextReady(media::CdmContext* cdm_context) { 1778 void WebMediaPlayerAndroid::OnCdmContextReady(media::CdmContext* cdm_context) {
1778 DCHECK(!cdm_context_); 1779 DCHECK(!cdm_context_);
1779 1780
1780 if (!cdm_context) { 1781 if (!cdm_context) {
1781 LOG(ERROR) << "CdmContext not available (e.g. CDM creation failed)."; 1782 LOG(ERROR) << "CdmContext not available (e.g. CDM creation failed).";
1782 return; 1783 return;
1783 } 1784 }
1784 1785
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
1865 1866
1866 bool WebMediaPlayerAndroid::IsHLSStream() const { 1867 bool WebMediaPlayerAndroid::IsHLSStream() const {
1867 std::string mime; 1868 std::string mime;
1868 GURL url = redirected_url_.is_empty() ? url_ : redirected_url_; 1869 GURL url = redirected_url_.is_empty() ? url_ : redirected_url_;
1869 if (!net::GetMimeTypeFromFile(base::FilePath(url.path()), &mime)) 1870 if (!net::GetMimeTypeFromFile(base::FilePath(url.path()), &mime))
1870 return false; 1871 return false;
1871 return !mime.compare("application/x-mpegurl"); 1872 return !mime.compare("application/x-mpegurl");
1872 } 1873 }
1873 1874
1874 } // namespace content 1875 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/android/webmediaplayer_android.h ('k') | content/renderer/render_frame_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698