| 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 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "bindings/core/v8/ScriptPromiseProperty.h" | 29 #include "bindings/core/v8/ScriptPromiseProperty.h" |
| 30 #include "core/dom/ActiveDOMObject.h" | 30 #include "core/dom/ActiveDOMObject.h" |
| 31 #include "core/dom/DOMException.h" | 31 #include "core/dom/DOMException.h" |
| 32 #include "modules/EventTargetModules.h" | 32 #include "modules/EventTargetModules.h" |
| 33 #include "platform/Timer.h" | 33 #include "platform/Timer.h" |
| 34 #include "platform/heap/Handle.h" | 34 #include "platform/heap/Handle.h" |
| 35 #include "public/platform/WebContentDecryptionModuleSession.h" | 35 #include "public/platform/WebContentDecryptionModuleSession.h" |
| 36 #include "wtf/Forward.h" | 36 #include "wtf/Forward.h" |
| 37 | 37 |
| 38 namespace blink { | 38 namespace blink { |
| 39 class WebContentDecryptionModule; | |
| 40 class WebString; | |
| 41 } | |
| 42 | |
| 43 namespace blink { | |
| 44 | 39 |
| 45 class ScriptPromise; | 40 class ScriptPromise; |
| 46 class ScriptState; | 41 class ScriptState; |
| 47 class GenericEventQueue; | 42 class GenericEventQueue; |
| 48 class MediaKeyError; | 43 class MediaKeyError; |
| 49 class MediaKeys; | 44 class MediaKeys; |
| 45 class WebContentDecryptionModule; |
| 46 class WebString; |
| 50 | 47 |
| 51 // References are held by JS only. However, even if all JS references are | 48 // References are held by JS only. However, even if all JS references are |
| 52 // dropped, it won't be garbage collected until close event received or | 49 // dropped, it won't be garbage collected until close event received or |
| 53 // MediaKeys goes away (as determined by the validity of a WeakPtr). This allows | 50 // MediaKeys goes away (as determined by the validity of a WeakPtr). This allows |
| 54 // the CDM to continue to fire events for this session, as long as the session | 51 // the CDM to continue to fire events for this session, as long as the session |
| 55 // is open. | 52 // is open. |
| 56 // | 53 // |
| 57 // WeakPtr<MediaKeys> is used instead of having MediaKeys and MediaKeySession | 54 // WeakPtr<MediaKeys> is used instead of having MediaKeys and MediaKeySession |
| 58 // keep references to each other, and then having to inform the other object | 55 // keep references to each other, and then having to inform the other object |
| 59 // when it gets destroyed. | 56 // when it gets destroyed. |
| 60 // | 57 // |
| 61 // Because this object controls the lifetime of the WebContentDecryptionModuleSe
ssion, | 58 // Because this object controls the lifetime of the WebContentDecryptionModuleSe
ssion, |
| 62 // it may outlive any JavaScript references as long as the MediaKeys object is a
live. | 59 // it may outlive any JavaScript references as long as the MediaKeys object is a
live. |
| 63 // The WebContentDecryptionModuleSession has the same lifetime as this object. | 60 // The WebContentDecryptionModuleSession has the same lifetime as this object. |
| 64 class MediaKeySession FINAL | 61 class MediaKeySession FINAL |
| 65 : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<MediaKeyS
ession>, public ActiveDOMObject, public EventTargetWithInlineData | 62 : public RefCountedGarbageCollectedWillBeGarbageCollectedFinalized<MediaKeyS
ession>, public ActiveDOMObject, public EventTargetWithInlineData |
| 66 , private blink::WebContentDecryptionModuleSession::Client { | 63 , private WebContentDecryptionModuleSession::Client { |
| 67 DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<M
ediaKeySession>); | 64 DEFINE_EVENT_TARGET_REFCOUNTING_WILL_BE_REMOVED(RefCountedGarbageCollected<M
ediaKeySession>); |
| 68 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaKeySession); | 65 WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(MediaKeySession); |
| 69 public: | 66 public: |
| 70 static ScriptPromise create(ScriptState*, MediaKeys*, const String& initData
Type, PassRefPtr<ArrayBuffer> initData, const String& sessionType); | 67 static ScriptPromise create(ScriptState*, MediaKeys*, const String& initData
Type, PassRefPtr<ArrayBuffer> initData, const String& sessionType); |
| 71 virtual ~MediaKeySession(); | 68 virtual ~MediaKeySession(); |
| 72 | 69 |
| 73 const String& keySystem() const { return m_keySystem; } | 70 const String& keySystem() const { return m_keySystem; } |
| 74 String sessionId() const; | 71 String sessionId() const; |
| 75 ScriptPromise closed(ScriptState*); | 72 ScriptPromise closed(ScriptState*); |
| 76 | 73 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 90 // ActiveDOMObject | 87 // ActiveDOMObject |
| 91 virtual bool hasPendingActivity() const OVERRIDE; | 88 virtual bool hasPendingActivity() const OVERRIDE; |
| 92 virtual void stop() OVERRIDE; | 89 virtual void stop() OVERRIDE; |
| 93 | 90 |
| 94 virtual void trace(Visitor*) OVERRIDE; | 91 virtual void trace(Visitor*) OVERRIDE; |
| 95 | 92 |
| 96 private: | 93 private: |
| 97 class PendingAction; | 94 class PendingAction; |
| 98 friend class MediaKeySessionInitializer; | 95 friend class MediaKeySessionInitializer; |
| 99 | 96 |
| 100 MediaKeySession(ExecutionContext*, MediaKeys*, PassOwnPtr<blink::WebContentD
ecryptionModuleSession>); | 97 MediaKeySession(ExecutionContext*, MediaKeys*, PassOwnPtr<WebContentDecrypti
onModuleSession>); |
| 101 void actionTimerFired(Timer<MediaKeySession>*); | 98 void actionTimerFired(Timer<MediaKeySession>*); |
| 102 | 99 |
| 103 // blink::WebContentDecryptionModuleSession::Client | 100 // WebContentDecryptionModuleSession::Client |
| 104 virtual void message(const unsigned char* message, size_t messageLength, con
st blink::WebURL& destinationURL) OVERRIDE; | 101 virtual void message(const unsigned char* message, size_t messageLength, con
st WebURL& destinationURL) OVERRIDE; |
| 105 virtual void ready() OVERRIDE; | 102 virtual void ready() OVERRIDE; |
| 106 virtual void close() OVERRIDE; | 103 virtual void close() OVERRIDE; |
| 107 virtual void error(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE; | 104 virtual void error(MediaKeyErrorCode, unsigned long systemCode) OVERRIDE; |
| 108 virtual void error(blink::WebContentDecryptionModuleException, unsigned long
systemCode, const blink::WebString& errorMessage) OVERRIDE; | 105 virtual void error(WebContentDecryptionModuleException, unsigned long system
Code, const WebString& errorMessage) OVERRIDE; |
| 109 | 106 |
| 110 ScriptPromise updateInternal(ScriptState*, PassRefPtr<ArrayBuffer> response)
; | 107 ScriptPromise updateInternal(ScriptState*, PassRefPtr<ArrayBuffer> response)
; |
| 111 | 108 |
| 112 String m_keySystem; | 109 String m_keySystem; |
| 113 RefPtrWillBeMember<MediaKeyError> m_error; | 110 RefPtrWillBeMember<MediaKeyError> m_error; |
| 114 OwnPtrWillBeMember<GenericEventQueue> m_asyncEventQueue; | 111 OwnPtrWillBeMember<GenericEventQueue> m_asyncEventQueue; |
| 115 OwnPtr<blink::WebContentDecryptionModuleSession> m_session; | 112 OwnPtr<WebContentDecryptionModuleSession> m_session; |
| 116 | 113 |
| 117 // Used to determine if MediaKeys is still active. | 114 // Used to determine if MediaKeys is still active. |
| 118 WeakMember<MediaKeys> m_keys; | 115 WeakMember<MediaKeys> m_keys; |
| 119 | 116 |
| 120 // Is the CDM finished with this session? | 117 // Is the CDM finished with this session? |
| 121 bool m_isClosed; | 118 bool m_isClosed; |
| 122 | 119 |
| 123 // Keep track of the closed promise. | 120 // Keep track of the closed promise. |
| 124 typedef ScriptPromiseProperty<Member<MediaKeySession>, V8UndefinedType, RefP
trWillBeMember<DOMException> > ClosedPromise; | 121 typedef ScriptPromiseProperty<Member<MediaKeySession>, V8UndefinedType, RefP
trWillBeMember<DOMException> > ClosedPromise; |
| 125 Member<ClosedPromise> m_closedPromise; | 122 Member<ClosedPromise> m_closedPromise; |
| 126 | 123 |
| 127 HeapDeque<Member<PendingAction> > m_pendingActions; | 124 HeapDeque<Member<PendingAction> > m_pendingActions; |
| 128 Timer<MediaKeySession> m_actionTimer; | 125 Timer<MediaKeySession> m_actionTimer; |
| 129 }; | 126 }; |
| 130 | 127 |
| 131 } | 128 } // namespace blink |
| 132 | 129 |
| 133 #endif // MediaKeySession_h | 130 #endif // MediaKeySession_h |
| OLD | NEW |