summaryrefslogtreecommitdiffstats
path: root/android_webview/browser/aw_media_client_android.cc
blob: bc7146540ce17152485031c02abc0790ae1defbd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "android_webview/browser/aw_media_client_android.h"

#include <utility>

#include "base/logging.h"
#include "base/stl_util.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"

namespace android_webview {

namespace {

const size_t kGUIDLength = 36U;

#define RCHECK(x)                                    \
  if (!(x)) {                                        \
    LOG(ERROR) << "Can't parse key-system mapping: " \
               << key_system_uuid_mapping;           \
    return std::make_pair("", uuid);                 \
  }

media::MediaClientAndroid::KeySystemUuidMap::value_type CreateMappingFromString(
    const std::string& key_system_uuid_mapping) {
  std::vector<uint8_t> uuid;

  std::vector<std::string> tokens;
  Tokenize(key_system_uuid_mapping, ",", &tokens);
  RCHECK(tokens.size() == 2);

  std::string key_system;
  base::TrimWhitespaceASCII(tokens[0], base::TRIM_ALL, &key_system);

  std::string guid(tokens[1]);
  RCHECK(guid.length() == kGUIDLength);
  base::RemoveChars(guid, "-", &guid);
  RCHECK(base::HexStringToBytes(guid, &uuid));

  return std::make_pair(key_system, uuid);
}

}  // namespace

AwMediaClientAndroid::AwMediaClientAndroid(
    const std::vector<std::string>& key_system_uuid_mappings)
    : key_system_uuid_mappings_(key_system_uuid_mappings) {
}

AwMediaClientAndroid::~AwMediaClientAndroid() {
}

void AwMediaClientAndroid::AddKeySystemUUIDMappings(KeySystemUuidMap* map) {
  for (const std::string& key_system_uuid_mapping : key_system_uuid_mappings_) {
    auto mapping = CreateMappingFromString(key_system_uuid_mapping);
    if (!mapping.first.empty())
      map->insert(mapping);
  }
}

media::MediaDrmBridgeDelegate* AwMediaClientAndroid::GetMediaDrmBridgeDelegate(
    const media::UUID& scheme_uuid) {
  if (scheme_uuid == widevine_delegate_.GetUUID())
    return &widevine_delegate_;
  return nullptr;
}

}  // namespace android_webview