Home | History | Annotate | Download | only in renderer
      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
      3 // found in the LICENSE file.
      4 
      5 #include "components/cdm/renderer/android_key_systems.h"
      6 
      7 #include <string>
      8 #include <vector>
      9 
     10 #include "base/logging.h"
     11 #include "components/cdm/common/cdm_messages_android.h"
     12 #include "components/cdm/renderer/widevine_key_systems.h"
     13 #include "content/public/renderer/render_thread.h"
     14 
     15 #include "widevine_cdm_version.h"  // In SHARED_INTERMEDIATE_DIR.
     16 
     17 using content::KeySystemInfo;
     18 using content::SupportedCodecs;
     19 
     20 namespace cdm {
     21 
     22 static SupportedKeySystemResponse QueryKeySystemSupport(
     23     const std::string& key_system) {
     24   SupportedKeySystemRequest request;
     25   SupportedKeySystemResponse response;
     26 
     27   request.key_system = key_system;
     28   request.codecs = content::EME_CODEC_WEBM_ALL | content::EME_CODEC_MP4_ALL;
     29   content::RenderThread::Get()->Send(
     30       new ChromeViewHostMsg_QueryKeySystemSupport(request, &response));
     31   DCHECK(!(response.compositing_codecs & ~content::EME_CODEC_ALL))
     32       << "unrecognized codec";
     33   DCHECK(!(response.non_compositing_codecs & ~content::EME_CODEC_ALL))
     34       << "unrecognized codec";
     35   return response;
     36 }
     37 
     38 void AddAndroidWidevine(std::vector<KeySystemInfo>* concrete_key_systems) {
     39   SupportedKeySystemResponse response = QueryKeySystemSupport(
     40       kWidevineKeySystem);
     41   if (response.compositing_codecs != content::EME_CODEC_NONE) {
     42     AddWidevineWithCodecs(
     43         WIDEVINE,
     44         static_cast<SupportedCodecs>(response.compositing_codecs),
     45         concrete_key_systems);
     46   }
     47 
     48   if (response.non_compositing_codecs != content::EME_CODEC_NONE) {
     49     AddWidevineWithCodecs(
     50         WIDEVINE_HR_NON_COMPOSITING,
     51         static_cast<SupportedCodecs>(response.non_compositing_codecs),
     52         concrete_key_systems);
     53   }
     54 }
     55 
     56 void AddAndroidPlatformKeySystems(
     57     std::vector<KeySystemInfo>* concrete_key_systems) {
     58   std::vector<std::string> key_system_names;
     59   content::RenderThread::Get()->Send(
     60       new ChromeViewHostMsg_GetPlatformKeySystemNames(&key_system_names));
     61 
     62   for (std::vector<std::string>::const_iterator it = key_system_names.begin();
     63        it != key_system_names.end(); ++it) {
     64     SupportedKeySystemResponse response = QueryKeySystemSupport(*it);
     65     if (response.compositing_codecs != content::EME_CODEC_NONE) {
     66       KeySystemInfo info(*it);
     67       info.supported_codecs = response.compositing_codecs;
     68       concrete_key_systems->push_back(info);
     69     }
     70   }
     71 }
     72 
     73 }  // namespace cdm
     74