Remove the Timer parameters from timer callbacks
[WebKit-https.git] / Source / WebCore / Modules / encryptedmedia / MediaKeySession.h
1 /*
2  * Copyright (C) 2013 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
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,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
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
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
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef MediaKeySession_h
27 #define MediaKeySession_h
28
29 #if ENABLE(ENCRYPTED_MEDIA_V2)
30
31 #include "ActiveDOMObject.h"
32 #include "CDMSession.h"
33 #include "EventTarget.h"
34 #include "ExceptionCode.h"
35 #include "GenericEventQueue.h"
36 #include "Timer.h"
37 #include <runtime/Uint8Array.h>
38 #include <wtf/Deque.h>
39 #include <wtf/PassRefPtr.h>
40 #include <wtf/RefCounted.h>
41 #include <wtf/text/WTFString.h>
42
43 namespace WebCore {
44
45 class MediaKeyError;
46 class MediaKeys;
47
48 class MediaKeySession final : public RefCounted<MediaKeySession>, public EventTargetWithInlineData, public ActiveDOMObject, public CDMSessionClient {
49 public:
50     static PassRefPtr<MediaKeySession> create(ScriptExecutionContext*, MediaKeys*, const String& keySystem);
51     ~MediaKeySession();
52
53     const String& keySystem() const { return m_keySystem; }
54     CDMSession* session() { return m_session.get(); }
55     const String& sessionId() const;
56
57     void setError(MediaKeyError*);
58     MediaKeyError* error() { return m_error.get(); }
59
60     void setKeys(MediaKeys* keys) { m_keys = keys; }
61     MediaKeys* keys() const { return m_keys; }
62
63     void generateKeyRequest(const String& mimeType, Uint8Array* initData);
64     void update(Uint8Array* key, ExceptionCode&);
65
66     bool isClosed() const { return !m_session; }
67     void close();
68
69     using RefCounted<MediaKeySession>::ref;
70     using RefCounted<MediaKeySession>::deref;
71
72     void enqueueEvent(PassRefPtr<Event>);
73
74     // ActiveDOMObject
75     virtual bool hasPendingActivity() const override { return (m_keys && !isClosed()) || m_asyncEventQueue.hasPendingEvents(); }
76     virtual void stop() override { close(); }
77
78     DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyadded);
79     DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeyerror);
80     DEFINE_ATTRIBUTE_EVENT_LISTENER(webkitkeymessage);
81
82     virtual EventTargetInterface eventTargetInterface() const override { return MediaKeySessionEventTargetInterfaceType; }
83     virtual ScriptExecutionContext* scriptExecutionContext() const override { return ActiveDOMObject::scriptExecutionContext(); }
84
85 protected:
86     MediaKeySession(ScriptExecutionContext*, MediaKeys*, const String& keySystem);
87     void keyRequestTimerFired();
88     void addKeyTimerFired();
89
90     // CDMSessionClient
91     virtual void sendMessage(Uint8Array*, String destinationURL);
92     virtual void sendError(MediaKeyErrorCode, unsigned long systemCode);
93
94     MediaKeys* m_keys;
95     String m_keySystem;
96     String m_sessionId;
97     RefPtr<MediaKeyError> m_error;
98     GenericEventQueue m_asyncEventQueue;
99     std::unique_ptr<CDMSession> m_session;
100
101     struct PendingKeyRequest {
102         PendingKeyRequest(const String& mimeType, Uint8Array* initData) : mimeType(mimeType), initData(initData) { }
103         String mimeType;
104         RefPtr<Uint8Array> initData;
105     };
106     Deque<PendingKeyRequest> m_pendingKeyRequests;
107     Timer m_keyRequestTimer;
108
109     Deque<RefPtr<Uint8Array>> m_pendingKeys;
110     Timer m_addKeyTimer;
111
112 private:
113     virtual void refEventTarget() override { ref(); }
114     virtual void derefEventTarget() override { deref(); }
115 };
116
117 }
118
119 #endif // ENABLE(ENCRYPTED_MEDIA_V2)
120
121 #endif // MediaKeySession_h