17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright (c) 2013 The Chromium Authors. All rights reserved. 27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file. 47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 57d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#ifndef MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ 67d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#define MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ 77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 87d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <jni.h> 97d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <string> 107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include <vector> 117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/android/scoped_java_ref.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "media/base/media_export.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "media/base/media_keys.h" 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace media { 177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 18eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass MediaPlayerManager; 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// This class provides DRM services for android EME implementation. 217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// TODO(qinmin): implement all the functions in this class. 227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class MEDIA_EXPORT MediaDrmBridge : public MediaKeys { 237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public: 247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual ~MediaDrmBridge(); 257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Returns a MediaDrmBridge instance if |uuid| is supported, or a NULL 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // pointer otherwise. 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch static MediaDrmBridge* Create(int media_keys_id, 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<uint8>& uuid, 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MediaPlayerManager* manager); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Checks whether DRM is available. 337d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) static bool IsAvailable(); 347d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // MediaKeys implementations. 367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual bool GenerateKeyRequest(const std::string& type, 377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const uint8* init_data, 387d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int init_data_length) OVERRIDE; 397d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void AddKey(const uint8* key, int key_length, 407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const uint8* init_data, int init_data_length, 417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) const std::string& session_id) OVERRIDE; 427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) virtual void CancelKeyRequest(const std::string& session_id) OVERRIDE; 437d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Drm related message was received. 457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnDrmEvent(JNIEnv* env, jobject, jstring session_id, 467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jint event, jint extra, jstring data); 477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Called after we got the response for GenerateKeyRequest(). 497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) void OnKeyMessage(JNIEnv* env, jobject, jstring session_id, 507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) jbyteArray message, jstring destination_url); 517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 527d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Methods to create and release a MediaCrypto object. 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::android::ScopedJavaLocalRef<jobject> GetMediaCrypto(); 547d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 557d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int media_keys_id() const { return media_keys_id_; } 567d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private: 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MediaDrmBridge(int media_keys_id, 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::vector<uint8>& uuid, 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MediaPlayerManager* manager); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 627d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) // Id of the MediaKeys object. 637d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) int media_keys_id_; 647d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 65eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // UUID of the key system. 66eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch std::vector<uint8> uuid_; 67eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 68eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch // Non-owned pointer. 69eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch MediaPlayerManager* manager_; 70eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 717d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(MediaDrmBridge); 727d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}; 737d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 747d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)} // namespace media 757d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 767d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#endif // MEDIA_BASE_ANDROID_MEDIA_DRM_BRIDGE_H_ 77