• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 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'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16  * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
17  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
20  * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23  */
24 
25 #include "config.h"
26 #include "WebKitDLL.h"
27 #include "WebSerializedJSValue.h"
28 
29 #include <WebCore/SerializedScriptValue.h>
30 
31 using namespace WebCore;
32 
WebSerializedJSValue()33 WebSerializedJSValue::WebSerializedJSValue()
34     : m_refCount(0)
35 {
36     ++gClassCount;
37     gClassNameCount.add("WebSerializedJSValue");
38 }
39 
~WebSerializedJSValue()40 WebSerializedJSValue::~WebSerializedJSValue()
41 {
42     --gClassCount;
43     gClassNameCount.remove("WebSerializedJSValue");
44 }
45 
createInstance()46 COMPtr<WebSerializedJSValue> WebSerializedJSValue::createInstance()
47 {
48     return new WebSerializedJSValue();
49 }
50 
AddRef()51 ULONG WebSerializedJSValue::AddRef()
52 {
53     return ++m_refCount;
54 }
55 
Release()56 ULONG WebSerializedJSValue::Release()
57 {
58     ULONG newRefCount = --m_refCount;
59     if (!newRefCount)
60         delete this;
61     return newRefCount;
62 }
63 
QueryInterface(REFIID riid,void ** ppvObject)64 HRESULT WebSerializedJSValue::QueryInterface(REFIID riid, void** ppvObject)
65 {
66     if (!ppvObject)
67         return E_POINTER;
68     *ppvObject = 0;
69 
70     if (IsEqualIID(riid, __uuidof(WebSerializedJSValue)))
71         *ppvObject = this;
72     else if (IsEqualGUID(riid, IID_IUnknown))
73         *ppvObject = static_cast<IWebSerializedJSValue*>(this);
74     else if (IsEqualIID(riid, __uuidof(IWebSerializedJSValue)))
75         *ppvObject = static_cast<IWebSerializedJSValue*>(this);
76     else if (IsEqualIID(riid, __uuidof(IWebSerializedJSValuePrivate)))
77         *ppvObject = static_cast<IWebSerializedJSValuePrivate*>(this);
78     else
79         return E_NOINTERFACE;
80 
81     AddRef();
82     return S_OK;
83 }
84 
serialize(JSContextRef sourceContext,JSValueRef value,JSValueRef * exception)85 HRESULT WebSerializedJSValue::serialize(JSContextRef sourceContext, JSValueRef value, JSValueRef* exception)
86 {
87     ASSERT_ARG(value, value);
88     ASSERT_ARG(sourceContext, sourceContext);
89 
90     if (!value || !sourceContext)
91         return E_POINTER;
92 
93     m_value = SerializedScriptValue::create(sourceContext, value, exception);
94 
95     return S_OK;
96 }
97 
deserialize(JSContextRef destinationContext,JSValueRef * outValue)98 HRESULT WebSerializedJSValue::deserialize(JSContextRef destinationContext, JSValueRef* outValue)
99 {
100     if (!outValue)
101         return E_POINTER;
102 
103     if (!m_value)
104         *outValue = 0;
105     else
106         *outValue = m_value->deserialize(destinationContext, 0);
107 
108     return S_OK;
109 }
110 
setInternalRepresentation(void * internalRepresentation)111 HRESULT WebSerializedJSValue::setInternalRepresentation(void* internalRepresentation)
112 {
113     if (!internalRepresentation || m_value)
114         return E_POINTER;
115 
116     m_value = reinterpret_cast<SerializedScriptValue*>(internalRepresentation);
117 
118     return S_OK;
119 }
120 
getInternalRepresentation(void ** internalRepresentation)121 HRESULT WebSerializedJSValue::getInternalRepresentation(void** internalRepresentation)
122 {
123     if (!m_value)
124         return E_POINTER;
125 
126     *internalRepresentation = m_value.get();
127     return S_OK;
128 }
129 
130