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