1d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// found in the LICENSE file.
4d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
5d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#ifndef CONTENT_PUBLIC_RENDERER_KEY_SYSTEM_INFO_H_
6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_KEY_SYSTEM_INFO_H_
7d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
80529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include <map>
9d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include <string>
10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
11d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/basictypes.h"
120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "base/containers/hash_tables.h"
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "content/common/content_export.h"
145c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu#include "content/public/common/eme_codec.h"
15d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
16d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Definitions:
17d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// * Key system
18d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    https://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/encrypted-media.html#key-system
19d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// * Concrete key system
20d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    A key system string that can be instantiated, such as
21d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    via the MediaKeys constructor. Examples include "org.w3.clearkey" and
22d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    "com.widevine.alpha".
23d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// * Abstract key system
24d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    A key system string that cannot be instantiated like a concrete key system
25d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    but is otherwise useful, such as in discovery using isTypeSupported().
26d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// * Parent key system
27d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    A key system string that is one level up from the child key system. It may
28d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    be an abstract key system.
29d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)//    As an example, "com.example" is the parent of "com.example.foo".
30d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
31d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace content {
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// Contains information about an EME key system as well as how to instantiate
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)// the corresponding CDM.
35d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)struct CONTENT_EXPORT KeySystemInfo {
36d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  explicit KeySystemInfo(const std::string& key_system);
37d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  ~KeySystemInfo();
38d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
39d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  std::string key_system;
40d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
415c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  // Specifies codecs supported by |key_system|.
425c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu  SupportedCodecs supported_codecs;
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // A hierarchical parent for |key_system|. This value can be used to check
45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // supported types but cannot be used to instantiate a MediaKeys object.
46d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Only one parent key system is currently supported per concrete key system.
47d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  std::string parent_key_system;
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
49d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // The following indicate how the corresponding CDM should be instantiated.
50d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  bool use_aes_decryptor;
51d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#if defined(ENABLE_PEPPER_CDMS)
52d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  std::string pepper_type;
53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif
54d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)};
55d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
56d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)}  // namespace content
57d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
58d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#endif  // CONTENT_PUBLIC_RENDERER_KEY_SYSTEM_INFO_H_
59