1/*
2 This file is part of the WebKit open source project.
3 This file has been generated by generate-bindings.pl. DO NOT MODIFY!
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20
21#include "config.h"
22
23#if ENABLE(VIDEO)
24
25#include "JSMediaController.h"
26
27#include "JSDOMAttribute.h"
28#include "JSDOMBinding.h"
29#include "JSDOMConstructor.h"
30#include "JSDOMConvertBoolean.h"
31#include "JSDOMConvertInterface.h"
32#include "JSDOMConvertNumbers.h"
33#include "JSDOMConvertStrings.h"
34#include "JSDOMExceptionHandling.h"
35#include "JSDOMGlobalObject.h"
36#include "JSDOMOperation.h"
37#include "JSDOMWrapperCache.h"
38#include "JSTimeRanges.h"
39#include "ScriptExecutionContext.h"
40#include <JavaScriptCore/HeapSnapshotBuilder.h>
41#include <JavaScriptCore/JSCInlines.h>
42#include <wtf/GetPtr.h>
43#include <wtf/PointerPreparations.h>
44#include <wtf/URL.h>
45
46
47namespace WebCore {
48using namespace JSC;
49
50// Functions
51
52JSC::EncodedJSValue JSC_HOST_CALL jsMediaControllerPrototypeFunctionPlay(JSC::ExecState*);
53JSC::EncodedJSValue JSC_HOST_CALL jsMediaControllerPrototypeFunctionPause(JSC::ExecState*);
54JSC::EncodedJSValue JSC_HOST_CALL jsMediaControllerPrototypeFunctionUnpause(JSC::ExecState*);
55
56// Attributes
57
58JSC::EncodedJSValue jsMediaControllerConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
59bool setJSMediaControllerConstructor(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
60JSC::EncodedJSValue jsMediaControllerBuffered(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
61JSC::EncodedJSValue jsMediaControllerSeekable(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
62JSC::EncodedJSValue jsMediaControllerDuration(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
63JSC::EncodedJSValue jsMediaControllerCurrentTime(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
64bool setJSMediaControllerCurrentTime(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
65JSC::EncodedJSValue jsMediaControllerPaused(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
66JSC::EncodedJSValue jsMediaControllerPlayed(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
67JSC::EncodedJSValue jsMediaControllerPlaybackState(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
68JSC::EncodedJSValue jsMediaControllerDefaultPlaybackRate(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
69bool setJSMediaControllerDefaultPlaybackRate(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
70JSC::EncodedJSValue jsMediaControllerPlaybackRate(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
71bool setJSMediaControllerPlaybackRate(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
72JSC::EncodedJSValue jsMediaControllerVolume(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
73bool setJSMediaControllerVolume(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
74JSC::EncodedJSValue jsMediaControllerMuted(JSC::ExecState*, JSC::EncodedJSValue, JSC::PropertyName);
75bool setJSMediaControllerMuted(JSC::ExecState*, JSC::EncodedJSValue, JSC::EncodedJSValue);
76
77class JSMediaControllerPrototype : public JSC::JSNonFinalObject {
78public:
79 using Base = JSC::JSNonFinalObject;
80 static JSMediaControllerPrototype* create(JSC::VM& vm, JSDOMGlobalObject* globalObject, JSC::Structure* structure)
81 {
82 JSMediaControllerPrototype* ptr = new (NotNull, JSC::allocateCell<JSMediaControllerPrototype>(vm.heap)) JSMediaControllerPrototype(vm, globalObject, structure);
83 ptr->finishCreation(vm);
84 return ptr;
85 }
86
87 DECLARE_INFO;
88 static JSC::Structure* createStructure(JSC::VM& vm, JSC::JSGlobalObject* globalObject, JSC::JSValue prototype)
89 {
90 return JSC::Structure::create(vm, globalObject, prototype, JSC::TypeInfo(JSC::ObjectType, StructureFlags), info());
91 }
92
93private:
94 JSMediaControllerPrototype(JSC::VM& vm, JSC::JSGlobalObject*, JSC::Structure* structure)
95 : JSC::JSNonFinalObject(vm, structure)
96 {
97 }
98
99 void finishCreation(JSC::VM&);
100};
101
102using JSMediaControllerConstructor = JSDOMConstructor<JSMediaController>;
103
104template<> EncodedJSValue JSC_HOST_CALL JSMediaControllerConstructor::construct(ExecState* state)
105{
106 VM& vm = state->vm();
107 auto throwScope = DECLARE_THROW_SCOPE(vm);
108 UNUSED_PARAM(throwScope);
109 auto* castedThis = jsCast<JSMediaControllerConstructor*>(state->jsCallee());
110 ASSERT(castedThis);
111 auto* context = castedThis->scriptExecutionContext();
112 if (UNLIKELY(!context))
113 return throwConstructorScriptExecutionContextUnavailableError(*state, throwScope, "MediaController");
114 auto object = MediaController::create(*context);
115 return JSValue::encode(toJSNewlyCreated<IDLInterface<MediaController>>(*state, *castedThis->globalObject(), WTFMove(object)));
116}
117
118template<> JSValue JSMediaControllerConstructor::prototypeForStructure(JSC::VM& vm, const JSDOMGlobalObject& globalObject)
119{
120 return JSEventTarget::getConstructor(vm, &globalObject);
121}
122
123template<> void JSMediaControllerConstructor::initializeProperties(VM& vm, JSDOMGlobalObject& globalObject)
124{
125 putDirect(vm, vm.propertyNames->prototype, JSMediaController::prototype(vm, globalObject), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
126 putDirect(vm, vm.propertyNames->name, jsNontrivialString(&vm, String("MediaController"_s)), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
127 putDirect(vm, vm.propertyNames->length, jsNumber(0), JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::DontEnum);
128}
129
130template<> const ClassInfo JSMediaControllerConstructor::s_info = { "MediaController", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSMediaControllerConstructor) };
131
132/* Hash table for prototype */
133
134static const HashTableValue JSMediaControllerPrototypeTableValues[] =
135{
136 { "constructor", static_cast<unsigned>(JSC::PropertyAttribute::DontEnum), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerConstructor), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSMediaControllerConstructor) } },
137 { "buffered", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerBuffered), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
138 { "seekable", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerSeekable), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
139 { "duration", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerDuration), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
140 { "currentTime", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerCurrentTime), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSMediaControllerCurrentTime) } },
141 { "paused", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerPaused), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
142 { "played", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerPlayed), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
143 { "playbackState", static_cast<unsigned>(JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerPlaybackState), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(0) } },
144 { "defaultPlaybackRate", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerDefaultPlaybackRate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSMediaControllerDefaultPlaybackRate) } },
145 { "playbackRate", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerPlaybackRate), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSMediaControllerPlaybackRate) } },
146 { "volume", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerVolume), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSMediaControllerVolume) } },
147 { "muted", static_cast<unsigned>(JSC::PropertyAttribute::CustomAccessor | JSC::PropertyAttribute::DOMAttribute), NoIntrinsic, { (intptr_t)static_cast<PropertySlot::GetValueFunc>(jsMediaControllerMuted), (intptr_t) static_cast<PutPropertySlot::PutValueFunc>(setJSMediaControllerMuted) } },
148 { "play", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsMediaControllerPrototypeFunctionPlay), (intptr_t) (0) } },
149 { "pause", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsMediaControllerPrototypeFunctionPause), (intptr_t) (0) } },
150 { "unpause", static_cast<unsigned>(JSC::PropertyAttribute::Function), NoIntrinsic, { (intptr_t)static_cast<RawNativeFunction>(jsMediaControllerPrototypeFunctionUnpause), (intptr_t) (0) } },
151};
152
153const ClassInfo JSMediaControllerPrototype::s_info = { "MediaControllerPrototype", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSMediaControllerPrototype) };
154
155void JSMediaControllerPrototype::finishCreation(VM& vm)
156{
157 Base::finishCreation(vm);
158 reifyStaticProperties(vm, JSMediaController::info(), JSMediaControllerPrototypeTableValues, *this);
159}
160
161const ClassInfo JSMediaController::s_info = { "MediaController", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSMediaController) };
162
163JSMediaController::JSMediaController(Structure* structure, JSDOMGlobalObject& globalObject, Ref<MediaController>&& impl)
164 : JSEventTarget(structure, globalObject, WTFMove(impl))
165{
166}
167
168void JSMediaController::finishCreation(VM& vm)
169{
170 Base::finishCreation(vm);
171 ASSERT(inherits(vm, info()));
172
173}
174
175JSObject* JSMediaController::createPrototype(VM& vm, JSDOMGlobalObject& globalObject)
176{
177 return JSMediaControllerPrototype::create(vm, &globalObject, JSMediaControllerPrototype::createStructure(vm, &globalObject, JSEventTarget::prototype(vm, globalObject)));
178}
179
180JSObject* JSMediaController::prototype(VM& vm, JSDOMGlobalObject& globalObject)
181{
182 return getDOMPrototype<JSMediaController>(vm, globalObject);
183}
184
185JSValue JSMediaController::getConstructor(VM& vm, const JSGlobalObject* globalObject)
186{
187 return getDOMConstructor<JSMediaControllerConstructor>(vm, *jsCast<const JSDOMGlobalObject*>(globalObject));
188}
189
190template<> inline JSMediaController* IDLAttribute<JSMediaController>::cast(ExecState& state, EncodedJSValue thisValue)
191{
192 return jsDynamicCast<JSMediaController*>(state.vm(), JSValue::decode(thisValue));
193}
194
195template<> inline JSMediaController* IDLOperation<JSMediaController>::cast(ExecState& state)
196{
197 return jsDynamicCast<JSMediaController*>(state.vm(), state.thisValue());
198}
199
200EncodedJSValue jsMediaControllerConstructor(ExecState* state, EncodedJSValue thisValue, PropertyName)
201{
202 VM& vm = state->vm();
203 auto throwScope = DECLARE_THROW_SCOPE(vm);
204 auto* prototype = jsDynamicCast<JSMediaControllerPrototype*>(vm, JSValue::decode(thisValue));
205 if (UNLIKELY(!prototype))
206 return throwVMTypeError(state, throwScope);
207 return JSValue::encode(JSMediaController::getConstructor(state->vm(), prototype->globalObject()));
208}
209
210bool setJSMediaControllerConstructor(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
211{
212 VM& vm = state->vm();
213 auto throwScope = DECLARE_THROW_SCOPE(vm);
214 auto* prototype = jsDynamicCast<JSMediaControllerPrototype*>(vm, JSValue::decode(thisValue));
215 if (UNLIKELY(!prototype)) {
216 throwVMTypeError(state, throwScope);
217 return false;
218 }
219 // Shadowing a built-in constructor
220 return prototype->putDirect(vm, vm.propertyNames->constructor, JSValue::decode(encodedValue));
221}
222
223static inline JSValue jsMediaControllerBufferedGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
224{
225 UNUSED_PARAM(throwScope);
226 UNUSED_PARAM(state);
227 auto& impl = thisObject.wrapped();
228 JSValue result = toJS<IDLInterface<TimeRanges>>(state, *thisObject.globalObject(), throwScope, impl.buffered());
229 return result;
230}
231
232EncodedJSValue jsMediaControllerBuffered(ExecState* state, EncodedJSValue thisValue, PropertyName)
233{
234 return IDLAttribute<JSMediaController>::get<jsMediaControllerBufferedGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "buffered");
235}
236
237static inline JSValue jsMediaControllerSeekableGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
238{
239 UNUSED_PARAM(throwScope);
240 UNUSED_PARAM(state);
241 auto& impl = thisObject.wrapped();
242 JSValue result = toJS<IDLInterface<TimeRanges>>(state, *thisObject.globalObject(), throwScope, impl.seekable());
243 return result;
244}
245
246EncodedJSValue jsMediaControllerSeekable(ExecState* state, EncodedJSValue thisValue, PropertyName)
247{
248 return IDLAttribute<JSMediaController>::get<jsMediaControllerSeekableGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "seekable");
249}
250
251static inline JSValue jsMediaControllerDurationGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
252{
253 UNUSED_PARAM(throwScope);
254 UNUSED_PARAM(state);
255 auto& impl = thisObject.wrapped();
256 JSValue result = toJS<IDLUnrestrictedDouble>(state, throwScope, impl.duration());
257 return result;
258}
259
260EncodedJSValue jsMediaControllerDuration(ExecState* state, EncodedJSValue thisValue, PropertyName)
261{
262 return IDLAttribute<JSMediaController>::get<jsMediaControllerDurationGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "duration");
263}
264
265static inline JSValue jsMediaControllerCurrentTimeGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
266{
267 UNUSED_PARAM(throwScope);
268 UNUSED_PARAM(state);
269 auto& impl = thisObject.wrapped();
270 JSValue result = toJS<IDLUnrestrictedDouble>(state, throwScope, impl.currentTime());
271 return result;
272}
273
274EncodedJSValue jsMediaControllerCurrentTime(ExecState* state, EncodedJSValue thisValue, PropertyName)
275{
276 return IDLAttribute<JSMediaController>::get<jsMediaControllerCurrentTimeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "currentTime");
277}
278
279static inline bool setJSMediaControllerCurrentTimeSetter(ExecState& state, JSMediaController& thisObject, JSValue value, ThrowScope& throwScope)
280{
281 UNUSED_PARAM(throwScope);
282 auto& impl = thisObject.wrapped();
283 auto nativeValue = convert<IDLUnrestrictedDouble>(state, value);
284 RETURN_IF_EXCEPTION(throwScope, false);
285 AttributeSetter::call(state, throwScope, [&] {
286 return impl.setCurrentTime(WTFMove(nativeValue));
287 });
288 return true;
289}
290
291bool setJSMediaControllerCurrentTime(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
292{
293 return IDLAttribute<JSMediaController>::set<setJSMediaControllerCurrentTimeSetter>(*state, thisValue, encodedValue, "currentTime");
294}
295
296static inline JSValue jsMediaControllerPausedGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
297{
298 UNUSED_PARAM(throwScope);
299 UNUSED_PARAM(state);
300 auto& impl = thisObject.wrapped();
301 JSValue result = toJS<IDLBoolean>(state, throwScope, impl.paused());
302 return result;
303}
304
305EncodedJSValue jsMediaControllerPaused(ExecState* state, EncodedJSValue thisValue, PropertyName)
306{
307 return IDLAttribute<JSMediaController>::get<jsMediaControllerPausedGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "paused");
308}
309
310static inline JSValue jsMediaControllerPlayedGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
311{
312 UNUSED_PARAM(throwScope);
313 UNUSED_PARAM(state);
314 auto& impl = thisObject.wrapped();
315 JSValue result = toJS<IDLInterface<TimeRanges>>(state, *thisObject.globalObject(), throwScope, impl.played());
316 return result;
317}
318
319EncodedJSValue jsMediaControllerPlayed(ExecState* state, EncodedJSValue thisValue, PropertyName)
320{
321 return IDLAttribute<JSMediaController>::get<jsMediaControllerPlayedGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "played");
322}
323
324static inline JSValue jsMediaControllerPlaybackStateGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
325{
326 UNUSED_PARAM(throwScope);
327 UNUSED_PARAM(state);
328 auto& impl = thisObject.wrapped();
329 JSValue result = toJS<IDLDOMString>(state, throwScope, impl.playbackState());
330 return result;
331}
332
333EncodedJSValue jsMediaControllerPlaybackState(ExecState* state, EncodedJSValue thisValue, PropertyName)
334{
335 return IDLAttribute<JSMediaController>::get<jsMediaControllerPlaybackStateGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "playbackState");
336}
337
338static inline JSValue jsMediaControllerDefaultPlaybackRateGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
339{
340 UNUSED_PARAM(throwScope);
341 UNUSED_PARAM(state);
342 auto& impl = thisObject.wrapped();
343 JSValue result = toJS<IDLUnrestrictedDouble>(state, throwScope, impl.defaultPlaybackRate());
344 return result;
345}
346
347EncodedJSValue jsMediaControllerDefaultPlaybackRate(ExecState* state, EncodedJSValue thisValue, PropertyName)
348{
349 return IDLAttribute<JSMediaController>::get<jsMediaControllerDefaultPlaybackRateGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "defaultPlaybackRate");
350}
351
352static inline bool setJSMediaControllerDefaultPlaybackRateSetter(ExecState& state, JSMediaController& thisObject, JSValue value, ThrowScope& throwScope)
353{
354 UNUSED_PARAM(throwScope);
355 auto& impl = thisObject.wrapped();
356 auto nativeValue = convert<IDLUnrestrictedDouble>(state, value);
357 RETURN_IF_EXCEPTION(throwScope, false);
358 AttributeSetter::call(state, throwScope, [&] {
359 return impl.setDefaultPlaybackRate(WTFMove(nativeValue));
360 });
361 return true;
362}
363
364bool setJSMediaControllerDefaultPlaybackRate(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
365{
366 return IDLAttribute<JSMediaController>::set<setJSMediaControllerDefaultPlaybackRateSetter>(*state, thisValue, encodedValue, "defaultPlaybackRate");
367}
368
369static inline JSValue jsMediaControllerPlaybackRateGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
370{
371 UNUSED_PARAM(throwScope);
372 UNUSED_PARAM(state);
373 auto& impl = thisObject.wrapped();
374 JSValue result = toJS<IDLUnrestrictedDouble>(state, throwScope, impl.playbackRate());
375 return result;
376}
377
378EncodedJSValue jsMediaControllerPlaybackRate(ExecState* state, EncodedJSValue thisValue, PropertyName)
379{
380 return IDLAttribute<JSMediaController>::get<jsMediaControllerPlaybackRateGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "playbackRate");
381}
382
383static inline bool setJSMediaControllerPlaybackRateSetter(ExecState& state, JSMediaController& thisObject, JSValue value, ThrowScope& throwScope)
384{
385 UNUSED_PARAM(throwScope);
386 auto& impl = thisObject.wrapped();
387 auto nativeValue = convert<IDLUnrestrictedDouble>(state, value);
388 RETURN_IF_EXCEPTION(throwScope, false);
389 AttributeSetter::call(state, throwScope, [&] {
390 return impl.setPlaybackRate(WTFMove(nativeValue));
391 });
392 return true;
393}
394
395bool setJSMediaControllerPlaybackRate(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
396{
397 return IDLAttribute<JSMediaController>::set<setJSMediaControllerPlaybackRateSetter>(*state, thisValue, encodedValue, "playbackRate");
398}
399
400static inline JSValue jsMediaControllerVolumeGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
401{
402 UNUSED_PARAM(throwScope);
403 UNUSED_PARAM(state);
404 auto& impl = thisObject.wrapped();
405 JSValue result = toJS<IDLUnrestrictedDouble>(state, throwScope, impl.volume());
406 return result;
407}
408
409EncodedJSValue jsMediaControllerVolume(ExecState* state, EncodedJSValue thisValue, PropertyName)
410{
411 return IDLAttribute<JSMediaController>::get<jsMediaControllerVolumeGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "volume");
412}
413
414static inline bool setJSMediaControllerVolumeSetter(ExecState& state, JSMediaController& thisObject, JSValue value, ThrowScope& throwScope)
415{
416 UNUSED_PARAM(throwScope);
417 auto& impl = thisObject.wrapped();
418 auto nativeValue = convert<IDLUnrestrictedDouble>(state, value);
419 RETURN_IF_EXCEPTION(throwScope, false);
420 AttributeSetter::call(state, throwScope, [&] {
421 return impl.setVolume(WTFMove(nativeValue));
422 });
423 return true;
424}
425
426bool setJSMediaControllerVolume(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
427{
428 return IDLAttribute<JSMediaController>::set<setJSMediaControllerVolumeSetter>(*state, thisValue, encodedValue, "volume");
429}
430
431static inline JSValue jsMediaControllerMutedGetter(ExecState& state, JSMediaController& thisObject, ThrowScope& throwScope)
432{
433 UNUSED_PARAM(throwScope);
434 UNUSED_PARAM(state);
435 auto& impl = thisObject.wrapped();
436 JSValue result = toJS<IDLBoolean>(state, throwScope, impl.muted());
437 return result;
438}
439
440EncodedJSValue jsMediaControllerMuted(ExecState* state, EncodedJSValue thisValue, PropertyName)
441{
442 return IDLAttribute<JSMediaController>::get<jsMediaControllerMutedGetter, CastedThisErrorBehavior::Assert>(*state, thisValue, "muted");
443}
444
445static inline bool setJSMediaControllerMutedSetter(ExecState& state, JSMediaController& thisObject, JSValue value, ThrowScope& throwScope)
446{
447 UNUSED_PARAM(throwScope);
448 auto& impl = thisObject.wrapped();
449 auto nativeValue = convert<IDLBoolean>(state, value);
450 RETURN_IF_EXCEPTION(throwScope, false);
451 AttributeSetter::call(state, throwScope, [&] {
452 return impl.setMuted(WTFMove(nativeValue));
453 });
454 return true;
455}
456
457bool setJSMediaControllerMuted(ExecState* state, EncodedJSValue thisValue, EncodedJSValue encodedValue)
458{
459 return IDLAttribute<JSMediaController>::set<setJSMediaControllerMutedSetter>(*state, thisValue, encodedValue, "muted");
460}
461
462static inline JSC::EncodedJSValue jsMediaControllerPrototypeFunctionPlayBody(JSC::ExecState* state, typename IDLOperation<JSMediaController>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
463{
464 UNUSED_PARAM(state);
465 UNUSED_PARAM(throwScope);
466 auto& impl = castedThis->wrapped();
467 impl.play();
468 return JSValue::encode(jsUndefined());
469}
470
471EncodedJSValue JSC_HOST_CALL jsMediaControllerPrototypeFunctionPlay(ExecState* state)
472{
473 return IDLOperation<JSMediaController>::call<jsMediaControllerPrototypeFunctionPlayBody>(*state, "play");
474}
475
476static inline JSC::EncodedJSValue jsMediaControllerPrototypeFunctionPauseBody(JSC::ExecState* state, typename IDLOperation<JSMediaController>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
477{
478 UNUSED_PARAM(state);
479 UNUSED_PARAM(throwScope);
480 auto& impl = castedThis->wrapped();
481 impl.pause();
482 return JSValue::encode(jsUndefined());
483}
484
485EncodedJSValue JSC_HOST_CALL jsMediaControllerPrototypeFunctionPause(ExecState* state)
486{
487 return IDLOperation<JSMediaController>::call<jsMediaControllerPrototypeFunctionPauseBody>(*state, "pause");
488}
489
490static inline JSC::EncodedJSValue jsMediaControllerPrototypeFunctionUnpauseBody(JSC::ExecState* state, typename IDLOperation<JSMediaController>::ClassParameter castedThis, JSC::ThrowScope& throwScope)
491{
492 UNUSED_PARAM(state);
493 UNUSED_PARAM(throwScope);
494 auto& impl = castedThis->wrapped();
495 impl.unpause();
496 return JSValue::encode(jsUndefined());
497}
498
499EncodedJSValue JSC_HOST_CALL jsMediaControllerPrototypeFunctionUnpause(ExecState* state)
500{
501 return IDLOperation<JSMediaController>::call<jsMediaControllerPrototypeFunctionUnpauseBody>(*state, "unpause");
502}
503
504void JSMediaController::heapSnapshot(JSCell* cell, HeapSnapshotBuilder& builder)
505{
506 auto* thisObject = jsCast<JSMediaController*>(cell);
507 builder.setWrappedObjectForCell(cell, &thisObject->wrapped());
508 if (thisObject->scriptExecutionContext())
509 builder.setLabelForCell(cell, "url " + thisObject->scriptExecutionContext()->url().string());
510 Base::heapSnapshot(cell, builder);
511}
512
513#if ENABLE(BINDING_INTEGRITY)
514#if PLATFORM(WIN)
515#pragma warning(disable: 4483)
516extern "C" { extern void (*const __identifier("??_7MediaController@WebCore@@6B@")[])(); }
517#else
518extern "C" { extern void* _ZTVN7WebCore15MediaControllerE[]; }
519#endif
520#endif
521
522JSC::JSValue toJSNewlyCreated(JSC::ExecState*, JSDOMGlobalObject* globalObject, Ref<MediaController>&& impl)
523{
524
525#if ENABLE(BINDING_INTEGRITY)
526 void* actualVTablePointer = *(reinterpret_cast<void**>(impl.ptr()));
527#if PLATFORM(WIN)
528 void* expectedVTablePointer = WTF_PREPARE_VTBL_POINTER_FOR_INSPECTION(__identifier("??_7MediaController@WebCore@@6B@"));
529#else
530 void* expectedVTablePointer = WTF_PREPARE_VTBL_POINTER_FOR_INSPECTION(&_ZTVN7WebCore15MediaControllerE[2]);
531#endif
532
533 // If this fails MediaController does not have a vtable, so you need to add the
534 // ImplementationLacksVTable attribute to the interface definition
535 static_assert(std::is_polymorphic<MediaController>::value, "MediaController is not polymorphic");
536
537 // If you hit this assertion you either have a use after free bug, or
538 // MediaController has subclasses. If MediaController has subclasses that get passed
539 // to toJS() we currently require MediaController you to opt out of binding hardening
540 // by adding the SkipVTableValidation attribute to the interface IDL definition
541 RELEASE_ASSERT(actualVTablePointer == expectedVTablePointer);
542#endif
543 return createWrapper<MediaController>(globalObject, WTFMove(impl));
544}
545
546JSC::JSValue toJS(JSC::ExecState* state, JSDOMGlobalObject* globalObject, MediaController& impl)
547{
548 return wrap(state, globalObject, impl);
549}
550
551MediaController* JSMediaController::toWrapped(JSC::VM& vm, JSC::JSValue value)
552{
553 if (auto* wrapper = jsDynamicCast<JSMediaController*>(vm, value))
554 return &wrapper->wrapped();
555 return nullptr;
556}
557
558}
559
560#endif // ENABLE(VIDEO)
561