Home | History | Annotate | Download | only in Bindings
      1 /*
      2  * Copyright (C) 2010 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #include "config.h"
     27 #include "JSWrapper.h"
     28 
     29 #include <JavaScriptCore/JSContextRefPrivate.h>
     30 
     31 namespace WTR {
     32 
     33 JSValueRef JSWrapper::wrap(JSContextRef context, JSWrappable* object)
     34 {
     35     ASSERT_ARG(context, context);
     36 
     37     if (!object)
     38         return JSValueMakeNull(context);
     39 
     40     JSClassRef objectClass = object->wrapperClass();
     41     ASSERT(objectClass);
     42     JSObjectRef wrapperObject = JSObjectMake(context, objectClass, object);
     43     ASSERT(wrapperObject);
     44 
     45     return wrapperObject;
     46 }
     47 
     48 JSWrappable* JSWrapper::unwrap(JSContextRef context, JSValueRef value)
     49 {
     50     ASSERT_ARG(context, context);
     51     ASSERT_ARG(value, value);
     52     if (!context || !value)
     53         return 0;
     54     return static_cast<JSWrappable*>(JSObjectGetPrivate(JSValueToObject(context, value, 0)));
     55 }
     56 
     57 static JSWrappable* unwrapObject(JSObjectRef object)
     58 {
     59     JSWrappable* wrappable = static_cast<JSWrappable*>(JSObjectGetPrivate(object));
     60     ASSERT(wrappable);
     61     return wrappable;
     62 }
     63 
     64 void JSWrapper::initialize(JSContextRef ctx, JSObjectRef object)
     65 {
     66     JSWrappable* wrappable = unwrapObject(object);
     67     if (!wrappable)
     68         return;
     69     wrappable->ref();
     70 }
     71 
     72 void JSWrapper::finalize(JSObjectRef object)
     73 {
     74     JSWrappable* wrappable = unwrapObject(object);
     75     if (!wrappable)
     76         return;
     77     wrappable->deref();
     78 }
     79 
     80 } // namespace WTR
     81