9c31099553b714124332aa6353206bf826986cbf
[WebKit-https.git] / Source / WebKit2 / WebProcess / InjectedBundle / API / mac / WKDOMRange.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 #import "WKDOMRange.h"
29 #import "WKDOMRangePrivate.h"
30
31 #if WK_API_ENABLED
32
33 #import "InjectedBundleRangeHandle.h"
34 #import "WKBundleAPICast.h"
35 #import "WKDOMInternals.h"
36 #import <WebCore/Document.h>
37
38 @implementation WKDOMRange
39
40 - (id)_initWithImpl:(WebCore::Range*)impl
41 {
42     self = [super init];
43     if (!self)
44         return nil;
45
46     _impl = impl;
47     WebKit::WKDOMRangeCache().add(impl, self);
48
49     return self;
50 }
51
52 - (id)initWithDocument:(WKDOMDocument *)document
53 {
54     RefPtr<WebCore::Range> range = WebCore::Range::create(*WebKit::toWebCoreDocument(document));
55     self = [self _initWithImpl:range.get()];
56     if (!self)
57         return nil;
58
59     return self;
60 }
61
62 - (void)dealloc
63 {
64     WebKit::WKDOMRangeCache().remove(_impl.get());
65     [super dealloc];
66 }
67
68 - (void)setStart:(WKDOMNode *)node offset:(int)offset
69 {
70     // FIXME: Do something about the exception.
71     WebCore::ExceptionCode ec = 0;
72     _impl->setStart(WebKit::toWebCoreNode(node), offset, ec);
73 }
74
75 - (void)setEnd:(WKDOMNode *)node offset:(int)offset
76 {
77     // FIXME: Do something about the exception.
78     WebCore::ExceptionCode ec = 0;
79     _impl->setEnd(WebKit::toWebCoreNode(node), offset, ec);
80 }
81
82 - (void)collapse:(BOOL)toStart
83 {
84     // FIXME: Do something about the exception.
85     WebCore::ExceptionCode ec = 0;
86     _impl->collapse(toStart, ec);
87 }
88
89 - (void)selectNode:(WKDOMNode *)node
90 {
91     // FIXME: Do something about the exception.
92     WebCore::ExceptionCode ec = 0;
93     _impl->selectNode(WebKit::toWebCoreNode(node), ec);
94 }
95
96 - (void)selectNodeContents:(WKDOMNode *)node
97 {
98     // FIXME: Do something about the exception.
99     WebCore::ExceptionCode ec = 0;
100     _impl->selectNodeContents(WebKit::toWebCoreNode(node), ec);
101 }
102
103 - (WKDOMNode *)startContainer
104 {
105     // FIXME: Do something about the exception.
106     WebCore::ExceptionCode ec = 0;
107     return WebKit::toWKDOMNode(_impl->startContainer(ec));
108 }
109
110 - (NSInteger)startOffset
111 {
112     // FIXME: Do something about the exception.
113     WebCore::ExceptionCode ec = 0;
114     return _impl->startOffset(ec);
115 }
116
117 - (WKDOMNode *)endContainer
118 {
119     // FIXME: Do something about the exception.
120     WebCore::ExceptionCode ec = 0;
121     return WebKit::toWKDOMNode(_impl->endContainer(ec));
122 }
123
124 - (NSInteger)endOffset
125 {
126     // FIXME: Do something about the exception.
127     WebCore::ExceptionCode ec = 0;
128     return _impl->endOffset(ec);
129 }
130
131 - (NSString *)text
132 {
133     return _impl->text();
134 }
135
136 - (BOOL)isCollapsed
137 {
138     // FIXME: Do something about the exception.
139     WebCore::ExceptionCode ec = 0;
140     return _impl->collapsed(ec);
141 }
142
143 - (NSArray *)textRects
144 {
145     _impl->ownerDocument().updateLayoutIgnorePendingStylesheets();
146     Vector<WebCore::IntRect> rects;
147     _impl->textRects(rects);
148     return WebKit::toNSArray(rects);
149 }
150
151 @end
152
153 @implementation WKDOMRange (WKPrivate)
154
155 - (WKBundleRangeHandleRef)_copyBundleRangeHandleRef
156 {
157     RefPtr<WebKit::InjectedBundleRangeHandle> rangeHandle = WebKit::InjectedBundleRangeHandle::getOrCreate(_impl.get());
158     return toAPI(rangeHandle.release().leakRef());
159 }
160
161 @end
162
163 #endif // WK_API_ENABLED