bug 313956: expand installer .exe contents to make complete mar. r=ted.
[gecko.git] / js / ipc / ObjectWrapperParent.h
blobbf48f9ae2edaefcff5fc082d4b6a53b911a42153
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 * vim: set ts=8 sw=4 et tw=80:
4 * ***** BEGIN LICENSE BLOCK *****
5 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
7 * The contents of this file are subject to the Mozilla Public License Version
8 * 1.1 (the "License"); you may not use this file except in compliance with
9 * the License. You may obtain a copy of the License at
10 * http://www.mozilla.org/MPL/
12 * Software distributed under the License is distributed on an "AS IS" basis,
13 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
14 * for the specific language governing rights and limitations under the
15 * License.
17 * The Original Code is mozilla.org code.
19 * The Initial Developer of the Original Code is
20 * The Mozilla Foundation.
21 * Portions created by the Initial Developer are Copyright (C) 2010
22 * the Initial Developer. All Rights Reserved.
24 * Contributor(s):
25 * Ben Newman <b{enjam,newma}n@mozilla.com> (original author)
27 * Alternatively, the contents of this file may be used under the terms of
28 * either of the GNU General Public License Version 2 or later (the "GPL"),
29 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
30 * in which case the provisions of the GPL or the LGPL are applicable instead
31 * of those above. If you wish to allow use of your version of this file only
32 * under the terms of either the GPL or the LGPL, and not to allow others to
33 * use your version of this file under the terms of the MPL, indicate your
34 * decision by deleting the provisions above and replace them with the notice
35 * and other provisions required by the GPL or the LGPL. If you do not delete
36 * the provisions above, a recipient may use your version of this file under
37 * the terms of any one of the MPL, the GPL or the LGPL.
39 * ***** END LICENSE BLOCK ***** */
41 #ifndef mozilla_jsipc_ObjectWrapperParent_h__
42 #define mozilla_jsipc_ObjectWrapperParent_h__
44 #include "mozilla/jsipc/PObjectWrapperParent.h"
45 #include "jsapi.h"
46 #include "jsvalue.h"
47 #include "nsAutoJSValHolder.h"
49 namespace mozilla {
50 namespace jsipc {
52 class ContextWrapperParent;
54 class OperationChecker {
55 public:
56 virtual void CheckOperation(JSContext* cx,
57 OperationStatus* status) = 0;
60 class ObjectWrapperParent
61 : public PObjectWrapperParent
62 , public OperationChecker
64 public:
66 ObjectWrapperParent()
67 : mObj(NULL)
70 JSObject* GetJSObject(JSContext* cx) const;
72 jsval GetJSVal(JSContext* cx) const {
73 return OBJECT_TO_JSVAL(GetJSObject(cx));
76 void CheckOperation(JSContext* cx,
77 OperationStatus* status);
79 static const js::Class sCPOW_JSClass;
81 protected:
83 void ActorDestroy(ActorDestroyReason why);
85 ContextWrapperParent* Manager();
87 private:
89 mutable JSObject* mObj;
91 static JSBool
92 CPOW_AddProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
94 static JSBool
95 CPOW_DelProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
97 static JSBool
98 CPOW_GetProperty(JSContext *cx, JSObject *obj, jsid id, jsval *vp);
100 static JSBool
101 CPOW_SetProperty(JSContext *cx, JSObject *obj, jsid id, JSBool strict, jsval *vp);
103 JSBool NewEnumerateInit(JSContext* cx, jsval* statep, jsid* idp);
104 JSBool NewEnumerateNext(JSContext* cx, jsval* statep, jsid* idp);
105 JSBool NewEnumerateDestroy(JSContext* cx, jsval state);
106 static JSBool
107 CPOW_NewEnumerate(JSContext *cx, JSObject *obj, JSIterateOp enum_op,
108 jsval *statep, jsid *idp);
110 static JSBool
111 CPOW_NewResolve(JSContext *cx, JSObject *obj, jsid id, uintN flags,
112 JSObject **objp);
114 static JSBool
115 CPOW_Convert(JSContext *cx, JSObject *obj, JSType type, jsval *vp);
117 static void
118 CPOW_Finalize(JSContext* cx, JSObject* obj);
120 static JSBool
121 CPOW_Call(JSContext* cx, uintN argc, jsval* vp);
123 static JSBool
124 CPOW_Construct(JSContext *cx, uintN argc, jsval *vp);
126 static JSBool
127 CPOW_HasInstance(JSContext *cx, JSObject *obj, const jsval *v, JSBool *bp);
129 static JSBool
130 CPOW_Equality(JSContext *cx, JSObject *obj, const jsval *v, JSBool *bp);
132 static bool jsval_to_JSVariant(JSContext* cx, jsval from, JSVariant* to);
133 static bool jsval_from_JSVariant(JSContext* cx, const JSVariant& from,
134 jsval* to);
135 static bool
136 JSObject_to_PObjectWrapperParent(JSContext* cx, JSObject* from,
137 PObjectWrapperParent** to);
138 static bool
139 JSObject_from_PObjectWrapperParent(JSContext* cx,
140 const PObjectWrapperParent* from,
141 JSObject** to);
142 static bool
143 jsval_from_PObjectWrapperParent(JSContext* cx,
144 const PObjectWrapperParent* from,
145 jsval* to);
148 template <class StatusOwnerPolicy>
149 class AutoCheckOperationBase
150 : public StatusOwnerPolicy
152 JSContext* const mContext;
153 OperationChecker* const mChecker;
155 protected:
157 AutoCheckOperationBase(JSContext* cx,
158 OperationChecker* checker)
159 : mContext(cx)
160 , mChecker(checker)
163 virtual ~AutoCheckOperationBase() {
164 mChecker->CheckOperation(mContext, StatusOwnerPolicy::StatusPtr());
167 public:
169 bool Ok() {
170 return (StatusOwnerPolicy::StatusPtr()->type() == OperationStatus::TJSBool &&
171 StatusOwnerPolicy::StatusPtr()->get_JSBool());
177 #endif