[Release] Webkit2-efl-123997_0.11.86
[framework/web/webkit-efl.git] / Source / WebKit / win / WebSerializedJSValue.cpp
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
33 WebSerializedJSValue::WebSerializedJSValue()
34     : m_refCount(0)
35 {
36     ++gClassCount;
37     gClassNameCount.add("WebSerializedJSValue");
38 }
39
40 WebSerializedJSValue::~WebSerializedJSValue()
41 {
42     --gClassCount;
43     gClassNameCount.remove("WebSerializedJSValue");
44 }
45
46 COMPtr<WebSerializedJSValue> WebSerializedJSValue::createInstance()
47 {
48     return new WebSerializedJSValue();
49 }
50
51 ULONG WebSerializedJSValue::AddRef()
52 {
53     return ++m_refCount;
54 }
55
56 ULONG WebSerializedJSValue::Release()
57 {
58     ULONG newRefCount = --m_refCount;
59     if (!newRefCount)
60         delete this;
61     return newRefCount;
62 }
63
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
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
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
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
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