Line data Source code
1 : /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 : * vim: set ts=8 sts=4 et sw=4 tw=99:
3 : * This Source Code Form is subject to the terms of the Mozilla Public
4 : * License, v. 2.0. If a copy of the MPL was not distributed with this
5 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 :
7 : #include "jswrapper.h"
8 :
9 : #include "jsobjinlines.h"
10 :
11 : using namespace js;
12 :
13 : bool
14 0 : OpaqueCrossCompartmentWrapper::getOwnPropertyDescriptor(JSContext* cx,
15 : HandleObject wrapper,
16 : HandleId id,
17 : MutableHandle<PropertyDescriptor> desc) const
18 : {
19 0 : desc.object().set(nullptr);
20 0 : return true;
21 : }
22 :
23 : bool
24 0 : OpaqueCrossCompartmentWrapper::defineProperty(JSContext* cx, HandleObject wrapper, HandleId id,
25 : Handle<PropertyDescriptor> desc,
26 : ObjectOpResult& result) const
27 : {
28 0 : return result.succeed();
29 : }
30 :
31 : bool
32 0 : OpaqueCrossCompartmentWrapper::ownPropertyKeys(JSContext* cx, HandleObject wrapper,
33 : AutoIdVector& props) const
34 : {
35 0 : return true;
36 : }
37 :
38 : bool
39 0 : OpaqueCrossCompartmentWrapper::delete_(JSContext* cx, HandleObject wrapper, HandleId id,
40 : ObjectOpResult& result) const
41 : {
42 0 : return result.succeed();
43 : }
44 :
45 : JSObject*
46 0 : OpaqueCrossCompartmentWrapper::enumerate(JSContext* cx, HandleObject wrapper) const
47 : {
48 0 : return BaseProxyHandler::enumerate(cx, wrapper);
49 : }
50 :
51 : bool
52 0 : OpaqueCrossCompartmentWrapper::getPrototype(JSContext* cx, HandleObject proxy,
53 : MutableHandleObject protop) const
54 : {
55 0 : protop.set(nullptr);
56 0 : return true;
57 : }
58 :
59 : bool
60 0 : OpaqueCrossCompartmentWrapper::setPrototype(JSContext* cx, HandleObject proxy, HandleObject proto,
61 : ObjectOpResult& result) const
62 : {
63 0 : return result.succeed();
64 : }
65 :
66 : bool
67 0 : OpaqueCrossCompartmentWrapper::getPrototypeIfOrdinary(JSContext* cx, HandleObject proxy,
68 : bool* isOrdinary,
69 : MutableHandleObject protop) const
70 : {
71 0 : *isOrdinary = false;
72 0 : return true;
73 : }
74 :
75 : bool
76 0 : OpaqueCrossCompartmentWrapper::setImmutablePrototype(JSContext* cx, HandleObject proxy,
77 : bool* succeeded) const
78 : {
79 0 : *succeeded = false;
80 0 : return true;
81 : }
82 :
83 : bool
84 0 : OpaqueCrossCompartmentWrapper::preventExtensions(JSContext* cx, HandleObject wrapper,
85 : ObjectOpResult& result) const
86 : {
87 0 : return result.failCantPreventExtensions();
88 : }
89 :
90 : bool
91 0 : OpaqueCrossCompartmentWrapper::isExtensible(JSContext* cx, HandleObject wrapper,
92 : bool* extensible) const
93 : {
94 0 : *extensible = true;
95 0 : return true;
96 : }
97 :
98 : bool
99 0 : OpaqueCrossCompartmentWrapper::has(JSContext* cx, HandleObject wrapper, HandleId id,
100 : bool* bp) const
101 : {
102 0 : return BaseProxyHandler::has(cx, wrapper, id, bp);
103 : }
104 :
105 : bool
106 0 : OpaqueCrossCompartmentWrapper::get(JSContext* cx, HandleObject wrapper, HandleValue receiver,
107 : HandleId id, MutableHandleValue vp) const
108 : {
109 0 : return BaseProxyHandler::get(cx, wrapper, receiver, id, vp);
110 : }
111 :
112 : bool
113 0 : OpaqueCrossCompartmentWrapper::set(JSContext* cx, HandleObject wrapper, HandleId id,
114 : HandleValue v, HandleValue receiver,
115 : ObjectOpResult& result) const
116 : {
117 0 : return BaseProxyHandler::set(cx, wrapper, id, v, receiver, result);
118 : }
119 :
120 : bool
121 0 : OpaqueCrossCompartmentWrapper::call(JSContext* cx, HandleObject wrapper,
122 : const CallArgs& args) const
123 : {
124 0 : RootedValue v(cx, ObjectValue(*wrapper));
125 0 : ReportIsNotFunction(cx, v);
126 0 : return false;
127 : }
128 :
129 : bool
130 0 : OpaqueCrossCompartmentWrapper::construct(JSContext* cx, HandleObject wrapper,
131 : const CallArgs& args) const
132 : {
133 0 : RootedValue v(cx, ObjectValue(*wrapper));
134 0 : ReportIsNotFunction(cx, v);
135 0 : return false;
136 : }
137 :
138 : bool
139 0 : OpaqueCrossCompartmentWrapper::getPropertyDescriptor(JSContext* cx,
140 : HandleObject wrapper,
141 : HandleId id,
142 : MutableHandle<PropertyDescriptor> desc) const
143 : {
144 0 : return BaseProxyHandler::getPropertyDescriptor(cx, wrapper, id, desc);
145 : }
146 :
147 : bool
148 0 : OpaqueCrossCompartmentWrapper::hasOwn(JSContext* cx, HandleObject wrapper, HandleId id,
149 : bool* bp) const
150 : {
151 0 : return BaseProxyHandler::hasOwn(cx, wrapper, id, bp);
152 : }
153 :
154 : bool
155 0 : OpaqueCrossCompartmentWrapper::getOwnEnumerablePropertyKeys(JSContext* cx, HandleObject wrapper,
156 : AutoIdVector& props) const
157 : {
158 0 : return BaseProxyHandler::getOwnEnumerablePropertyKeys(cx, wrapper, props);
159 : }
160 :
161 : bool
162 0 : OpaqueCrossCompartmentWrapper::getBuiltinClass(JSContext* cx, HandleObject wrapper,
163 : ESClass* cls) const
164 : {
165 0 : *cls = ESClass::Other;
166 0 : return true;
167 : }
168 :
169 : bool
170 0 : OpaqueCrossCompartmentWrapper::isArray(JSContext* cx, HandleObject obj,
171 : JS::IsArrayAnswer* answer) const
172 : {
173 0 : *answer = JS::IsArrayAnswer::NotArray;
174 0 : return true;
175 : }
176 :
177 : const char*
178 0 : OpaqueCrossCompartmentWrapper::className(JSContext* cx,
179 : HandleObject proxy) const
180 : {
181 0 : return "Opaque";
182 : }
183 :
184 : JSString*
185 0 : OpaqueCrossCompartmentWrapper::fun_toString(JSContext* cx, HandleObject proxy,
186 : unsigned indent) const
187 : {
188 : JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, JSMSG_INCOMPATIBLE_PROTO,
189 0 : js_Function_str, js_toString_str, "object");
190 0 : return nullptr;
191 : }
192 :
193 : const OpaqueCrossCompartmentWrapper OpaqueCrossCompartmentWrapper::singleton;
|