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

Side by Side Diff: webkit/plugins/ppapi/ppapi_plugin_instance.cc

Issue 10836038: Call CDMWrapper from PpapiDecryptor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add PP_DecryptionBuffer_Dev and update Decrypt() PPP call. Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "webkit/plugins/ppapi/ppapi_plugin_instance.h" 5 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
6 6
7 #include <utility>
8
7 #include "base/bind.h" 9 #include "base/bind.h"
8 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 11 #include "base/logging.h"
10 #include "base/memory/linked_ptr.h" 12 #include "base/memory/linked_ptr.h"
11 #include "base/message_loop.h" 13 #include "base/message_loop.h"
14 #include "base/stl_util.h"
12 #include "base/stringprintf.h" 15 #include "base/stringprintf.h"
13 #include "base/time.h" 16 #include "base/time.h"
14 #include "base/utf_offset_string_conversions.h" 17 #include "base/utf_offset_string_conversions.h"
15 #include "base/utf_string_conversions.h" 18 #include "base/utf_string_conversions.h"
19 #include "media/base/decoder_buffer.h"
20 #include "media/base/decryptor_client.h"
21 #include "ppapi/c/dev/pp_decryption_buffer_dev.h"
16 #include "ppapi/c/dev/ppb_find_dev.h" 22 #include "ppapi/c/dev/ppb_find_dev.h"
17 #include "ppapi/c/dev/ppb_zoom_dev.h" 23 #include "ppapi/c/dev/ppb_zoom_dev.h"
18 #include "ppapi/c/dev/ppp_find_dev.h" 24 #include "ppapi/c/dev/ppp_find_dev.h"
19 #include "ppapi/c/dev/ppp_selection_dev.h" 25 #include "ppapi/c/dev/ppp_selection_dev.h"
20 #include "ppapi/c/dev/ppp_text_input_dev.h" 26 #include "ppapi/c/dev/ppp_text_input_dev.h"
21 #include "ppapi/c/dev/ppp_zoom_dev.h" 27 #include "ppapi/c/dev/ppp_zoom_dev.h"
22 #include "ppapi/c/pp_rect.h" 28 #include "ppapi/c/pp_rect.h"
23 #include "ppapi/c/ppb_audio_config.h" 29 #include "ppapi/c/ppb_audio_config.h"
24 #include "ppapi/c/ppb_core.h" 30 #include "ppapi/c/ppb_core.h"
25 #include "ppapi/c/ppb_gamepad.h" 31 #include "ppapi/c/ppb_gamepad.h"
26 #include "ppapi/c/ppp_input_event.h" 32 #include "ppapi/c/ppp_input_event.h"
27 #include "ppapi/c/ppp_instance.h" 33 #include "ppapi/c/ppp_instance.h"
28 #include "ppapi/c/ppp_messaging.h" 34 #include "ppapi/c/ppp_messaging.h"
29 #include "ppapi/c/ppp_mouse_lock.h" 35 #include "ppapi/c/ppp_mouse_lock.h"
30 #include "ppapi/c/private/ppp_instance_private.h" 36 #include "ppapi/c/private/ppp_instance_private.h"
31 #include "ppapi/shared_impl/ppb_input_event_shared.h" 37 #include "ppapi/shared_impl/ppb_input_event_shared.h"
32 #include "ppapi/shared_impl/ppb_url_util_shared.h" 38 #include "ppapi/shared_impl/ppb_url_util_shared.h"
39 #include "ppapi/shared_impl/ppb_var_shared.h"
33 #include "ppapi/shared_impl/ppb_view_shared.h" 40 #include "ppapi/shared_impl/ppb_view_shared.h"
34 #include "ppapi/shared_impl/ppp_instance_combined.h" 41 #include "ppapi/shared_impl/ppp_instance_combined.h"
35 #include "ppapi/shared_impl/resource.h" 42 #include "ppapi/shared_impl/resource.h"
36 #include "ppapi/shared_impl/scoped_pp_resource.h" 43 #include "ppapi/shared_impl/scoped_pp_resource.h"
37 #include "ppapi/shared_impl/time_conversion.h" 44 #include "ppapi/shared_impl/time_conversion.h"
38 #include "ppapi/shared_impl/var.h" 45 #include "ppapi/shared_impl/var.h"
39 #include "ppapi/thunk/enter.h" 46 #include "ppapi/thunk/enter.h"
40 #include "ppapi/thunk/ppb_buffer_api.h" 47 #include "ppapi/thunk/ppb_buffer_api.h"
41 #include "printing/units.h" 48 #include "printing/units.h"
42 #include "third_party/skia/include/core/SkCanvas.h" 49 #include "third_party/skia/include/core/SkCanvas.h"
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 scoped_array<const char*> array(new const char*[vector.size()]); 298 scoped_array<const char*> array(new const char*[vector.size()]);
292 for (size_t i = 0; i < vector.size(); ++i) 299 for (size_t i = 0; i < vector.size(); ++i)
293 array[i] = vector[i].c_str(); 300 array[i] = vector[i].c_str();
294 return array.Pass(); 301 return array.Pass();
295 } 302 }
296 303
297 // Creates a PP_Resource containing a PPB_Buffer_Impl, copies |data| into the 304 // Creates a PP_Resource containing a PPB_Buffer_Impl, copies |data| into the
298 // buffer resource, and returns it. Returns a PP_Resource equal to 0 on 305 // buffer resource, and returns it. Returns a PP_Resource equal to 0 on
299 // failure. 306 // failure.
300 PP_Resource MakeBufferResource(PP_Instance instance, 307 PP_Resource MakeBufferResource(PP_Instance instance,
301 const std::string& data) { 308 const char* data, size_t size) {
302 if (data.empty()) 309 if (!data)
303 return 0; 310 return 0;
304 311
305 ScopedPPResource resource(PPB_Buffer_Impl::Create(instance, data.size())); 312 ScopedPPResource resource(PPB_Buffer_Impl::Create(instance, size));
306 if (!resource.get()) 313 if (!resource.get())
307 return 0; 314 return 0;
308 315
309 EnterResourceNoLock<PPB_Buffer_API> enter(resource, true); 316 EnterResourceNoLock<PPB_Buffer_API> enter(resource, true);
310 if (enter.failed()) 317 if (enter.failed())
311 return 0; 318 return 0;
312 319
313 BufferAutoMapper mapper(enter.object()); 320 BufferAutoMapper mapper(enter.object());
314 if (!mapper.data() || mapper.size() < data.size()) 321 if (!mapper.data() || mapper.size() < size)
315 return 0; 322 return 0;
316 memcpy(mapper.data(), data.data(), data.size()); 323 memcpy(mapper.data(), data, size);
317 324
318 // Add the resource to the tracker... 325 // Add the resource to the tracker...
319 // TODO(tomfinegan): wild guess/no idea if this is right. 326 // TODO(tomfinegan): wild guess/no idea if this is right.
320 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource.get()); 327 PpapiGlobals::Get()->GetResourceTracker()->AddRefResource(resource.get());
321 328
322 return resource.Release(); 329 return resource.Release();
323 } 330 }
324 331
325 } // namespace 332 } // namespace
326 333
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 sad_plugin_(NULL), 380 sad_plugin_(NULL),
374 input_event_mask_(0), 381 input_event_mask_(0),
375 filtered_input_event_mask_(0), 382 filtered_input_event_mask_(0),
376 text_input_type_(kPluginDefaultTextInputType), 383 text_input_type_(kPluginDefaultTextInputType),
377 text_input_caret_(0, 0, 0, 0), 384 text_input_caret_(0, 0, 0, 0),
378 text_input_caret_bounds_(0, 0, 0, 0), 385 text_input_caret_bounds_(0, 0, 0, 0),
379 text_input_caret_set_(false), 386 text_input_caret_set_(false),
380 selection_caret_(0), 387 selection_caret_(0),
381 selection_anchor_(0), 388 selection_anchor_(0),
382 pending_user_gesture_(0.0), 389 pending_user_gesture_(0.0),
383 flash_impl_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) { 390 flash_impl_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
391 decryptor_client_(NULL),
392 next_decryption_buffer_id_(0) {
384 pp_instance_ = HostGlobals::Get()->AddInstance(this); 393 pp_instance_ = HostGlobals::Get()->AddInstance(this);
385 394
386 memset(&current_print_settings_, 0, sizeof(current_print_settings_)); 395 memset(&current_print_settings_, 0, sizeof(current_print_settings_));
387 DCHECK(delegate); 396 DCHECK(delegate);
388 module_->InstanceCreated(this); 397 module_->InstanceCreated(this);
389 delegate_->InstanceCreated(this); 398 delegate_->InstanceCreated(this);
390 message_channel_.reset(new MessageChannel(this)); 399 message_channel_.reset(new MessageChannel(this));
391 400
392 view_data_.is_page_visible = delegate->IsPageVisible(); 401 view_data_.is_page_visible = delegate->IsPageVisible();
393 402
(...skipping 916 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 if (!LoadPdfInterface()) 1319 if (!LoadPdfInterface())
1311 return; 1320 return;
1312 PP_PrivatePageTransformType transform_type = 1321 PP_PrivatePageTransformType transform_type =
1313 type == WebPlugin::RotationType90Clockwise ? 1322 type == WebPlugin::RotationType90Clockwise ?
1314 PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW : 1323 PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CW :
1315 PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW; 1324 PP_PRIVATEPAGETRANSFORMTYPE_ROTATE_90_CCW;
1316 plugin_pdf_interface_->Transform(pp_instance(), transform_type); 1325 plugin_pdf_interface_->Transform(pp_instance(), transform_type);
1317 // NOTE: plugin instance may have been deleted. 1326 // NOTE: plugin instance may have been deleted.
1318 } 1327 }
1319 1328
1329 void PluginInstance::SetDecryptClient(
1330 media::DecryptorClient* decryptor_client) {
1331 DCHECK(decryptor_client);
1332 decryptor_client_ = decryptor_client;
1333 }
1334
1320 bool PluginInstance::GenerateKeyRequest(const std::string& key_system, 1335 bool PluginInstance::GenerateKeyRequest(const std::string& key_system,
1321 const std::string& init_data) { 1336 const std::string& init_data) {
1322 if (!LoadContentDecryptionModuleInterface()) 1337 if (!LoadContentDecryptionModuleInterface())
1323 return false; 1338 return false;
1324 1339
1325 if (key_system.empty()) 1340 if (key_system.empty())
1326 return false; 1341 return false;
1327 1342
1328 PP_Resource init_data_resource = 0; 1343 PP_Resource init_data_resource = 0;
1329 if (init_data.size()) { 1344 if (init_data.size()) {
1330 ScopedPPResource local_init_data(ScopedPPResource::PassRef(), 1345 ScopedPPResource local_init_data(ScopedPPResource::PassRef(),
1331 MakeBufferResource(pp_instance(), 1346 MakeBufferResource(pp_instance(),
1332 init_data)); 1347 init_data.data(),
1348 init_data.size()));
1333 1349
1334 if (!local_init_data.get()) 1350 if (!local_init_data.get())
1335 return false; 1351 return false;
1336 init_data_resource = local_init_data.Release(); 1352 init_data_resource = local_init_data.Release();
1337 } 1353 }
1338 1354
1339 return PP_ToBool(plugin_decryption_interface_->GenerateKeyRequest( 1355 return PP_ToBool(plugin_decryption_interface_->GenerateKeyRequest(
1340 pp_instance(), 1356 pp_instance(),
1341 StringVar::StringToPPVar(key_system), 1357 StringVar::StringToPPVar(key_system),
1342 init_data_resource)); 1358 init_data_resource));
1343 } 1359 }
1344 1360
1345 bool PluginInstance::AddKey(const std::string& session_id, 1361 bool PluginInstance::AddKey(const std::string& session_id,
1346 const std::string& key) { 1362 const std::string& key) {
1347 if (!LoadContentDecryptionModuleInterface()) 1363 if (!LoadContentDecryptionModuleInterface())
1348 return false; 1364 return false;
1349 1365
1350 StringVar session_id_var(session_id); 1366 StringVar session_id_var(session_id);
1351 if (session_id_var.value().size() < session_id.size()) 1367 if (session_id_var.value().size() < session_id.size())
1352 return false; 1368 return false;
1353 1369
1354 ScopedPPResource key_resource(ScopedPPResource::PassRef(), 1370 ScopedPPResource key_resource(ScopedPPResource::PassRef(),
1355 MakeBufferResource(pp_instance(), key)); 1371 MakeBufferResource(pp_instance(),
1372 key.data(),
1373 key.size()));
1356 if (!key_resource.get()) 1374 if (!key_resource.get())
1357 return false; 1375 return false;
1358 1376
1359 return PP_ToBool(plugin_decryption_interface_->AddKey( 1377 return PP_ToBool(plugin_decryption_interface_->AddKey(
1360 pp_instance(), 1378 pp_instance(),
1361 session_id_var.GetPPVar(), 1379 session_id_var.GetPPVar(),
1362 key_resource)); 1380 key_resource));
1363 } 1381 }
1364 1382
1365 bool PluginInstance::CancelKeyRequest(const std::string& session_id) { 1383 bool PluginInstance::CancelKeyRequest(const std::string& session_id) {
1366 if (!LoadContentDecryptionModuleInterface()) 1384 if (!LoadContentDecryptionModuleInterface())
1367 return false; 1385 return false;
1368 StringVar session_id_var(session_id); 1386 StringVar session_id_var(session_id);
1369 if (session_id_var.value().size() < session_id.size()) 1387 if (session_id_var.value().size() < session_id.size())
1370 return false; 1388 return false;
1371 return PP_ToBool(plugin_decryption_interface_->CancelKeyRequest( 1389 return PP_ToBool(plugin_decryption_interface_->CancelKeyRequest(
1372 pp_instance(), 1390 pp_instance(),
1373 session_id_var.GetPPVar())); 1391 session_id_var.GetPPVar()));
1374 } 1392 }
1375 1393
1376 bool PluginInstance::Decrypt(const std::string& encrypted_block, 1394 bool PluginInstance::Decrypt(
1377 const CDMStatusCB& callback) { 1395 const scoped_refptr<media::DecoderBuffer>& encrypted_buffer,
1396 const CDMStatusCB& callback) {
1378 if (!LoadContentDecryptionModuleInterface()) 1397 if (!LoadContentDecryptionModuleInterface())
1379 return false; 1398 return false;
1380 ScopedPPResource encrypted_resource(ScopedPPResource::PassRef(), 1399
1381 MakeBufferResource(pp_instance(), 1400 DCHECK(encrypted_buffer->GetDecryptConfig());
1382 encrypted_block)); 1401 DCHECK(encrypted_buffer->GetData());
1402 DCHECK_GT(encrypted_buffer->GetDataSize(), 0);
1403 ScopedPPResource encrypted_resource(
1404 ScopedPPResource::PassRef(),
1405 MakeBufferResource(
1406 pp_instance(),
1407 reinterpret_cast<const char*>(encrypted_buffer->GetData()),
1408 encrypted_buffer->GetDataSize()));
1409
1383 if (!encrypted_resource.get()) 1410 if (!encrypted_resource.get())
1384 return false; 1411 return false;
1385 // TODO(tomfinegan): wrap callback in PP_CompletionCallback and pass it to 1412 // TODO(tomfinegan): wrap callback in PP_CompletionCallback and pass it to
1386 // the plugin. 1413 // the plugin.
1387 PP_CompletionCallback pp_callback = {NULL, NULL, 0}; 1414
1415 const media::DecryptConfig& decrypt_config =
1416 *encrypted_buffer->GetDecryptConfig();
1417
1418 uint64_t buffer_id = next_decryption_buffer_id_++;
1419 DCHECK(!ContainsKey(cdm_status_cb_map_, buffer_id));
1420 cdm_status_cb_map_.insert(std::make_pair(buffer_id, callback));
1421
1422 PP_DecryptionBuffer_Dev buffer;
1423 buffer.data = encrypted_resource;
1424 buffer.data_offset = decrypt_config.data_offset();
1425 buffer.id = buffer_id;
1426 // TODO(xhwang): Fill all fields here.
1427
1388 return PP_ToBool(plugin_decryption_interface_->Decrypt(pp_instance(), 1428 return PP_ToBool(plugin_decryption_interface_->Decrypt(pp_instance(),
1389 encrypted_resource, 1429 &buffer));
1390 pp_callback));
1391 } 1430 }
1392 1431
1393 bool PluginInstance::DecryptAndDecode(const std::string& encrypted_block, 1432 bool PluginInstance::DecryptAndDecode(const std::string& encrypted_block,
1394 const CDMStatusCB& callback) { 1433 const CDMStatusCB& callback) {
1395 if (!LoadContentDecryptionModuleInterface()) 1434 if (!LoadContentDecryptionModuleInterface())
1396 return false; 1435 return false;
1397 ScopedPPResource encrypted_resource(ScopedPPResource::PassRef(), 1436 ScopedPPResource encrypted_resource(
1398 MakeBufferResource(pp_instance(), 1437 ScopedPPResource::PassRef(),
1399 encrypted_block)); 1438 MakeBufferResource(pp_instance(),
1439 encrypted_block.data(), encrypted_block.size()));
1400 if (!encrypted_resource.get()) 1440 if (!encrypted_resource.get())
1401 return false; 1441 return false;
1402 // TODO(tomfinegan): wrap callback in PP_CompletionCallback and pass it to 1442 // TODO(tomfinegan): wrap callback in PP_CompletionCallback and pass it to
1403 // the plugin. 1443 // the plugin.
1404 PP_CompletionCallback pp_callback = {NULL, NULL, 0}; 1444 PP_CompletionCallback pp_callback = {NULL, NULL, 0};
1405 return PP_ToBool(plugin_decryption_interface_->DecryptAndDecode( 1445 return PP_ToBool(plugin_decryption_interface_->DecryptAndDecode(
1406 pp_instance(), 1446 pp_instance(),
1407 encrypted_resource, 1447 encrypted_resource,
1408 pp_callback)); 1448 pp_callback));
1409 } 1449 }
(...skipping 596 matching lines...) Expand 10 before | Expand all | Expand 10 after
2006 2046
2007 PP_Var PluginInstance::GetFontFamilies(PP_Instance instance) { 2047 PP_Var PluginInstance::GetFontFamilies(PP_Instance instance) {
2008 // No in-process implementation. 2048 // No in-process implementation.
2009 return PP_MakeUndefined(); 2049 return PP_MakeUndefined();
2010 } 2050 }
2011 2051
2012 void PluginInstance::NeedKey(PP_Instance instance, 2052 void PluginInstance::NeedKey(PP_Instance instance,
2013 PP_Var key_system_var, 2053 PP_Var key_system_var,
2014 PP_Var session_id_var, 2054 PP_Var session_id_var,
2015 PP_Resource init_data) { 2055 PP_Resource init_data) {
2016 StringVar* key_system_string = StringVar::FromPPVar(key_system_var); 2056 //StringVar* key_system_string = StringVar::FromPPVar(key_system_var);
2017 StringVar* session_id_string = StringVar::FromPPVar(session_id_var); 2057 //StringVar* session_id_string = StringVar::FromPPVar(session_id_var);
2018 2058
2019 // TODO(tomfinegan): Where does the call to this method come from? Or, where 2059 // TODO(tomfinegan): Where does the call to this method come from? Or, where
2020 // does it go for handling. I need to read more of the EME proposed spec, but 2060 // does it go for handling. I need to read more of the EME proposed spec, but
2021 // this is what I understand so far: 2061 // this is what I understand so far:
2022 // - JS app sends needkey before anything else when it knows that encrypted 2062 // - JS app sends needkey before anything else when it knows that encrypted
2023 // data is going to be streamed to the user agent. 2063 // data is going to be streamed to the user agent.
2024 // - OR is the media stack going to see something in the stream that looks 2064 // - OR is the media stack going to see something in the stream that looks
2025 // like init data, and then send NeedKey. If this is the case NeedKey 2065 // like init data, and then send NeedKey. If this is the case NeedKey
2026 // probably needs to move to the PPP interface. 2066 // probably needs to move to the PPP interface.
2027 2067
2028 HostGlobals::Get()->GetVarTracker()->ReleaseVar(key_system_var); 2068 HostGlobals::Get()->GetVarTracker()->ReleaseVar(key_system_var);
2029 HostGlobals::Get()->GetVarTracker()->ReleaseVar(session_id_var); 2069 HostGlobals::Get()->GetVarTracker()->ReleaseVar(session_id_var);
2030 } 2070 }
2031 2071
2032 void PluginInstance::KeyAdded(PP_Instance instance, 2072 void PluginInstance::KeyAdded(PP_Instance instance,
2033 PP_Var key_system, 2073 PP_Var key_system,
2034 PP_Var session_id) { 2074 PP_Var session_id) {
2075 DCHECK(decryptor_client_);
2076
2035 } 2077 }
2036 2078
2037 void PluginInstance::KeyMessage(PP_Instance instance, 2079 void PluginInstance::KeyMessage(PP_Instance instance,
2038 PP_Var key_system_var, 2080 PP_Var key_system_var,
2039 PP_Var session_id_var, 2081 PP_Var session_id_var,
2040 PP_Resource message_resource, 2082 PP_Resource message_resource,
2041 PP_Var default_url_var) { 2083 PP_Var default_url_var) {
2042 StringVar* key_system_string = StringVar::FromPPVar(key_system_var); 2084 StringVar* key_system_string = StringVar::FromPPVar(key_system_var);
2043 StringVar* session_id_string = StringVar::FromPPVar(session_id_var); 2085 StringVar* session_id_string = StringVar::FromPPVar(session_id_var);
2044 StringVar* default_url_string = StringVar::FromPPVar(default_url_var); 2086 StringVar* default_url_string = StringVar::FromPPVar(default_url_var);
(...skipping 17 matching lines...) Expand all
2062 return; 2104 return;
2063 } 2105 }
2064 2106
2065 std::string message(reinterpret_cast<char*>(mapper.data()), mapper.size()); 2107 std::string message(reinterpret_cast<char*>(mapper.data()), mapper.size());
2066 if (message.empty()) { 2108 if (message.empty()) {
2067 // TODO(tomfinegan): KeyError here? 2109 // TODO(tomfinegan): KeyError here?
2068 NOTREACHED(); 2110 NOTREACHED();
2069 return; 2111 return;
2070 } 2112 }
2071 2113
2114 DCHECK(decryptor_client_);
2115 scoped_array<uint8> message_array(new uint8[message.size()]);
2116 memcpy(message_array.get(), message.data(), message.size());
2117
2118 decryptor_client_->KeyMessage(key_system_string->value(),
2119 session_id_string->value(),
2120 message_array.Pass(),
2121 message.size(),
2122 default_url_string->value());
2123
2072 // Release the PP_Vars. 2124 // Release the PP_Vars.
2073 HostGlobals::Get()->GetVarTracker()->ReleaseVar(key_system_var); 2125 HostGlobals::Get()->GetVarTracker()->ReleaseVar(key_system_var);
2074 HostGlobals::Get()->GetVarTracker()->ReleaseVar(session_id_var); 2126 HostGlobals::Get()->GetVarTracker()->ReleaseVar(session_id_var);
2075 HostGlobals::Get()->GetVarTracker()->ReleaseVar(default_url_var); 2127 HostGlobals::Get()->GetVarTracker()->ReleaseVar(default_url_var);
2076 2128
2077 // Release the PP_Resource. 2129 // Release the PP_Resource.
2078 // TODO(tomfinegan): Confirm that the buffer is freed. 2130 // TODO(tomfinegan): Confirm that the buffer is freed.
2079 HostGlobals::Get()->GetResourceTracker()->ReleaseResource(message_resource); 2131 HostGlobals::Get()->GetResourceTracker()->ReleaseResource(message_resource);
2080 } 2132 }
2081 2133
2082 void PluginInstance::KeyError(PP_Instance instance, 2134 void PluginInstance::KeyError(PP_Instance instance,
2083 PP_Var key_system_var, 2135 PP_Var key_system_var,
2084 PP_Var session_id_var, 2136 PP_Var session_id_var,
2085 uint16_t media_error, 2137 uint16_t media_error,
2086 uint16_t system_error) { 2138 uint16_t system_error) {
2087 StringVar* key_system_string = StringVar::FromPPVar(key_system_var); 2139 //StringVar* key_system_string = StringVar::FromPPVar(key_system_var);
2088 StringVar* session_id_string = StringVar::FromPPVar(session_id_var); 2140 //StringVar* session_id_string = StringVar::FromPPVar(session_id_var);
2089 2141
2090 HostGlobals::Get()->GetVarTracker()->ReleaseVar(key_system_var); 2142 HostGlobals::Get()->GetVarTracker()->ReleaseVar(key_system_var);
2091 HostGlobals::Get()->GetVarTracker()->ReleaseVar(session_id_var); 2143 HostGlobals::Get()->GetVarTracker()->ReleaseVar(session_id_var);
2092 } 2144 }
2093 2145
2094 void PluginInstance::DeliverBlock(PP_Instance instance, 2146 void PluginInstance::DeliverBlock(PP_Instance instance,
2095 PP_Resource decrypted_block, 2147 PP_Resource decrypted_block,
2096 PP_CompletionCallback callback) { 2148 uint32_t id) {
2097 // TODO(tomfinegan): Determine where |decrypted_block| goes, and what 2149 // TODO(tomfinegan): Determine where |decrypted_block| goes, and what
2098 // callback actually is (callback will likely be the result of some 2150 // callback actually is (callback will likely be the result of some
2099 // base::Bind usage in the media stack. Hash this out with xhwang. 2151 // base::Bind usage in the media stack. Hash this out with xhwang.
2100 // 2152 //
2153
2154 std::map<uint64_t, CDMStatusCB>::iterator found = cdm_status_cb_map_.find(id);
2155 if (found != cdm_status_cb_map_.end()) {
2156 DVLOG(3) << "DeliverBlock(): Buffer ID " << id << " found, callback fired.";
2157 found->second.Run(NULL, 0);
2158 cdm_status_cb_map_.erase(found);
2159 }
2160 else {
2161 DVLOG(3) << "DeliverBlock(): Buffer ID " << id << " not found.";
2162 NOTREACHED();
2163 }
2164
2101 HostGlobals::Get()->GetResourceTracker()->ReleaseResource(decrypted_block); 2165 HostGlobals::Get()->GetResourceTracker()->ReleaseResource(decrypted_block);
2102 } 2166 }
2103 2167
2104 void PluginInstance::DeliverFrame(PP_Instance instance, 2168 void PluginInstance::DeliverFrame(PP_Instance instance,
2105 PP_Resource decrypted_frame, 2169 PP_Resource decrypted_frame,
2106 PP_CompletionCallback callback) { 2170 PP_CompletionCallback callback) {
2107 // Not implemented in v0.1 of the EME/CDM work. 2171 // Not implemented in v0.1 of the EME/CDM work.
2108 } 2172 }
2109 2173
2110 void PluginInstance::DeliverSamples(PP_Instance instance, 2174 void PluginInstance::DeliverSamples(PP_Instance instance,
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after
2483 screen_size_for_fullscreen_ = gfx::Size(); 2547 screen_size_for_fullscreen_ = gfx::Size();
2484 WebElement element = container_->element(); 2548 WebElement element = container_->element();
2485 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_); 2549 element.setAttribute(WebString::fromUTF8(kWidth), width_before_fullscreen_);
2486 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_); 2550 element.setAttribute(WebString::fromUTF8(kHeight), height_before_fullscreen_);
2487 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_); 2551 element.setAttribute(WebString::fromUTF8(kBorder), border_before_fullscreen_);
2488 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_); 2552 element.setAttribute(WebString::fromUTF8(kStyle), style_before_fullscreen_);
2489 } 2553 }
2490 2554
2491 } // namespace ppapi 2555 } // namespace ppapi
2492 } // namespace webkit 2556 } // namespace webkit
OLDNEW
« webkit/media/crypto/ppapi_decryptor.cc ('K') | « webkit/plugins/ppapi/ppapi_plugin_instance.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698