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

Side by Side Diff: content/renderer/media/crypto/ppapi_decryptor.cc

Issue 985113003: Block platform verification and file IO in the CDM adapter if the CDM configuration disallows them. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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/crypto/ppapi_decryptor.h" 5 #include "content/renderer/media/crypto/ppapi_decryptor.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/message_loop/message_loop.h" 11 #include "base/message_loop/message_loop.h"
12 #include "base/message_loop/message_loop_proxy.h" 12 #include "base/message_loop/message_loop_proxy.h"
13 #include "content/renderer/pepper/content_decryptor_delegate.h" 13 #include "content/renderer/pepper/content_decryptor_delegate.h"
14 #include "content/renderer/pepper/pepper_plugin_instance_impl.h" 14 #include "content/renderer/pepper/pepper_plugin_instance_impl.h"
15 #include "media/base/audio_decoder_config.h" 15 #include "media/base/audio_decoder_config.h"
16 #include "media/base/cdm_key_information.h" 16 #include "media/base/cdm_key_information.h"
17 #include "media/base/data_buffer.h" 17 #include "media/base/data_buffer.h"
18 #include "media/base/decoder_buffer.h" 18 #include "media/base/decoder_buffer.h"
19 #include "media/base/key_systems.h" 19 #include "media/base/key_systems.h"
20 #include "media/base/video_decoder_config.h" 20 #include "media/base/video_decoder_config.h"
21 #include "media/base/video_frame.h" 21 #include "media/base/video_frame.h"
22 22
23 namespace content { 23 namespace content {
24 24
25 scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create( 25 scoped_ptr<PpapiDecryptor> PpapiDecryptor::Create(
26 const std::string& key_system, 26 const std::string& key_system,
27 bool allow_distinctive_identifier,
ddorwin 2015/03/06 21:42:54 Lots of passing lots of parameters around. We migh
sandersd (OOO until July 31) 2015/03/06 22:36:58 Acknowledged.
28 bool allow_persistent_state,
27 const GURL& security_origin, 29 const GURL& security_origin,
28 const CreatePepperCdmCB& create_pepper_cdm_cb, 30 const CreatePepperCdmCB& create_pepper_cdm_cb,
29 const media::SessionMessageCB& session_message_cb, 31 const media::SessionMessageCB& session_message_cb,
30 const media::SessionClosedCB& session_closed_cb, 32 const media::SessionClosedCB& session_closed_cb,
31 const media::SessionErrorCB& session_error_cb, 33 const media::SessionErrorCB& session_error_cb,
32 const media::SessionKeysChangeCB& session_keys_change_cb, 34 const media::SessionKeysChangeCB& session_keys_change_cb,
33 const media::SessionExpirationUpdateCB& session_expiration_update_cb) { 35 const media::SessionExpirationUpdateCB& session_expiration_update_cb) {
34 std::string plugin_type = media::GetPepperType(key_system); 36 std::string plugin_type = media::GetPepperType(key_system);
35 DCHECK(!plugin_type.empty()); 37 DCHECK(!plugin_type.empty());
36 scoped_ptr<PepperCdmWrapper> pepper_cdm_wrapper = 38 scoped_ptr<PepperCdmWrapper> pepper_cdm_wrapper =
37 create_pepper_cdm_cb.Run(plugin_type, security_origin); 39 create_pepper_cdm_cb.Run(plugin_type, security_origin);
38 if (!pepper_cdm_wrapper) { 40 if (!pepper_cdm_wrapper) {
39 DLOG(ERROR) << "Plugin instance creation failed."; 41 DLOG(ERROR) << "Plugin instance creation failed.";
40 return scoped_ptr<PpapiDecryptor>(); 42 return scoped_ptr<PpapiDecryptor>();
41 } 43 }
42 44
43 return scoped_ptr<PpapiDecryptor>( 45 return scoped_ptr<PpapiDecryptor>(
44 new PpapiDecryptor(key_system, 46 new PpapiDecryptor(key_system,
47 allow_distinctive_identifier,
48 allow_persistent_state,
45 pepper_cdm_wrapper.Pass(), 49 pepper_cdm_wrapper.Pass(),
46 session_message_cb, 50 session_message_cb,
47 session_closed_cb, 51 session_closed_cb,
48 session_error_cb, 52 session_error_cb,
49 session_keys_change_cb, 53 session_keys_change_cb,
50 session_expiration_update_cb)); 54 session_expiration_update_cb));
51 } 55 }
52 56
53 PpapiDecryptor::PpapiDecryptor( 57 PpapiDecryptor::PpapiDecryptor(
54 const std::string& key_system, 58 const std::string& key_system,
59 bool allow_distinctive_identifier,
60 bool allow_persistent_state,
55 scoped_ptr<PepperCdmWrapper> pepper_cdm_wrapper, 61 scoped_ptr<PepperCdmWrapper> pepper_cdm_wrapper,
56 const media::SessionMessageCB& session_message_cb, 62 const media::SessionMessageCB& session_message_cb,
57 const media::SessionClosedCB& session_closed_cb, 63 const media::SessionClosedCB& session_closed_cb,
58 const media::SessionErrorCB& session_error_cb, 64 const media::SessionErrorCB& session_error_cb,
59 const media::SessionKeysChangeCB& session_keys_change_cb, 65 const media::SessionKeysChangeCB& session_keys_change_cb,
60 const media::SessionExpirationUpdateCB& session_expiration_update_cb) 66 const media::SessionExpirationUpdateCB& session_expiration_update_cb)
61 : pepper_cdm_wrapper_(pepper_cdm_wrapper.Pass()), 67 : pepper_cdm_wrapper_(pepper_cdm_wrapper.Pass()),
62 session_message_cb_(session_message_cb), 68 session_message_cb_(session_message_cb),
63 session_closed_cb_(session_closed_cb), 69 session_closed_cb_(session_closed_cb),
64 session_error_cb_(session_error_cb), 70 session_error_cb_(session_error_cb),
65 session_keys_change_cb_(session_keys_change_cb), 71 session_keys_change_cb_(session_keys_change_cb),
66 session_expiration_update_cb_(session_expiration_update_cb), 72 session_expiration_update_cb_(session_expiration_update_cb),
67 render_loop_proxy_(base::MessageLoopProxy::current()), 73 render_loop_proxy_(base::MessageLoopProxy::current()),
68 weak_ptr_factory_(this) { 74 weak_ptr_factory_(this) {
69 DCHECK(pepper_cdm_wrapper_.get()); 75 DCHECK(pepper_cdm_wrapper_.get());
70 DCHECK(!session_message_cb_.is_null()); 76 DCHECK(!session_message_cb_.is_null());
71 DCHECK(!session_closed_cb_.is_null()); 77 DCHECK(!session_closed_cb_.is_null());
72 DCHECK(!session_error_cb_.is_null()); 78 DCHECK(!session_error_cb_.is_null());
73 DCHECK(!session_keys_change_cb.is_null()); 79 DCHECK(!session_keys_change_cb.is_null());
74 DCHECK(!session_expiration_update_cb.is_null()); 80 DCHECK(!session_expiration_update_cb.is_null());
75 81
76 base::WeakPtr<PpapiDecryptor> weak_this = weak_ptr_factory_.GetWeakPtr(); 82 base::WeakPtr<PpapiDecryptor> weak_this = weak_ptr_factory_.GetWeakPtr();
77 CdmDelegate()->Initialize( 83 CdmDelegate()->Initialize(
78 key_system, 84 key_system,
85 allow_distinctive_identifier,
86 allow_persistent_state,
79 base::Bind(&PpapiDecryptor::OnSessionMessage, weak_this), 87 base::Bind(&PpapiDecryptor::OnSessionMessage, weak_this),
80 base::Bind(&PpapiDecryptor::OnSessionClosed, weak_this), 88 base::Bind(&PpapiDecryptor::OnSessionClosed, weak_this),
81 base::Bind(&PpapiDecryptor::OnSessionError, weak_this), 89 base::Bind(&PpapiDecryptor::OnSessionError, weak_this),
82 base::Bind(&PpapiDecryptor::OnSessionKeysChange, weak_this), 90 base::Bind(&PpapiDecryptor::OnSessionKeysChange, weak_this),
83 base::Bind(&PpapiDecryptor::OnSessionExpirationUpdate, weak_this), 91 base::Bind(&PpapiDecryptor::OnSessionExpirationUpdate, weak_this),
84 base::Bind(&PpapiDecryptor::OnFatalPluginError, weak_this)); 92 base::Bind(&PpapiDecryptor::OnFatalPluginError, weak_this));
85 } 93 }
86 94
87 PpapiDecryptor::~PpapiDecryptor() { 95 PpapiDecryptor::~PpapiDecryptor() {
88 pepper_cdm_wrapper_.reset(); 96 pepper_cdm_wrapper_.reset();
(...skipping 353 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); 450 DCHECK(render_loop_proxy_->BelongsToCurrentThread());
443 pepper_cdm_wrapper_.reset(); 451 pepper_cdm_wrapper_.reset();
444 } 452 }
445 453
446 ContentDecryptorDelegate* PpapiDecryptor::CdmDelegate() { 454 ContentDecryptorDelegate* PpapiDecryptor::CdmDelegate() {
447 DCHECK(render_loop_proxy_->BelongsToCurrentThread()); 455 DCHECK(render_loop_proxy_->BelongsToCurrentThread());
448 return (pepper_cdm_wrapper_) ? pepper_cdm_wrapper_->GetCdmDelegate() : NULL; 456 return (pepper_cdm_wrapper_) ? pepper_cdm_wrapper_->GetCdmDelegate() : NULL;
449 } 457 }
450 458
451 } // namespace content 459 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698