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

Side by Side Diff: ppapi/proxy/ppb_instance_proxy.cc

Issue 496143002: Update Pepper interface for EME (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: cdm_promise rebase Created 6 years, 3 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 (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 "ppapi/proxy/ppb_instance_proxy.h" 5 #include "ppapi/proxy/ppb_instance_proxy.h"
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "media/base/limits.h"
9 #include "ppapi/c/pp_errors.h" 10 #include "ppapi/c/pp_errors.h"
10 #include "ppapi/c/pp_time.h" 11 #include "ppapi/c/pp_time.h"
11 #include "ppapi/c/pp_var.h" 12 #include "ppapi/c/pp_var.h"
12 #include "ppapi/c/ppb_audio_config.h" 13 #include "ppapi/c/ppb_audio_config.h"
13 #include "ppapi/c/ppb_instance.h" 14 #include "ppapi/c/ppb_instance.h"
14 #include "ppapi/c/ppb_messaging.h" 15 #include "ppapi/c/ppb_messaging.h"
15 #include "ppapi/c/ppb_mouse_lock.h" 16 #include "ppapi/c/ppb_mouse_lock.h"
16 #include "ppapi/c/private/pp_content_decryptor.h" 17 #include "ppapi/c/private/pp_content_decryptor.h"
17 #include "ppapi/proxy/broker_resource.h" 18 #include "ppapi/proxy/broker_resource.h"
18 #include "ppapi/proxy/browser_font_singleton_resource.h" 19 #include "ppapi/proxy/browser_font_singleton_resource.h"
19 #include "ppapi/proxy/content_decryptor_private_serializer.h" 20 #include "ppapi/proxy/content_decryptor_private_serializer.h"
20 #include "ppapi/proxy/enter_proxy.h" 21 #include "ppapi/proxy/enter_proxy.h"
21 #include "ppapi/proxy/file_mapping_resource.h" 22 #include "ppapi/proxy/file_mapping_resource.h"
22 #include "ppapi/proxy/flash_clipboard_resource.h" 23 #include "ppapi/proxy/flash_clipboard_resource.h"
23 #include "ppapi/proxy/flash_file_resource.h" 24 #include "ppapi/proxy/flash_file_resource.h"
24 #include "ppapi/proxy/flash_fullscreen_resource.h" 25 #include "ppapi/proxy/flash_fullscreen_resource.h"
25 #include "ppapi/proxy/flash_resource.h" 26 #include "ppapi/proxy/flash_resource.h"
26 #include "ppapi/proxy/gamepad_resource.h" 27 #include "ppapi/proxy/gamepad_resource.h"
27 #include "ppapi/proxy/host_dispatcher.h" 28 #include "ppapi/proxy/host_dispatcher.h"
28 #include "ppapi/proxy/isolated_file_system_private_resource.h" 29 #include "ppapi/proxy/isolated_file_system_private_resource.h"
29 #include "ppapi/proxy/message_handler.h" 30 #include "ppapi/proxy/message_handler.h"
30 #include "ppapi/proxy/network_proxy_resource.h" 31 #include "ppapi/proxy/network_proxy_resource.h"
31 #include "ppapi/proxy/pdf_resource.h" 32 #include "ppapi/proxy/pdf_resource.h"
32 #include "ppapi/proxy/plugin_dispatcher.h" 33 #include "ppapi/proxy/plugin_dispatcher.h"
33 #include "ppapi/proxy/ppapi_messages.h" 34 #include "ppapi/proxy/ppapi_messages.h"
34 #include "ppapi/proxy/serialized_var.h" 35 #include "ppapi/proxy/serialized_var.h"
35 #include "ppapi/proxy/truetype_font_singleton_resource.h" 36 #include "ppapi/proxy/truetype_font_singleton_resource.h"
36 #include "ppapi/proxy/uma_private_resource.h" 37 #include "ppapi/proxy/uma_private_resource.h"
38 #include "ppapi/shared_impl/array_var.h"
37 #include "ppapi/shared_impl/ppapi_globals.h" 39 #include "ppapi/shared_impl/ppapi_globals.h"
38 #include "ppapi/shared_impl/ppb_url_util_shared.h" 40 #include "ppapi/shared_impl/ppb_url_util_shared.h"
39 #include "ppapi/shared_impl/ppb_view_shared.h" 41 #include "ppapi/shared_impl/ppb_view_shared.h"
40 #include "ppapi/shared_impl/var.h" 42 #include "ppapi/shared_impl/var.h"
41 #include "ppapi/thunk/enter.h" 43 #include "ppapi/thunk/enter.h"
42 #include "ppapi/thunk/ppb_compositor_api.h" 44 #include "ppapi/thunk/ppb_compositor_api.h"
43 #include "ppapi/thunk/ppb_graphics_2d_api.h" 45 #include "ppapi/thunk/ppb_graphics_2d_api.h"
44 #include "ppapi/thunk/ppb_graphics_3d_api.h" 46 #include "ppapi/thunk/ppb_graphics_3d_api.h"
45 #include "ppapi/thunk/thunk.h" 47 #include "ppapi/thunk/thunk.h"
46 48
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DocumentCanAccessDocument, 174 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DocumentCanAccessDocument,
173 OnHostMsgDocumentCanAccessDocument) 175 OnHostMsgDocumentCanAccessDocument)
174 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginInstanceURL, 176 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginInstanceURL,
175 OnHostMsgGetPluginInstanceURL) 177 OnHostMsgGetPluginInstanceURL)
176 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginReferrerURL, 178 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_GetPluginReferrerURL,
177 OnHostMsgGetPluginReferrerURL) 179 OnHostMsgGetPluginReferrerURL)
178 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolved, 180 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolved,
179 OnHostMsgPromiseResolved) 181 OnHostMsgPromiseResolved)
180 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolvedWithSession, 182 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolvedWithSession,
181 OnHostMsgPromiseResolvedWithSession) 183 OnHostMsgPromiseResolvedWithSession)
184 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseResolvedWithKeyIds,
185 OnHostMsgPromiseResolvedWithKeyIds)
182 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseRejected, 186 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_PromiseRejected,
183 OnHostMsgPromiseRejected) 187 OnHostMsgPromiseRejected)
184 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionMessage, 188 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionMessage,
185 OnHostMsgSessionMessage) 189 OnHostMsgSessionMessage)
190 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionKeysChange,
191 OnHostMsgSessionKeysChange)
192 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionExpirationChange,
193 OnHostMsgSessionExpirationChange)
186 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionReady, 194 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionReady,
187 OnHostMsgSessionReady) 195 OnHostMsgSessionReady)
188 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionClosed, 196 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionClosed,
189 OnHostMsgSessionClosed) 197 OnHostMsgSessionClosed)
190 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionError, 198 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_SessionError,
191 OnHostMsgSessionError) 199 OnHostMsgSessionError)
192 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DeliverBlock, 200 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DeliverBlock,
193 OnHostMsgDeliverBlock) 201 OnHostMsgDeliverBlock)
194 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DecoderInitializeDone, 202 IPC_MESSAGE_HANDLER(PpapiHostMsg_PPBInstance_DecoderInitializeDone,
195 OnHostMsgDecoderInitializeDone) 203 OnHostMsgDecoderInitializeDone)
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 void PPB_Instance_Proxy::PromiseResolvedWithSession(PP_Instance instance, 578 void PPB_Instance_Proxy::PromiseResolvedWithSession(PP_Instance instance,
571 uint32 promise_id, 579 uint32 promise_id,
572 PP_Var web_session_id_var) { 580 PP_Var web_session_id_var) {
573 dispatcher()->Send(new PpapiHostMsg_PPBInstance_PromiseResolvedWithSession( 581 dispatcher()->Send(new PpapiHostMsg_PPBInstance_PromiseResolvedWithSession(
574 API_ID_PPB_INSTANCE, 582 API_ID_PPB_INSTANCE,
575 instance, 583 instance,
576 promise_id, 584 promise_id,
577 SerializedVarSendInput(dispatcher(), web_session_id_var))); 585 SerializedVarSendInput(dispatcher(), web_session_id_var)));
578 } 586 }
579 587
588 void PPB_Instance_Proxy::PromiseResolvedWithKeyIds(PP_Instance instance,
589 uint32 promise_id,
590 PP_Var key_ids_var) {
591 ArrayVar* key_ids_array = ArrayVar::FromPPVar(key_ids_var);
592 if (!key_ids_array ||
593 key_ids_array->GetLength() > media::limits::kMaxKeyIds) {
594 NOTREACHED();
595 return;
596 }
597
598 std::vector<std::vector<uint8_t> > key_ids;
599 for (size_t i = 0; i < key_ids_array->GetLength(); ++i) {
600 ArrayBufferVar* key_id = ArrayBufferVar::FromPPVar(key_ids_array->Get(i));
601 if (!key_id || key_id->ByteLength() < media::limits::kMinKeyIdLength ||
602 key_id->ByteLength() > media::limits::kMaxKeyIdLength) {
603 NOTREACHED();
604 continue;
605 }
606
607 const uint8_t* key_id_ptr = static_cast<const uint8_t*>(key_id->Map());
608 const uint32_t key_id_size = key_id->ByteLength();
609 std::vector<uint8_t> key_id_vector(key_id_ptr, key_id_ptr + key_id_size);
610 key_ids.push_back(key_id_vector);
611 }
612
613 dispatcher()->Send(new PpapiHostMsg_PPBInstance_PromiseResolvedWithKeyIds(
614 API_ID_PPB_INSTANCE, instance, promise_id, key_ids));
615 }
616
580 void PPB_Instance_Proxy::PromiseRejected(PP_Instance instance, 617 void PPB_Instance_Proxy::PromiseRejected(PP_Instance instance,
581 uint32 promise_id, 618 uint32 promise_id,
582 PP_CdmExceptionCode exception_code, 619 PP_CdmExceptionCode exception_code,
583 uint32 system_code, 620 uint32 system_code,
584 PP_Var error_description_var) { 621 PP_Var error_description_var) {
585 dispatcher()->Send(new PpapiHostMsg_PPBInstance_PromiseRejected( 622 dispatcher()->Send(new PpapiHostMsg_PPBInstance_PromiseRejected(
586 API_ID_PPB_INSTANCE, 623 API_ID_PPB_INSTANCE,
587 instance, 624 instance,
588 promise_id, 625 promise_id,
589 exception_code, 626 exception_code,
590 system_code, 627 system_code,
591 SerializedVarSendInput(dispatcher(), error_description_var))); 628 SerializedVarSendInput(dispatcher(), error_description_var)));
592 } 629 }
593 630
594 void PPB_Instance_Proxy::SessionMessage(PP_Instance instance, 631 void PPB_Instance_Proxy::SessionMessage(PP_Instance instance,
595 PP_Var web_session_id_var, 632 PP_Var web_session_id_var,
596 PP_Var message_var, 633 PP_Var message_var,
597 PP_Var destination_url_var) { 634 PP_Var destination_url_var) {
598 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionMessage( 635 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionMessage(
599 API_ID_PPB_INSTANCE, 636 API_ID_PPB_INSTANCE,
600 instance, 637 instance,
601 SerializedVarSendInput(dispatcher(), web_session_id_var), 638 SerializedVarSendInput(dispatcher(), web_session_id_var),
602 SerializedVarSendInput(dispatcher(), message_var), 639 SerializedVarSendInput(dispatcher(), message_var),
603 SerializedVarSendInput(dispatcher(), destination_url_var))); 640 SerializedVarSendInput(dispatcher(), destination_url_var)));
604 } 641 }
605 642
643 void PPB_Instance_Proxy::SessionKeysChange(PP_Instance instance,
644 PP_Var web_session_id_var,
645 PP_Bool has_additional_usable_key) {
646 StringVar* session_id = StringVar::FromPPVar(web_session_id_var);
647 if (!session_id ||
648 session_id->value().length() > media::limits::kMaxWebSessionIdLength) {
649 NOTREACHED();
650 return;
651 }
652
653 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionKeysChange(
654 API_ID_PPB_INSTANCE,
655 instance,
656 session_id->value(),
657 has_additional_usable_key));
658 }
659
660 void PPB_Instance_Proxy::SessionExpirationChange(PP_Instance instance,
661 PP_Var web_session_id_var,
662 PP_Time new_expiry_time) {
663 StringVar* session_id = StringVar::FromPPVar(web_session_id_var);
664 if (!session_id ||
665 session_id->value().length() > media::limits::kMaxWebSessionIdLength) {
666 NOTREACHED();
667 return;
668 }
669
670 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionExpirationChange(
671 API_ID_PPB_INSTANCE, instance, session_id->value(), new_expiry_time));
672 }
673
606 void PPB_Instance_Proxy::SessionReady(PP_Instance instance, 674 void PPB_Instance_Proxy::SessionReady(PP_Instance instance,
607 PP_Var web_session_id_var) { 675 PP_Var web_session_id_var) {
608 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionReady( 676 dispatcher()->Send(new PpapiHostMsg_PPBInstance_SessionReady(
609 API_ID_PPB_INSTANCE, 677 API_ID_PPB_INSTANCE,
610 instance, 678 instance,
611 SerializedVarSendInput(dispatcher(), web_session_id_var))); 679 SerializedVarSendInput(dispatcher(), web_session_id_var)));
612 } 680 }
613 681
614 void PPB_Instance_Proxy::SessionClosed(PP_Instance instance, 682 void PPB_Instance_Proxy::SessionClosed(PP_Instance instance,
615 PP_Var web_session_id_var) { 683 PP_Var web_session_id_var) {
(...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 SerializedVarReceiveInput web_session_id) { 1259 SerializedVarReceiveInput web_session_id) {
1192 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE)) 1260 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
1193 return; 1261 return;
1194 EnterInstanceNoLock enter(instance); 1262 EnterInstanceNoLock enter(instance);
1195 if (enter.succeeded()) { 1263 if (enter.succeeded()) {
1196 enter.functions()->PromiseResolvedWithSession( 1264 enter.functions()->PromiseResolvedWithSession(
1197 instance, promise_id, web_session_id.Get(dispatcher())); 1265 instance, promise_id, web_session_id.Get(dispatcher()));
1198 } 1266 }
1199 } 1267 }
1200 1268
1269 void PPB_Instance_Proxy::OnHostMsgPromiseResolvedWithKeyIds(
1270 PP_Instance instance,
1271 uint32_t promise_id,
1272 const std::vector<std::vector<uint8_t> >& key_ids) {
1273 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
1274 return;
1275 if (key_ids.size() > media::limits::kMaxKeyIds) {
1276 NOTREACHED();
1277 return;
1278 }
1279
1280 scoped_refptr<ArrayVar> key_ids_array = new ArrayVar();
1281 key_ids_array->SetLength(key_ids.size());
1282 for (size_t i = 0; i < key_ids.size(); ++i) {
1283 const std::vector<uint8_t>& entry = key_ids[i];
1284 if (entry.size() < media::limits::kMinKeyIdLength ||
1285 entry.size() > media::limits::kMaxKeyIdLength) {
1286 NOTREACHED();
1287 continue;
1288 }
1289 key_ids_array->Set(
1290 i,
1291 PpapiGlobals::Get()->GetVarTracker()->MakeArrayBufferPPVar(entry.size(),
1292 &entry[0]));
1293 }
1294
1295 EnterInstanceNoLock enter(instance);
1296 if (enter.succeeded()) {
1297 enter.functions()->PromiseResolvedWithKeyIds(
1298 instance, promise_id, key_ids_array->GetPPVar());
dmichael (off chromium) 2014/09/04 21:17:11 GetPPVar increments the reference count, but you d
jrummell 2014/09/04 23:05:03 Done.
1299 }
1300 }
1301
1201 void PPB_Instance_Proxy::OnHostMsgPromiseRejected( 1302 void PPB_Instance_Proxy::OnHostMsgPromiseRejected(
1202 PP_Instance instance, 1303 PP_Instance instance,
1203 uint32_t promise_id, 1304 uint32_t promise_id,
1204 PP_CdmExceptionCode exception_code, 1305 PP_CdmExceptionCode exception_code,
1205 uint32_t system_code, 1306 uint32_t system_code,
1206 SerializedVarReceiveInput error_description) { 1307 SerializedVarReceiveInput error_description) {
1207 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE)) 1308 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
1208 return; 1309 return;
1209 EnterInstanceNoLock enter(instance); 1310 EnterInstanceNoLock enter(instance);
1210 if (enter.succeeded()) { 1311 if (enter.succeeded()) {
(...skipping 14 matching lines...) Expand all
1225 return; 1326 return;
1226 EnterInstanceNoLock enter(instance); 1327 EnterInstanceNoLock enter(instance);
1227 if (enter.succeeded()) { 1328 if (enter.succeeded()) {
1228 enter.functions()->SessionMessage(instance, 1329 enter.functions()->SessionMessage(instance,
1229 web_session_id.Get(dispatcher()), 1330 web_session_id.Get(dispatcher()),
1230 message.Get(dispatcher()), 1331 message.Get(dispatcher()),
1231 destination_url.Get(dispatcher())); 1332 destination_url.Get(dispatcher()));
1232 } 1333 }
1233 } 1334 }
1234 1335
1336 void PPB_Instance_Proxy::OnHostMsgSessionKeysChange(
1337 PP_Instance instance,
1338 const std::string& web_session_id,
1339 PP_Bool has_additional_usable_key) {
1340 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
1341 return;
1342 EnterInstanceNoLock enter(instance);
1343 if (enter.succeeded()) {
1344 enter.functions()->SessionKeysChange(
1345 instance,
1346 StringVar::StringToPPVar(web_session_id),
dmichael (off chromium) 2014/09/04 21:17:11 Same problem here; StringToPPVar increments the re
jrummell 2014/09/04 23:05:03 Done.
1347 has_additional_usable_key);
1348 }
1349 }
1350
1351 void PPB_Instance_Proxy::OnHostMsgSessionExpirationChange(
1352 PP_Instance instance,
1353 const std::string& web_session_id,
1354 PP_Time new_expiry_time) {
1355 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
1356 return;
1357 EnterInstanceNoLock enter(instance);
1358 if (enter.succeeded()) {
1359 enter.functions()->SessionExpirationChange(
1360 instance, StringVar::StringToPPVar(web_session_id), new_expiry_time);
dmichael (off chromium) 2014/09/04 21:17:11 ditto
jrummell 2014/09/04 23:05:03 Done.
1361 }
1362 }
1363
1235 void PPB_Instance_Proxy::OnHostMsgSessionReady( 1364 void PPB_Instance_Proxy::OnHostMsgSessionReady(
1236 PP_Instance instance, 1365 PP_Instance instance,
1237 SerializedVarReceiveInput web_session_id) { 1366 SerializedVarReceiveInput web_session_id) {
1238 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE)) 1367 if (!dispatcher()->permissions().HasPermission(PERMISSION_PRIVATE))
1239 return; 1368 return;
1240 EnterInstanceNoLock enter(instance); 1369 EnterInstanceNoLock enter(instance);
1241 if (enter.succeeded()) { 1370 if (enter.succeeded()) {
1242 enter.functions()->SessionReady(instance, web_session_id.Get(dispatcher())); 1371 enter.functions()->SessionReady(instance, web_session_id.Get(dispatcher()));
1243 } 1372 }
1244 } 1373 }
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1436 PP_Instance instance) { 1565 PP_Instance instance) {
1437 InstanceData* data = static_cast<PluginDispatcher*>(dispatcher())-> 1566 InstanceData* data = static_cast<PluginDispatcher*>(dispatcher())->
1438 GetInstanceData(instance); 1567 GetInstanceData(instance);
1439 if (!data) 1568 if (!data)
1440 return; // Instance was probably deleted. 1569 return; // Instance was probably deleted.
1441 data->should_do_request_surrounding_text = false; 1570 data->should_do_request_surrounding_text = false;
1442 } 1571 }
1443 1572
1444 } // namespace proxy 1573 } // namespace proxy
1445 } // namespace ppapi 1574 } // namespace ppapi
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698