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

Side by Side Diff: content/browser/media/cdm/browser_cdm_manager.cc

Issue 1113883003: Restrict WEBM Key ID data to 128-bits for Android (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/browser/media/cdm/browser_cdm_manager.h" 5 #include "content/browser/media/cdm/browser_cdm_manager.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 18 matching lines...) Expand all
29 #include "content/public/common/renderer_preferences.h" 29 #include "content/public/common/renderer_preferences.h"
30 #endif 30 #endif
31 31
32 namespace content { 32 namespace content {
33 33
34 using media::BrowserCdm; 34 using media::BrowserCdm;
35 using media::MediaKeys; 35 using media::MediaKeys;
36 36
37 namespace { 37 namespace {
38 38
39 #if defined(OS_ANDROID)
40 // Android only supports 128-bit key IDs.
41 const size_t kMaxKeyIdLength = 128 / 8;
ddorwin 2015/04/29 21:19:56 We could always have a limit (i.e. 1024 or whateve
jrummell 2015/05/15 00:52:59 Renamed. The existing global limit is not currentl
42 #endif
43
39 // The ID used in this class is a concatenation of |render_frame_id| and 44 // The ID used in this class is a concatenation of |render_frame_id| and
40 // |cdm_id|, i.e. (render_frame_id << 32) + cdm_id. 45 // |cdm_id|, i.e. (render_frame_id << 32) + cdm_id.
41 46
42 uint64 GetId(int render_frame_id, int cdm_id) { 47 uint64 GetId(int render_frame_id, int cdm_id) {
43 return (static_cast<uint64>(render_frame_id) << 32) + 48 return (static_cast<uint64>(render_frame_id) << 32) +
44 static_cast<uint64>(cdm_id); 49 static_cast<uint64>(cdm_id);
45 } 50 }
46 51
47 bool IdBelongsToFrame(uint64 id, int render_frame_id) { 52 bool IdBelongsToFrame(uint64 id, int render_frame_id) {
48 return (id >> 32) == static_cast<uint64>(render_frame_id); 53 return (id >> 32) == static_cast<uint64>(render_frame_id);
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 342
338 scoped_ptr<NewSessionPromise> promise( 343 scoped_ptr<NewSessionPromise> promise(
339 new NewSessionPromise(this, render_frame_id, cdm_id, promise_id)); 344 new NewSessionPromise(this, render_frame_id, cdm_id, promise_id));
340 345
341 if (init_data.size() > media::limits::kMaxInitDataLength) { 346 if (init_data.size() > media::limits::kMaxInitDataLength) {
342 LOG(WARNING) << "InitData for ID: " << cdm_id 347 LOG(WARNING) << "InitData for ID: " << cdm_id
343 << " too long: " << init_data.size(); 348 << " too long: " << init_data.size();
344 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Init data too long."); 349 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0, "Init data too long.");
345 return; 350 return;
346 } 351 }
352 #if defined(OS_ANDROID)
353 if (init_data_type == INIT_DATA_TYPE_WEBM &&
354 init_data.size() > kMaxKeyIdLength) {
355 promise->reject(MediaKeys::INVALID_ACCESS_ERROR, 0,
356 "Init data for WEBM too long.");
ddorwin 2015/04/29 21:19:56 "'webm' initData is too long."
jrummell 2015/05/15 00:52:59 Done.
357 return;
358 }
359 #endif
347 360
348 media::EmeInitDataType eme_init_data_type; 361 media::EmeInitDataType eme_init_data_type;
349 switch (init_data_type) { 362 switch (init_data_type) {
350 case INIT_DATA_TYPE_WEBM: 363 case INIT_DATA_TYPE_WEBM:
351 eme_init_data_type = media::EmeInitDataType::WEBM; 364 eme_init_data_type = media::EmeInitDataType::WEBM;
352 break; 365 break;
353 #if defined(USE_PROPRIETARY_CODECS) 366 #if defined(USE_PROPRIETARY_CODECS)
354 case INIT_DATA_TYPE_CENC: 367 case INIT_DATA_TYPE_CENC:
355 eme_init_data_type = media::EmeInitDataType::CENC; 368 eme_init_data_type = media::EmeInitDataType::CENC;
356 break; 369 break;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
574 } 587 }
575 588
576 // Only the temporary session type is supported in browser CDM path. 589 // Only the temporary session type is supported in browser CDM path.
577 // TODO(xhwang): Add SessionType support if needed. 590 // TODO(xhwang): Add SessionType support if needed.
578 cdm->CreateSessionAndGenerateRequest(media::MediaKeys::TEMPORARY_SESSION, 591 cdm->CreateSessionAndGenerateRequest(media::MediaKeys::TEMPORARY_SESSION,
579 init_data_type, init_data, 592 init_data_type, init_data,
580 promise.Pass()); 593 promise.Pass());
581 } 594 }
582 595
583 } // namespace content 596 } // namespace content
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698