1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef MEDIA_BLINK_WEBENCRYPTEDMEDIACLIENT_IMPL_H_
6 #define MEDIA_BLINK_WEBENCRYPTEDMEDIACLIENT_IMPL_H_
10 #include "base/containers/scoped_ptr_hash_map.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h"
13 #include "media/base/media_export.h"
14 #include "media/blink/key_system_config_selector.h"
15 #include "third_party/WebKit/public/platform/WebEncryptedMediaClient.h"
19 class WebContentDecryptionModuleResult
;
20 struct WebMediaKeySystemConfiguration
;
21 class WebSecurityOrigin
;
29 class MediaPermission
;
31 class MEDIA_EXPORT WebEncryptedMediaClientImpl
32 : public blink::WebEncryptedMediaClient
{
34 WebEncryptedMediaClientImpl(CdmFactory
* cdm_factory
,
35 MediaPermission
* media_permission
);
36 virtual ~WebEncryptedMediaClientImpl();
38 // WebEncryptedMediaClient implementation.
39 virtual void requestMediaKeySystemAccess(
40 blink::WebEncryptedMediaRequest request
);
42 // Create the CDM for |key_system| and |security_origin|. The caller owns
43 // the created cdm (passed back using |result|).
44 void CreateCdm(const blink::WebString
& key_system
,
45 bool allow_distinctive_identifier
,
46 bool allow_persistent_state
,
47 const blink::WebSecurityOrigin
& security_origin
,
48 blink::WebContentDecryptionModuleResult result
);
51 // Report usage of key system to UMA. There are 2 different counts logged:
52 // 1. The key system is requested.
53 // 2. The requested key system and options are supported.
54 // Each stat is only reported once per renderer frame per key system.
57 // Complete a requestMediaKeySystemAccess() request with a supported
58 // accumulated configuration.
59 void OnRequestSucceeded(
60 blink::WebEncryptedMediaRequest request
,
61 const blink::WebMediaKeySystemConfiguration
& accumulated_configuration
);
63 // Complete a requestMediaKeySystemAccess() request with an error message.
64 void OnRequestNotSupported(blink::WebEncryptedMediaRequest request
,
65 const blink::WebString
& error_message
);
67 // Gets the Reporter for |key_system|. If it doesn't already exist,
69 Reporter
* GetReporter(const blink::WebString
& key_system
);
71 // Reporter singletons.
72 base::ScopedPtrHashMap
<std::string
, Reporter
> reporters_
;
74 CdmFactory
* cdm_factory_
;
75 KeySystemConfigSelector key_system_config_selector_
;
76 base::WeakPtrFactory
<WebEncryptedMediaClientImpl
> weak_factory_
;
81 #endif // MEDIA_BLINK_WEBENCRYPTEDMEDIACLIENT_IMPL_H_