016f506693e63e7efabb1de694b4ae2798ff87bb
[WebKit-https.git] / Source / WebKit2 / WebProcess / InjectedBundle / API / mac / WKDOMNode.mm
1 /*
2  * Copyright (C) 2012 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 #import "config.h"
27
28 #if defined(__LP64__) && defined(__clang__)
29
30 #import "WKDOMNode.h"
31 #import "WKDOMNodePrivate.h"
32
33 #import "InjectedBundleNodeHandle.h"
34 #import "WKBundleAPICast.h"
35 #import "WKDOMInternals.h"
36 #import <WebCore/Document.h>
37
38 @implementation WKDOMNode
39
40 - (id)_initWithImpl:(WebCore::Node*)impl
41 {
42     self = [super init];
43     if (!self)
44         return nil;
45
46     _impl = impl;
47     WebKit::WKDOMNodeCache().add(impl, self);
48
49     return self;
50 }
51
52 - (void)dealloc
53 {
54     WebKit::WKDOMNodeCache().remove(_impl.get());
55     [super dealloc];
56 }
57
58 - (void)insertNode:(WKDOMNode *)node before:(WKDOMNode *)refNode
59 {
60     // FIXME: Do something about the exception.
61     WebCore::ExceptionCode ec;
62     _impl->insertBefore(WebKit::toWebCoreNode(node), WebKit::toWebCoreNode(refNode), ec);
63 }
64
65 - (void)appendChild:(WKDOMNode *)node
66 {
67     // FIXME: Do something about the exception.
68     WebCore::ExceptionCode ec;
69     _impl->appendChild(WebKit::toWebCoreNode(node), ec);
70 }
71
72 - (void)removeChild:(WKDOMNode *)node
73 {
74     // FIXME: Do something about the exception.
75     WebCore::ExceptionCode ec;
76     _impl->removeChild(WebKit::toWebCoreNode(node), ec);
77 }
78
79 - (WKDOMDocument *)document
80 {
81     return WebKit::toWKDOMDocument(&_impl->document());
82 }
83
84 - (WKDOMNode *)parentNode
85 {
86     return WebKit::toWKDOMNode(_impl->parentNode());
87 }
88
89 - (WKDOMNode *)firstChild
90 {
91     return WebKit::toWKDOMNode(_impl->firstChild());
92 }
93
94 - (WKDOMNode *)lastChild
95 {
96     return WebKit::toWKDOMNode(_impl->lastChild());
97 }
98
99 - (WKDOMNode *)previousSibling
100 {
101     return WebKit::toWKDOMNode(_impl->previousSibling());
102 }
103
104 - (WKDOMNode *)nextSibling
105 {
106     return WebKit::toWKDOMNode(_impl->nextSibling());
107 }
108
109 - (NSArray *)textRects
110 {
111     _impl->document().updateLayoutIgnorePendingStylesheets();
112     if (!_impl->renderer())
113         return nil;
114     Vector<WebCore::IntRect> rects;
115     _impl->textRects(rects);
116     return WebKit::toNSArray(rects);
117 }
118
119 @end
120
121 @implementation WKDOMNode (WKPrivate)
122
123 - (WKBundleNodeHandleRef)_copyBundleNodeHandleRef
124 {
125     RefPtr<WebKit::InjectedBundleNodeHandle> nodeHandle = WebKit::InjectedBundleNodeHandle::getOrCreate(_impl.get());
126     return toAPI(nodeHandle.release().leakRef());
127 }
128
129 @end
130
131 #endif // defined(__LP64__) && defined(__clang__)