[Chromoting] Only raise the CONNECTED event when capabilities are negotiated.
[chromium-blink-merge.git] / media / blink / webencryptedmediaclient_impl.h
blob3bc97ec3bf68c16689c7274d95db6bc83e590430
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_
8 #include <string>
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"
17 namespace blink {
19 class WebContentDecryptionModuleResult;
20 struct WebMediaKeySystemConfiguration;
21 class WebSecurityOrigin;
23 } // namespace blink
25 namespace media {
27 class CdmFactory;
28 class KeySystems;
29 class MediaPermission;
31 class MEDIA_EXPORT WebEncryptedMediaClientImpl
32 : public blink::WebEncryptedMediaClient {
33 public:
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);
50 private:
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.
55 class Reporter;
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,
68 // create one.
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_;
79 } // namespace media
81 #endif // MEDIA_BLINK_WEBENCRYPTEDMEDIACLIENT_IMPL_H_