OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 2013 Apple Inc. All rights reserved. | 2 * Copyright (C) 2013 Apple Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
11 * documentation and/or other materials provided with the distribution. | 11 * documentation and/or other materials provided with the distribution. |
12 * | 12 * |
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' | 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' |
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, | 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, |
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS | 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS |
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF | 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF |
23 * THE POSSIBILITY OF SUCH DAMAGE. | 23 * THE POSSIBILITY OF SUCH DAMAGE. |
24 */ | 24 */ |
25 | 25 |
26 #ifndef MediaKeySession_h | 26 #ifndef MediaKeySession_h |
27 #define MediaKeySession_h | 27 #define MediaKeySession_h |
28 | 28 |
29 #if ENABLE(ENCRYPTED_MEDIA_V2) | |
30 | |
31 #include "bindings/v8/ScriptWrappable.h" | 29 #include "bindings/v8/ScriptWrappable.h" |
32 #include "core/dom/ContextDestructionObserver.h" | 30 #include "core/dom/ContextDestructionObserver.h" |
33 #include "core/dom/EventTarget.h" | 31 #include "core/dom/EventTarget.h" |
34 #include "core/dom/ExceptionCode.h" | 32 #include "core/dom/ExceptionCode.h" |
35 #include "core/platform/Timer.h" | 33 #include "core/platform/Timer.h" |
34 #include "core/platform/graphics/ContentDecryptionModuleSession.h" | |
36 #include "wtf/Deque.h" | 35 #include "wtf/Deque.h" |
37 #include "wtf/PassRefPtr.h" | 36 #include "wtf/PassRefPtr.h" |
38 #include "wtf/RefCounted.h" | 37 #include "wtf/RefCounted.h" |
39 #include "wtf/Uint8Array.h" | 38 #include "wtf/Uint8Array.h" |
40 #include "wtf/text/WTFString.h" | 39 #include "wtf/text/WTFString.h" |
41 | 40 |
42 namespace WebCore { | 41 namespace WebCore { |
43 | 42 |
44 class GenericEventQueue; | 43 class GenericEventQueue; |
45 class MediaKeyError; | 44 class MediaKeyError; |
46 class MediaKeys; | 45 class MediaKeys; |
47 class CDMSession; | 46 class ContentDecryptionModule; |
47 class ContentDecryptionModuleSession; | |
48 | 48 |
49 class MediaKeySession : public RefCounted<MediaKeySession>, public ScriptWrappab le, public EventTarget, public ContextDestructionObserver { | 49 // References are held by JS and MediaKeys. |
50 // Because this object controls the lifetime of the ContentDecryptionModuleSessi on, | |
51 // it may outlive any references to it as long as the MediaKeys object is alive. | |
52 // The ContentDecryptionModuleSession has the same lifetime as this object. | |
53 class MediaKeySession | |
54 : public RefCounted<MediaKeySession>, public ScriptWrappable, public EventTa rget, public ContextDestructionObserver | |
55 , private ContentDecryptionModuleSessionClient { | |
50 public: | 56 public: |
51 static PassRefPtr<MediaKeySession> create(ScriptExecutionContext*, MediaKeys *, const String& keySystem); | 57 static PassRefPtr<MediaKeySession> create(ScriptExecutionContext*, ContentDe cryptionModule&, MediaKeys*); |
abarth-chromium
2013/06/12 23:03:51
same nit about * versus &
ddorwin
2013/06/12 23:55:54
Done. (Same.)
| |
52 ~MediaKeySession(); | 58 ~MediaKeySession(); |
53 | 59 |
54 const String& keySystem() const { return m_keySystem; } | 60 const String& keySystem() const { return m_keySystem; } |
55 const String& sessionId() const; | 61 String sessionId() const; |
56 | 62 |
57 void setError(MediaKeyError*); | 63 void setError(MediaKeyError*); |
58 MediaKeyError* error() { return m_error.get(); } | 64 MediaKeyError* error() { return m_error.get(); } |
59 | 65 |
60 void setKeys(MediaKeys* keys) { m_keys = keys; } | |
61 MediaKeys* keys() const { return m_keys; } | |
62 | |
63 void generateKeyRequest(const String& mimeType, Uint8Array* initData); | 66 void generateKeyRequest(const String& mimeType, Uint8Array* initData); |
64 void update(Uint8Array* key, ExceptionCode&); | 67 void update(Uint8Array* key, ExceptionCode&); |
65 void close(); | 68 void close(); |
66 | 69 |
67 using RefCounted<MediaKeySession>::ref; | 70 using RefCounted<MediaKeySession>::ref; |
68 using RefCounted<MediaKeySession>::deref; | 71 using RefCounted<MediaKeySession>::deref; |
69 | 72 |
70 void enqueueEvent(PassRefPtr<Event>); | 73 void enqueueEvent(PassRefPtr<Event>); |
71 | 74 |
72 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyadded); | 75 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyadded); |
73 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyerror); | 76 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyerror); |
74 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeymessage); | 77 DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeymessage); |
75 | 78 |
76 virtual const AtomicString& interfaceName() const OVERRIDE; | 79 virtual const AtomicString& interfaceName() const OVERRIDE; |
77 virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE; | 80 virtual ScriptExecutionContext* scriptExecutionContext() const OVERRIDE; |
78 | 81 |
79 protected: | 82 private: |
80 MediaKeySession(ScriptExecutionContext*, MediaKeys*, const String& keySystem ); | 83 MediaKeySession(ScriptExecutionContext*, ContentDecryptionModule&, MediaKeys *); |
81 void keyRequestTimerFired(Timer<MediaKeySession>*); | 84 void keyRequestTimerFired(Timer<MediaKeySession>*); |
82 void addKeyTimerFired(Timer<MediaKeySession>*); | 85 void addKeyTimerFired(Timer<MediaKeySession>*); |
83 | 86 |
84 MediaKeys* m_keys; | 87 // ContentDecryptionModuleSessionClient |
85 String m_keySystem; | 88 virtual void keyAdded() OVERRIDE; |
86 String m_sessionId; | 89 virtual void keyError(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE; |
90 virtual void keyMessage(const unsigned char* message, size_t messageLength, const KURL& destinationURL) OVERRIDE; | |
91 | |
92 const String m_keySystem; | |
abarth-chromium
2013/06/12 23:03:51
We typically don't use const for member variables.
ddorwin
2013/06/12 23:55:54
Done. (It was more an indication that the value is
| |
87 RefPtr<MediaKeyError> m_error; | 93 RefPtr<MediaKeyError> m_error; |
88 OwnPtr<GenericEventQueue> m_asyncEventQueue; | 94 OwnPtr<GenericEventQueue> m_asyncEventQueue; |
89 OwnPtr<CDMSession> m_session; | 95 OwnPtr<ContentDecryptionModuleSession> m_session; |
96 // Used to remove the reference from the parent MediaKeys when close()'d. | |
97 MediaKeys* m_keys; | |
90 | 98 |
91 struct PendingKeyRequest { | 99 struct PendingKeyRequest { |
92 PendingKeyRequest(const String& mimeType, Uint8Array* initData) : mimeTy pe(mimeType), initData(initData) { } | 100 PendingKeyRequest(const String& mimeType, Uint8Array* initData) : mimeTy pe(mimeType), initData(initData) { } |
93 String mimeType; | 101 String mimeType; |
94 RefPtr<Uint8Array> initData; | 102 RefPtr<Uint8Array> initData; |
95 }; | 103 }; |
96 Deque<PendingKeyRequest> m_pendingKeyRequests; | 104 Deque<PendingKeyRequest> m_pendingKeyRequests; |
97 Timer<MediaKeySession> m_keyRequestTimer; | 105 Timer<MediaKeySession> m_keyRequestTimer; |
98 | 106 |
99 Deque<RefPtr<Uint8Array> > m_pendingKeys; | 107 Deque<RefPtr<Uint8Array> > m_pendingKeys; |
100 Timer<MediaKeySession> m_addKeyTimer; | 108 Timer<MediaKeySession> m_addKeyTimer; |
101 | 109 |
102 private: | 110 private: |
103 virtual void refEventTarget() OVERRIDE { ref(); } | 111 virtual void refEventTarget() OVERRIDE { ref(); } |
104 virtual void derefEventTarget() OVERRIDE { deref(); } | 112 virtual void derefEventTarget() OVERRIDE { deref(); } |
105 | 113 |
106 virtual EventTargetData* eventTargetData() OVERRIDE { return &m_eventTargetD ata; } | 114 virtual EventTargetData* eventTargetData() OVERRIDE { return &m_eventTargetD ata; } |
107 virtual EventTargetData* ensureEventTargetData() OVERRIDE { return &m_eventT argetData; } | 115 virtual EventTargetData* ensureEventTargetData() OVERRIDE { return &m_eventT argetData; } |
108 | 116 |
109 EventTargetData m_eventTargetData; | 117 EventTargetData m_eventTargetData; |
110 }; | 118 }; |
111 | 119 |
112 } | 120 } |
113 | 121 |
114 #endif // ENABLE(ENCRYPTED_MEDIA_V2) | |
115 | |
116 #endif // MediaKeySession_h | 122 #endif // MediaKeySession_h |
OLD | NEW |