media_keys.h revision cedac228d2dd51db4b79ea1e72c7f249408ee061
1868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// found in the LICENSE file. 4868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef MEDIA_BASE_MEDIA_KEYS_H_ 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define MEDIA_BASE_MEDIA_KEYS_H_ 7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <string> 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include <vector> 10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 11868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/basictypes.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/callback.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 14868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "media/base/media_export.h" 15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "url/gurl.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 17868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)namespace media { 18868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass Decryptor; 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Performs media key operations. 22868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// 23868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// All key operations are called on the renderer thread. Therefore, these calls 24868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// should be fast and nonblocking; key events should be fired asynchronously. 25868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)class MEDIA_EXPORT MediaKeys { 26868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) public: 27868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // Reported to UMA, so never reuse a value! 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Must be kept in sync with blink::WebMediaPlayerClient::MediaKeyErrorCode 29868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // (enforced in webmediaplayer_impl.cc). 30868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) enum KeyError { 31868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kUnknownError = 1, 32868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kClientError, 3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) // The commented v0.1b values below have never been used. 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // kServiceError, 3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) kOutputError = 4, 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // kHardwareChangeError, 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // kDomainError, 38868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) kMaxKeyError // Must be last and greater than any legit value. 39868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) }; 40868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 41a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const static uint32 kInvalidSessionId = 0; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) MediaKeys(); 44868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual ~MediaKeys(); 45868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Creates a session with the |content_type| and |init_data| provided. 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Returns true if a session is successfully created, false otherwise. 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Note: UpdateSession() and ReleaseSession() should only be called after 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // SessionCreatedCB is fired. 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // TODO(jrummell): Remove return value when prefixed API is removed. 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // See http://crbug.com/342510 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual bool CreateSession(uint32 session_id, 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& content_type, 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const uint8* init_data, 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int init_data_length) = 0; 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Loads a session with the |web_session_id| provided. 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Note: UpdateSession() and ReleaseSession() should only be called after 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // SessionCreatedCB is fired. 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void LoadSession(uint32 session_id, 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& web_session_id) = 0; 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 63a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Updates a session specified by |session_id| with |response|. 64a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void UpdateSession(uint32 session_id, 65a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const uint8* response, 66a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) int response_length) = 0; 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // Releases the session specified by |session_id|. 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void ReleaseSession(uint32 session_id) = 0; 70868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 71eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Gets the Decryptor object associated with the MediaKeys. Returns NULL if 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // no Decryptor object is associated. The returned object is only guaranteed 73eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // to be valid during the MediaKeys' lifetime. 74eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Decryptor* GetDecryptor(); 75eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 76868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 77868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaKeys); 78868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 79868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 80868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)// Key event callbacks. See the spec for details: 81a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)// https://dvcs.w3.org/hg/html-media/raw-file/default/encrypted-media/encrypted-media.html#event-summary 82a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)typedef base::Callback< 83a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) void(uint32 session_id, const std::string& web_session_id)> 84a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) SessionCreatedCB; 85868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 86a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)typedef base::Callback<void(uint32 session_id, 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<uint8>& message, 88cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const GURL& destination_url)> SessionMessageCB; 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 90a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)typedef base::Callback<void(uint32 session_id)> SessionReadyCB; 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)typedef base::Callback<void(uint32 session_id)> SessionClosedCB; 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 94a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)typedef base::Callback<void(uint32 session_id, 95a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) media::MediaKeys::KeyError error_code, 96a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) uint32 system_code)> SessionErrorCB; 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 98868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)} // namespace media 99868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 100868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // MEDIA_BASE_MEDIA_KEYS_H_ 101