Line data Source code
1 : /* THIS FILE IS AUTOGENERATED FROM MozPowerManager.webidl BY Codegen.py - DO NOT EDIT */
2 :
3 : #include "MozPowerManagerBinding.h"
4 : #include "WrapperFactory.h"
5 : #include "jsapi.h"
6 : #include "mozilla/FloatingPoint.h"
7 : #include "mozilla/OwningNonNull.h"
8 : #include "mozilla/dom/BindingUtils.h"
9 : #include "mozilla/dom/DOMJSClass.h"
10 : #include "mozilla/dom/NonRefcountedDOMObject.h"
11 : #include "mozilla/dom/PowerManager.h"
12 : #include "mozilla/dom/PrimitiveConversions.h"
13 : #include "mozilla/dom/XrayExpandoClass.h"
14 : #include "nsContentUtils.h"
15 : #include "nsIDOMWakeLockListener.h"
16 :
17 : namespace mozilla {
18 : namespace dom {
19 :
20 : namespace FactoryResetReasonValues {
21 : extern const EnumEntry strings[4] = {
22 : {"normal", 6},
23 : {"wipe", 4},
24 : {"root", 4},
25 : { nullptr, 0 }
26 : };
27 : } // namespace FactoryResetReasonValues
28 :
29 : bool
30 0 : ToJSValue(JSContext* aCx, FactoryResetReason aArgument, JS::MutableHandle<JS::Value> aValue)
31 : {
32 0 : MOZ_ASSERT(uint32_t(aArgument) < ArrayLength(FactoryResetReasonValues::strings));
33 : JSString* resultStr =
34 0 : JS_NewStringCopyN(aCx, FactoryResetReasonValues::strings[uint32_t(aArgument)].value,
35 0 : FactoryResetReasonValues::strings[uint32_t(aArgument)].length);
36 0 : if (!resultStr) {
37 0 : return false;
38 : }
39 0 : aValue.setString(resultStr);
40 0 : return true;
41 : }
42 :
43 :
44 : namespace MozPowerManagerBinding {
45 :
46 : static bool
47 0 : powerOff(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, const JSJitMethodCallArgs& args)
48 : {
49 0 : binding_detail::FastErrorResult rv;
50 0 : self->PowerOff(rv);
51 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
52 0 : return false;
53 : }
54 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
55 0 : args.rval().setUndefined();
56 0 : return true;
57 : }
58 :
59 : static const JSJitInfo powerOff_methodinfo = {
60 : { (JSJitGetterOp)powerOff },
61 : { prototypes::id::MozPowerManager },
62 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
63 : JSJitInfo::Method,
64 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
65 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
66 : false, /* isInfallible. False in setters. */
67 : false, /* isMovable. Not relevant for setters. */
68 : false, /* isEliminatable. Not relevant for setters. */
69 : false, /* isAlwaysInSlot. Only relevant for getters. */
70 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
71 : false, /* isTypedMethod. Only relevant for methods. */
72 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
73 : };
74 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
75 : static_assert(0 < 1, "There is no slot for us");
76 :
77 : static bool
78 0 : reboot(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, const JSJitMethodCallArgs& args)
79 : {
80 0 : binding_detail::FastErrorResult rv;
81 0 : self->Reboot(rv);
82 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
83 0 : return false;
84 : }
85 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
86 0 : args.rval().setUndefined();
87 0 : return true;
88 : }
89 :
90 : static const JSJitInfo reboot_methodinfo = {
91 : { (JSJitGetterOp)reboot },
92 : { prototypes::id::MozPowerManager },
93 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
94 : JSJitInfo::Method,
95 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
96 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
97 : false, /* isInfallible. False in setters. */
98 : false, /* isMovable. Not relevant for setters. */
99 : false, /* isEliminatable. Not relevant for setters. */
100 : false, /* isAlwaysInSlot. Only relevant for getters. */
101 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
102 : false, /* isTypedMethod. Only relevant for methods. */
103 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
104 : };
105 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
106 : static_assert(0 < 1, "There is no slot for us");
107 :
108 : static bool
109 0 : factoryReset(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, const JSJitMethodCallArgs& args)
110 : {
111 : FactoryResetReason arg0;
112 0 : if (args.hasDefined(0)) {
113 : {
114 : int index;
115 0 : if (!FindEnumStringIndex<true>(cx, args[0], FactoryResetReasonValues::strings, "FactoryResetReason", "Argument 1 of MozPowerManager.factoryReset", &index)) {
116 0 : return false;
117 : }
118 0 : MOZ_ASSERT(index >= 0);
119 0 : arg0 = static_cast<FactoryResetReason>(index);
120 : }
121 : } else {
122 0 : arg0 = FactoryResetReason::Normal;
123 : }
124 0 : self->FactoryReset(arg0);
125 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
126 0 : args.rval().setUndefined();
127 0 : return true;
128 : }
129 :
130 : static const JSJitInfo factoryReset_methodinfo = {
131 : { (JSJitGetterOp)factoryReset },
132 : { prototypes::id::MozPowerManager },
133 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
134 : JSJitInfo::Method,
135 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
136 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
137 : false, /* isInfallible. False in setters. */
138 : false, /* isMovable. Not relevant for setters. */
139 : false, /* isEliminatable. Not relevant for setters. */
140 : false, /* isAlwaysInSlot. Only relevant for getters. */
141 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
142 : false, /* isTypedMethod. Only relevant for methods. */
143 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
144 : };
145 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
146 : static_assert(0 < 1, "There is no slot for us");
147 :
148 : static bool
149 0 : addWakeLockListener(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, const JSJitMethodCallArgs& args)
150 : {
151 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
152 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "MozPowerManager.addWakeLockListener");
153 : }
154 : nsIDOMMozWakeLockListener* arg0;
155 0 : RefPtr<nsIDOMMozWakeLockListener> arg0_holder;
156 0 : if (args[0].isObject()) {
157 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
158 0 : if (NS_FAILED(UnwrapArg<nsIDOMMozWakeLockListener>(cx, source, getter_AddRefs(arg0_holder)))) {
159 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of MozPowerManager.addWakeLockListener", "MozWakeLockListener");
160 0 : return false;
161 : }
162 0 : MOZ_ASSERT(arg0_holder);
163 0 : arg0 = arg0_holder;
164 : } else {
165 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of MozPowerManager.addWakeLockListener");
166 0 : return false;
167 : }
168 0 : self->AddWakeLockListener(NonNullHelper(arg0));
169 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
170 0 : args.rval().setUndefined();
171 0 : return true;
172 : }
173 :
174 : static const JSJitInfo addWakeLockListener_methodinfo = {
175 : { (JSJitGetterOp)addWakeLockListener },
176 : { prototypes::id::MozPowerManager },
177 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
178 : JSJitInfo::Method,
179 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
180 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
181 : false, /* isInfallible. False in setters. */
182 : false, /* isMovable. Not relevant for setters. */
183 : false, /* isEliminatable. Not relevant for setters. */
184 : false, /* isAlwaysInSlot. Only relevant for getters. */
185 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
186 : false, /* isTypedMethod. Only relevant for methods. */
187 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
188 : };
189 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
190 : static_assert(0 < 1, "There is no slot for us");
191 :
192 : static bool
193 0 : removeWakeLockListener(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, const JSJitMethodCallArgs& args)
194 : {
195 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
196 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "MozPowerManager.removeWakeLockListener");
197 : }
198 : nsIDOMMozWakeLockListener* arg0;
199 0 : RefPtr<nsIDOMMozWakeLockListener> arg0_holder;
200 0 : if (args[0].isObject()) {
201 0 : JS::Rooted<JSObject*> source(cx, &args[0].toObject());
202 0 : if (NS_FAILED(UnwrapArg<nsIDOMMozWakeLockListener>(cx, source, getter_AddRefs(arg0_holder)))) {
203 0 : ThrowErrorMessage(cx, MSG_DOES_NOT_IMPLEMENT_INTERFACE, "Argument 1 of MozPowerManager.removeWakeLockListener", "MozWakeLockListener");
204 0 : return false;
205 : }
206 0 : MOZ_ASSERT(arg0_holder);
207 0 : arg0 = arg0_holder;
208 : } else {
209 0 : ThrowErrorMessage(cx, MSG_NOT_OBJECT, "Argument 1 of MozPowerManager.removeWakeLockListener");
210 0 : return false;
211 : }
212 0 : self->RemoveWakeLockListener(NonNullHelper(arg0));
213 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
214 0 : args.rval().setUndefined();
215 0 : return true;
216 : }
217 :
218 : static const JSJitInfo removeWakeLockListener_methodinfo = {
219 : { (JSJitGetterOp)removeWakeLockListener },
220 : { prototypes::id::MozPowerManager },
221 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
222 : JSJitInfo::Method,
223 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
224 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
225 : false, /* isInfallible. False in setters. */
226 : false, /* isMovable. Not relevant for setters. */
227 : false, /* isEliminatable. Not relevant for setters. */
228 : false, /* isAlwaysInSlot. Only relevant for getters. */
229 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
230 : false, /* isTypedMethod. Only relevant for methods. */
231 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
232 : };
233 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
234 : static_assert(0 < 1, "There is no slot for us");
235 :
236 : static bool
237 0 : getWakeLockState(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, const JSJitMethodCallArgs& args)
238 : {
239 0 : if (MOZ_UNLIKELY(args.length() < 1)) {
240 0 : return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "MozPowerManager.getWakeLockState");
241 : }
242 0 : binding_detail::FakeString arg0;
243 0 : if (!ConvertJSValueToString(cx, args[0], eStringify, eStringify, arg0)) {
244 0 : return false;
245 : }
246 0 : binding_detail::FastErrorResult rv;
247 0 : DOMString result;
248 0 : self->GetWakeLockState(NonNullHelper(Constify(arg0)), result, rv);
249 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
250 0 : return false;
251 : }
252 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
253 0 : if (!xpc::NonVoidStringToJsval(cx, result, args.rval())) {
254 0 : return false;
255 : }
256 0 : return true;
257 : }
258 :
259 : static const JSJitInfo getWakeLockState_methodinfo = {
260 : { (JSJitGetterOp)getWakeLockState },
261 : { prototypes::id::MozPowerManager },
262 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
263 : JSJitInfo::Method,
264 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
265 : JSVAL_TYPE_STRING, /* returnType. Not relevant for setters. */
266 : false, /* isInfallible. False in setters. */
267 : false, /* isMovable. Not relevant for setters. */
268 : false, /* isEliminatable. Not relevant for setters. */
269 : false, /* isAlwaysInSlot. Only relevant for getters. */
270 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
271 : false, /* isTypedMethod. Only relevant for methods. */
272 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
273 : };
274 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
275 : static_assert(0 < 1, "There is no slot for us");
276 :
277 : static bool
278 0 : get_screenEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitGetterCallArgs args)
279 : {
280 0 : bool result(self->ScreenEnabled());
281 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
282 0 : args.rval().setBoolean(result);
283 0 : return true;
284 : }
285 :
286 : static bool
287 0 : set_screenEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitSetterCallArgs args)
288 : {
289 : bool arg0;
290 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
291 0 : return false;
292 : }
293 0 : self->SetScreenEnabled(arg0);
294 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
295 :
296 0 : return true;
297 : }
298 :
299 : static const JSJitInfo screenEnabled_getterinfo = {
300 : { (JSJitGetterOp)get_screenEnabled },
301 : { prototypes::id::MozPowerManager },
302 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
303 : JSJitInfo::Getter,
304 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
305 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
306 : true, /* isInfallible. False in setters. */
307 : false, /* isMovable. Not relevant for setters. */
308 : false, /* isEliminatable. Not relevant for setters. */
309 : false, /* isAlwaysInSlot. Only relevant for getters. */
310 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
311 : false, /* isTypedMethod. Only relevant for methods. */
312 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
313 : };
314 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
315 : static_assert(0 < 1, "There is no slot for us");
316 : static const JSJitInfo screenEnabled_setterinfo = {
317 : { (JSJitGetterOp)set_screenEnabled },
318 : { prototypes::id::MozPowerManager },
319 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
320 : JSJitInfo::Setter,
321 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
322 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
323 : false, /* isInfallible. False in setters. */
324 : false, /* isMovable. Not relevant for setters. */
325 : false, /* isEliminatable. Not relevant for setters. */
326 : false, /* isAlwaysInSlot. Only relevant for getters. */
327 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
328 : false, /* isTypedMethod. Only relevant for methods. */
329 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
330 : };
331 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
332 : static_assert(0 < 1, "There is no slot for us");
333 :
334 : static bool
335 0 : get_keyLightEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitGetterCallArgs args)
336 : {
337 0 : bool result(self->KeyLightEnabled());
338 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
339 0 : args.rval().setBoolean(result);
340 0 : return true;
341 : }
342 :
343 : static bool
344 0 : set_keyLightEnabled(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitSetterCallArgs args)
345 : {
346 : bool arg0;
347 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
348 0 : return false;
349 : }
350 0 : self->SetKeyLightEnabled(arg0);
351 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
352 :
353 0 : return true;
354 : }
355 :
356 : static const JSJitInfo keyLightEnabled_getterinfo = {
357 : { (JSJitGetterOp)get_keyLightEnabled },
358 : { prototypes::id::MozPowerManager },
359 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
360 : JSJitInfo::Getter,
361 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
362 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
363 : true, /* isInfallible. False in setters. */
364 : false, /* isMovable. Not relevant for setters. */
365 : false, /* isEliminatable. Not relevant for setters. */
366 : false, /* isAlwaysInSlot. Only relevant for getters. */
367 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
368 : false, /* isTypedMethod. Only relevant for methods. */
369 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
370 : };
371 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
372 : static_assert(0 < 1, "There is no slot for us");
373 : static const JSJitInfo keyLightEnabled_setterinfo = {
374 : { (JSJitGetterOp)set_keyLightEnabled },
375 : { prototypes::id::MozPowerManager },
376 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
377 : JSJitInfo::Setter,
378 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
379 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
380 : false, /* isInfallible. False in setters. */
381 : false, /* isMovable. Not relevant for setters. */
382 : false, /* isEliminatable. Not relevant for setters. */
383 : false, /* isAlwaysInSlot. Only relevant for getters. */
384 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
385 : false, /* isTypedMethod. Only relevant for methods. */
386 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
387 : };
388 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
389 : static_assert(0 < 1, "There is no slot for us");
390 :
391 : static bool
392 0 : get_screenBrightness(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitGetterCallArgs args)
393 : {
394 0 : double result(self->ScreenBrightness());
395 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
396 0 : args.rval().set(JS_NumberValue(double(result)));
397 0 : return true;
398 : }
399 :
400 : static bool
401 0 : set_screenBrightness(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitSetterCallArgs args)
402 : {
403 : double arg0;
404 0 : if (!ValueToPrimitive<double, eDefault>(cx, args[0], &arg0)) {
405 0 : return false;
406 0 : } else if (!mozilla::IsFinite(arg0)) {
407 0 : ThrowErrorMessage(cx, MSG_NOT_FINITE, "Value being assigned to MozPowerManager.screenBrightness");
408 0 : return false;
409 : }
410 0 : binding_detail::FastErrorResult rv;
411 0 : self->SetScreenBrightness(arg0, rv);
412 0 : if (MOZ_UNLIKELY(rv.MaybeSetPendingException(cx))) {
413 0 : return false;
414 : }
415 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
416 :
417 0 : return true;
418 : }
419 :
420 : static const JSJitInfo screenBrightness_getterinfo = {
421 : { (JSJitGetterOp)get_screenBrightness },
422 : { prototypes::id::MozPowerManager },
423 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
424 : JSJitInfo::Getter,
425 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
426 : JSVAL_TYPE_DOUBLE, /* returnType. Not relevant for setters. */
427 : true, /* isInfallible. False in setters. */
428 : false, /* isMovable. Not relevant for setters. */
429 : false, /* isEliminatable. Not relevant for setters. */
430 : false, /* isAlwaysInSlot. Only relevant for getters. */
431 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
432 : false, /* isTypedMethod. Only relevant for methods. */
433 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
434 : };
435 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
436 : static_assert(0 < 1, "There is no slot for us");
437 : static const JSJitInfo screenBrightness_setterinfo = {
438 : { (JSJitGetterOp)set_screenBrightness },
439 : { prototypes::id::MozPowerManager },
440 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
441 : JSJitInfo::Setter,
442 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
443 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
444 : false, /* isInfallible. False in setters. */
445 : false, /* isMovable. Not relevant for setters. */
446 : false, /* isEliminatable. Not relevant for setters. */
447 : false, /* isAlwaysInSlot. Only relevant for getters. */
448 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
449 : false, /* isTypedMethod. Only relevant for methods. */
450 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
451 : };
452 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
453 : static_assert(0 < 1, "There is no slot for us");
454 :
455 : static bool
456 0 : get_cpuSleepAllowed(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitGetterCallArgs args)
457 : {
458 0 : bool result(self->CpuSleepAllowed());
459 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
460 0 : args.rval().setBoolean(result);
461 0 : return true;
462 : }
463 :
464 : static bool
465 0 : set_cpuSleepAllowed(JSContext* cx, JS::Handle<JSObject*> obj, mozilla::dom::PowerManager* self, JSJitSetterCallArgs args)
466 : {
467 : bool arg0;
468 0 : if (!ValueToPrimitive<bool, eDefault>(cx, args[0], &arg0)) {
469 0 : return false;
470 : }
471 0 : self->SetCpuSleepAllowed(arg0);
472 0 : MOZ_ASSERT(!JS_IsExceptionPending(cx));
473 :
474 0 : return true;
475 : }
476 :
477 : static const JSJitInfo cpuSleepAllowed_getterinfo = {
478 : { (JSJitGetterOp)get_cpuSleepAllowed },
479 : { prototypes::id::MozPowerManager },
480 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
481 : JSJitInfo::Getter,
482 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
483 : JSVAL_TYPE_BOOLEAN, /* returnType. Not relevant for setters. */
484 : true, /* isInfallible. False in setters. */
485 : false, /* isMovable. Not relevant for setters. */
486 : false, /* isEliminatable. Not relevant for setters. */
487 : false, /* isAlwaysInSlot. Only relevant for getters. */
488 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
489 : false, /* isTypedMethod. Only relevant for methods. */
490 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
491 : };
492 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
493 : static_assert(0 < 1, "There is no slot for us");
494 : static const JSJitInfo cpuSleepAllowed_setterinfo = {
495 : { (JSJitGetterOp)set_cpuSleepAllowed },
496 : { prototypes::id::MozPowerManager },
497 : { PrototypeTraits<prototypes::id::MozPowerManager>::Depth },
498 : JSJitInfo::Setter,
499 : JSJitInfo::AliasEverything, /* aliasSet. Not relevant for setters. */
500 : JSVAL_TYPE_UNDEFINED, /* returnType. Not relevant for setters. */
501 : false, /* isInfallible. False in setters. */
502 : false, /* isMovable. Not relevant for setters. */
503 : false, /* isEliminatable. Not relevant for setters. */
504 : false, /* isAlwaysInSlot. Only relevant for getters. */
505 : false, /* isLazilyCachedInSlot. Only relevant for getters. */
506 : false, /* isTypedMethod. Only relevant for methods. */
507 : 0 /* Reserved slot index, if we're stored in a slot, else 0. */
508 : };
509 : static_assert(0 <= JSJitInfo::maxSlotIndex, "We won't fit");
510 : static_assert(0 < 1, "There is no slot for us");
511 :
512 : static bool
513 0 : _addProperty(JSContext* cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JS::Handle<JS::Value> val)
514 : {
515 0 : mozilla::dom::PowerManager* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::PowerManager>(obj);
516 : // We don't want to preserve if we don't have a wrapper, and we
517 : // obviously can't preserve if we're not initialized.
518 0 : if (self && self->GetWrapperPreserveColor()) {
519 0 : PreserveWrapper(self);
520 : }
521 0 : return true;
522 : }
523 :
524 : static void
525 0 : _finalize(js::FreeOp* fop, JSObject* obj)
526 : {
527 0 : mozilla::dom::PowerManager* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::PowerManager>(obj);
528 0 : if (self) {
529 0 : ClearWrapper(self, self, obj);
530 0 : AddForDeferredFinalization<mozilla::dom::PowerManager>(self);
531 : }
532 0 : }
533 :
534 : static void
535 0 : _objectMoved(JSObject* obj, const JSObject* old)
536 : {
537 0 : mozilla::dom::PowerManager* self = UnwrapPossiblyNotInitializedDOMObject<mozilla::dom::PowerManager>(obj);
538 0 : if (self) {
539 0 : UpdateWrapper(self, self, obj, old);
540 : }
541 0 : }
542 :
543 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
544 : #if defined(__clang__)
545 : #pragma clang diagnostic push
546 : #pragma clang diagnostic ignored "-Wmissing-braces"
547 : #endif
548 : static const JSFunctionSpec sMethods_specs[] = {
549 : JS_FNSPEC("powerOff", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&powerOff_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
550 : JS_FNSPEC("reboot", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&reboot_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
551 : JS_FNSPEC("factoryReset", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&factoryReset_methodinfo), 0, JSPROP_ENUMERATE, nullptr),
552 : JS_FNSPEC("addWakeLockListener", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&addWakeLockListener_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
553 : JS_FNSPEC("removeWakeLockListener", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&removeWakeLockListener_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
554 : JS_FNSPEC("getWakeLockState", GenericBindingMethod, reinterpret_cast<const JSJitInfo*>(&getWakeLockState_methodinfo), 1, JSPROP_ENUMERATE, nullptr),
555 : JS_FS_END
556 : };
557 : #if defined(__clang__)
558 : #pragma clang diagnostic pop
559 : #endif
560 :
561 :
562 : // Can't be const because the pref-enabled boolean needs to be writable
563 : static Prefable<const JSFunctionSpec> sMethods[] = {
564 : { nullptr, &sMethods_specs[0] },
565 : { nullptr, nullptr }
566 : };
567 :
568 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
569 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
570 : static_assert(6 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
571 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
572 :
573 : // We deliberately use brace-elision to make Visual Studio produce better initalization code.
574 : #if defined(__clang__)
575 : #pragma clang diagnostic push
576 : #pragma clang diagnostic ignored "-Wmissing-braces"
577 : #endif
578 : static const JSPropertySpec sAttributes_specs[] = {
579 : { "screenEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &screenEnabled_getterinfo, GenericBindingSetter, &screenEnabled_setterinfo },
580 : { "keyLightEnabled", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &keyLightEnabled_getterinfo, GenericBindingSetter, &keyLightEnabled_setterinfo },
581 : { "screenBrightness", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &screenBrightness_getterinfo, GenericBindingSetter, &screenBrightness_setterinfo },
582 : { "cpuSleepAllowed", JSPROP_SHARED | JSPROP_ENUMERATE, GenericBindingGetter, &cpuSleepAllowed_getterinfo, GenericBindingSetter, &cpuSleepAllowed_setterinfo },
583 : { nullptr, 0, nullptr, nullptr, nullptr, nullptr }
584 : };
585 : #if defined(__clang__)
586 : #pragma clang diagnostic pop
587 : #endif
588 :
589 :
590 : // Can't be const because the pref-enabled boolean needs to be writable
591 : static Prefable<const JSPropertySpec> sAttributes[] = {
592 : { nullptr, &sAttributes_specs[0] },
593 : { nullptr, nullptr }
594 : };
595 :
596 : static_assert(1 <= 1ull << NUM_BITS_PROPERTY_INFO_PREF_INDEX,
597 : "We have a prefable index that is >= (1 << NUM_BITS_PROPERTY_INFO_PREF_INDEX)");
598 : static_assert(4 <= 1ull << NUM_BITS_PROPERTY_INFO_SPEC_INDEX,
599 : "We have a spec index that is >= (1 << NUM_BITS_PROPERTY_INFO_SPEC_INDEX)");
600 :
601 :
602 : static uint16_t sNativeProperties_sortedPropertyIndices[10];
603 : static PropertyInfo sNativeProperties_propertyInfos[10];
604 :
605 : static const NativePropertiesN<2> sNativeProperties = {
606 : false, 0,
607 : false, 0,
608 : true, 0 /* sMethods */,
609 : true, 1 /* sAttributes */,
610 : false, 0,
611 : false, 0,
612 : false, 0,
613 : -1,
614 : 10,
615 : sNativeProperties_sortedPropertyIndices,
616 : {
617 : { sMethods, &sNativeProperties_propertyInfos[0] },
618 : { sAttributes, &sNativeProperties_propertyInfos[6] }
619 : }
620 : };
621 : static_assert(10 < 1ull << CHAR_BIT * sizeof(sNativeProperties.propertyInfoCount),
622 : "We have a property info count that is oversized");
623 :
624 : static const DOMIfaceAndProtoJSClass sInterfaceObjectClass = {
625 : {
626 : "Function",
627 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_SLOTS_BASE),
628 : &sBoringInterfaceObjectClassClassOps,
629 : JS_NULL_CLASS_SPEC,
630 : JS_NULL_CLASS_EXT,
631 : &sInterfaceObjectClassObjectOps
632 : },
633 : eInterface,
634 : true,
635 : prototypes::id::MozPowerManager,
636 : PrototypeTraits<prototypes::id::MozPowerManager>::Depth,
637 : sNativePropertyHooks,
638 : "function MozPowerManager() {\n [native code]\n}",
639 : JS::GetRealmFunctionPrototype
640 : };
641 :
642 : static const DOMIfaceAndProtoJSClass sPrototypeClass = {
643 : {
644 : "MozPowerManagerPrototype",
645 : JSCLASS_IS_DOMIFACEANDPROTOJSCLASS | JSCLASS_HAS_RESERVED_SLOTS(DOM_INTERFACE_PROTO_SLOTS_BASE),
646 : JS_NULL_CLASS_OPS,
647 : JS_NULL_CLASS_SPEC,
648 : JS_NULL_CLASS_EXT,
649 : JS_NULL_OBJECT_OPS
650 : },
651 : eInterfacePrototype,
652 : false,
653 : prototypes::id::MozPowerManager,
654 : PrototypeTraits<prototypes::id::MozPowerManager>::Depth,
655 : sNativePropertyHooks,
656 : "[object MozPowerManagerPrototype]",
657 : JS::GetRealmObjectPrototype
658 : };
659 :
660 : bool
661 0 : ConstructorEnabled(JSContext* aCx, JS::Handle<JSObject*> aObj)
662 : {
663 0 : return nsContentUtils::ThreadsafeIsSystemCaller(aCx);
664 : }
665 :
666 : JSObject*
667 0 : DefineDOMInterface(JSContext* aCx, JS::Handle<JSObject*> aGlobal, JS::Handle<jsid> id, bool aDefineOnGlobal)
668 : {
669 0 : return GetConstructorObjectHandle(aCx, aDefineOnGlobal);
670 : }
671 :
672 : static const js::ClassOps sClassOps = {
673 : _addProperty, /* addProperty */
674 : nullptr, /* delProperty */
675 : nullptr, /* getProperty */
676 : nullptr, /* setProperty */
677 : nullptr, /* enumerate */
678 : nullptr, /* newEnumerate */
679 : nullptr, /* resolve */
680 : nullptr, /* mayResolve */
681 : _finalize, /* finalize */
682 : nullptr, /* call */
683 : nullptr, /* hasInstance */
684 : nullptr, /* construct */
685 : nullptr, /* trace */
686 : };
687 :
688 : static const js::ClassExtension sClassExtension = {
689 : nullptr, /* weakmapKeyDelegateOp */
690 : _objectMoved /* objectMovedOp */
691 : };
692 :
693 : static const DOMJSClass sClass = {
694 : { "MozPowerManager",
695 : JSCLASS_IS_DOMJSCLASS | JSCLASS_FOREGROUND_FINALIZE | JSCLASS_HAS_RESERVED_SLOTS(1),
696 : &sClassOps,
697 : JS_NULL_CLASS_SPEC,
698 : &sClassExtension,
699 : JS_NULL_OBJECT_OPS
700 : },
701 : { prototypes::id::MozPowerManager, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count, prototypes::id::_ID_Count },
702 : IsBaseOf<nsISupports, mozilla::dom::PowerManager >::value,
703 : sNativePropertyHooks,
704 : FindAssociatedGlobalForNative<mozilla::dom::PowerManager>::Get,
705 : GetProtoObjectHandle,
706 : GetCCParticipant<mozilla::dom::PowerManager>::Get()
707 : };
708 : static_assert(1 == DOM_INSTANCE_RESERVED_SLOTS,
709 : "Must have the right minimal number of reserved slots.");
710 : static_assert(1 >= 1,
711 : "Must have enough reserved slots.");
712 :
713 : const JSClass*
714 0 : GetJSClass()
715 : {
716 0 : return sClass.ToJSClass();
717 : }
718 :
719 : bool
720 0 : Wrap(JSContext* aCx, mozilla::dom::PowerManager* aObject, nsWrapperCache* aCache, JS::Handle<JSObject*> aGivenProto, JS::MutableHandle<JSObject*> aReflector)
721 : {
722 : MOZ_ASSERT(static_cast<mozilla::dom::PowerManager*>(aObject) ==
723 : reinterpret_cast<mozilla::dom::PowerManager*>(aObject),
724 : "Multiple inheritance for mozilla::dom::PowerManager is broken.");
725 0 : MOZ_ASSERT(ToSupportsIsCorrect(aObject));
726 0 : MOZ_ASSERT_IF(aGivenProto, js::IsObjectInContextCompartment(aGivenProto, aCx));
727 0 : MOZ_ASSERT(!aCache->GetWrapper(),
728 : "You should probably not be using Wrap() directly; use "
729 : "GetOrCreateDOMReflector instead");
730 :
731 0 : MOZ_ASSERT(ToSupportsIsOnPrimaryInheritanceChain(aObject, aCache),
732 : "nsISupports must be on our primary inheritance chain");
733 :
734 0 : JS::Rooted<JSObject*> global(aCx, FindAssociatedGlobal(aCx, aObject->GetParentObject()));
735 0 : if (!global) {
736 0 : return false;
737 : }
738 0 : MOZ_ASSERT(JS_IsGlobalObject(global));
739 0 : MOZ_ASSERT(JS::ObjectIsNotGray(global));
740 :
741 : // That might have ended up wrapping us already, due to the wonders
742 : // of XBL. Check for that, and bail out as needed.
743 0 : aReflector.set(aCache->GetWrapper());
744 0 : if (aReflector) {
745 : #ifdef DEBUG
746 0 : binding_detail::AssertReflectorHasGivenProto(aCx, aReflector, aGivenProto);
747 : #endif // DEBUG
748 0 : return true;
749 : }
750 :
751 0 : JSAutoCompartment ac(aCx, global);
752 0 : JS::Handle<JSObject*> canonicalProto = GetProtoObjectHandle(aCx);
753 0 : if (!canonicalProto) {
754 0 : return false;
755 : }
756 0 : JS::Rooted<JSObject*> proto(aCx);
757 0 : if (aGivenProto) {
758 0 : proto = aGivenProto;
759 : // Unfortunately, while aGivenProto was in the compartment of aCx
760 : // coming in, we changed compartments to that of "parent" so may need
761 : // to wrap the proto here.
762 0 : if (js::GetContextCompartment(aCx) != js::GetObjectCompartment(proto)) {
763 0 : if (!JS_WrapObject(aCx, &proto)) {
764 0 : return false;
765 : }
766 : }
767 : } else {
768 0 : proto = canonicalProto;
769 : }
770 :
771 0 : BindingJSObjectCreator<mozilla::dom::PowerManager> creator(aCx);
772 0 : creator.CreateObject(aCx, sClass.ToJSClass(), proto, aObject, aReflector);
773 0 : if (!aReflector) {
774 0 : return false;
775 : }
776 :
777 0 : aCache->SetWrapper(aReflector);
778 0 : creator.InitializationSucceeded();
779 :
780 0 : MOZ_ASSERT(aCache->GetWrapperPreserveColor() &&
781 : aCache->GetWrapperPreserveColor() == aReflector);
782 : // If proto != canonicalProto, we have to preserve our wrapper;
783 : // otherwise we won't be able to properly recreate it later, since
784 : // we won't know what proto to use. Note that we don't check
785 : // aGivenProto here, since it's entirely possible (and even
786 : // somewhat common) to have a non-null aGivenProto which is the
787 : // same as canonicalProto.
788 0 : if (proto != canonicalProto) {
789 0 : PreserveWrapper(aObject);
790 : }
791 :
792 0 : return true;
793 : }
794 :
795 : const NativePropertyHooks sNativePropertyHooks[] = { {
796 : nullptr,
797 : nullptr,
798 : nullptr,
799 : { sNativeProperties.Upcast(), nullptr },
800 : prototypes::id::MozPowerManager,
801 : constructors::id::MozPowerManager,
802 : nullptr,
803 : &DefaultXrayExpandoObjectClass
804 : } };
805 :
806 : void
807 0 : CreateInterfaceObjects(JSContext* aCx, JS::Handle<JSObject*> aGlobal, ProtoAndIfaceCache& aProtoAndIfaceCache, bool aDefineOnGlobal)
808 : {
809 0 : JS::Rooted<JSObject*> parentProto(aCx, JS::GetRealmObjectPrototype(aCx));
810 0 : if (!parentProto) {
811 0 : return;
812 : }
813 :
814 0 : JS::Rooted<JSObject*> constructorProto(aCx, JS::GetRealmFunctionPrototype(aCx));
815 0 : if (!constructorProto) {
816 0 : return;
817 : }
818 :
819 : static bool sIdsInited = false;
820 0 : if (!sIdsInited && NS_IsMainThread()) {
821 0 : if (!InitIds(aCx, sNativeProperties.Upcast())) {
822 0 : return;
823 : }
824 0 : sIdsInited = true;
825 : }
826 :
827 0 : JS::Heap<JSObject*>* protoCache = &aProtoAndIfaceCache.EntrySlotOrCreate(prototypes::id::MozPowerManager);
828 0 : JS::Heap<JSObject*>* interfaceCache = &aProtoAndIfaceCache.EntrySlotOrCreate(constructors::id::MozPowerManager);
829 0 : dom::CreateInterfaceObjects(aCx, aGlobal, parentProto,
830 : &sPrototypeClass.mBase, protoCache,
831 : constructorProto, &sInterfaceObjectClass.mBase, 0, nullptr,
832 : interfaceCache,
833 : sNativeProperties.Upcast(),
834 : nullptr,
835 : "MozPowerManager", aDefineOnGlobal,
836 : nullptr,
837 0 : false);
838 : }
839 :
840 : JS::Handle<JSObject*>
841 0 : GetProtoObjectHandle(JSContext* aCx)
842 : {
843 : /* Get the interface prototype object for this class. This will create the
844 : object as needed. */
845 0 : bool aDefineOnGlobal = true;
846 :
847 : /* Make sure our global is sane. Hopefully we can remove this sometime */
848 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
849 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
850 0 : return nullptr;
851 : }
852 :
853 : /* Check to see whether the interface objects are already installed */
854 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
855 0 : if (!protoAndIfaceCache.HasEntryInSlot(prototypes::id::MozPowerManager)) {
856 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
857 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
858 : }
859 :
860 : /*
861 : * The object might _still_ be null, but that's OK.
862 : *
863 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
864 : * traced by TraceProtoAndIfaceCache() and its contents are never
865 : * changed after they have been set.
866 : *
867 : * Calling address() avoids the read read barrier that does gray
868 : * unmarking, but it's not possible for the object to be gray here.
869 : */
870 :
871 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(prototypes::id::MozPowerManager);
872 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
873 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
874 : }
875 :
876 : JS::Handle<JSObject*>
877 0 : GetConstructorObjectHandle(JSContext* aCx, bool aDefineOnGlobal)
878 : {
879 : /* Get the interface object for this class. This will create the object as
880 : needed. */
881 :
882 : /* Make sure our global is sane. Hopefully we can remove this sometime */
883 0 : JSObject* global = JS::CurrentGlobalOrNull(aCx);
884 0 : if (!(js::GetObjectClass(global)->flags & JSCLASS_DOM_GLOBAL)) {
885 0 : return nullptr;
886 : }
887 :
888 : /* Check to see whether the interface objects are already installed */
889 0 : ProtoAndIfaceCache& protoAndIfaceCache = *GetProtoAndIfaceCache(global);
890 0 : if (!protoAndIfaceCache.HasEntryInSlot(constructors::id::MozPowerManager)) {
891 0 : JS::Rooted<JSObject*> rootedGlobal(aCx, global);
892 0 : CreateInterfaceObjects(aCx, rootedGlobal, protoAndIfaceCache, aDefineOnGlobal);
893 : }
894 :
895 : /*
896 : * The object might _still_ be null, but that's OK.
897 : *
898 : * Calling fromMarkedLocation() is safe because protoAndIfaceCache is
899 : * traced by TraceProtoAndIfaceCache() and its contents are never
900 : * changed after they have been set.
901 : *
902 : * Calling address() avoids the read read barrier that does gray
903 : * unmarking, but it's not possible for the object to be gray here.
904 : */
905 :
906 0 : const JS::Heap<JSObject*>& entrySlot = protoAndIfaceCache.EntrySlotMustExist(constructors::id::MozPowerManager);
907 0 : MOZ_ASSERT(JS::ObjectIsNotGray(entrySlot));
908 0 : return JS::Handle<JSObject*>::fromMarkedLocation(entrySlot.address());
909 : }
910 :
911 : JSObject*
912 0 : GetConstructorObject(JSContext* aCx)
913 : {
914 0 : return GetConstructorObjectHandle(aCx);
915 : }
916 :
917 : } // namespace MozPowerManagerBinding
918 :
919 :
920 :
921 : } // namespace dom
922 : } // namespace mozilla
|