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 "WKBundleNodeHandle.h" |
28 | #include "WKBundleNodeHandlePrivate.h" |
29 | |
30 | #include "InjectedBundleNodeHandle.h" |
31 | #include "InjectedBundleRangeHandle.h" |
32 | #include "WKAPICast.h" |
33 | #include "WKBundleAPICast.h" |
34 | #include "WebFrame.h" |
35 | #include "WebImage.h" |
36 | #include <WebCore/HTMLTextFormControlElement.h> |
37 | |
38 | static WebCore::AutoFillButtonType toAutoFillButtonType(WKAutoFillButtonType wkAutoFillButtonType) |
39 | { |
40 | switch (wkAutoFillButtonType) { |
41 | case kWKAutoFillButtonTypeNone: |
42 | return WebCore::AutoFillButtonType::None; |
43 | case kWKAutoFillButtonTypeContacts: |
44 | return WebCore::AutoFillButtonType::Contacts; |
45 | case kWKAutoFillButtonTypeCredentials: |
46 | return WebCore::AutoFillButtonType::Credentials; |
47 | case kWKAutoFillButtonTypeStrongPassword: |
48 | return WebCore::AutoFillButtonType::StrongPassword; |
49 | case kWKAutoFillButtonTypeCreditCard: |
50 | return WebCore::AutoFillButtonType::CreditCard; |
51 | } |
52 | ASSERT_NOT_REACHED(); |
53 | return WebCore::AutoFillButtonType::None; |
54 | } |
55 | |
56 | static WKAutoFillButtonType toWKAutoFillButtonType(WebCore::AutoFillButtonType autoFillButtonType) |
57 | { |
58 | switch (autoFillButtonType) { |
59 | case WebCore::AutoFillButtonType::None: |
60 | return kWKAutoFillButtonTypeNone; |
61 | case WebCore::AutoFillButtonType::Contacts: |
62 | return kWKAutoFillButtonTypeContacts; |
63 | case WebCore::AutoFillButtonType::Credentials: |
64 | return kWKAutoFillButtonTypeCredentials; |
65 | case WebCore::AutoFillButtonType::StrongPassword: |
66 | return kWKAutoFillButtonTypeStrongPassword; |
67 | case WebCore::AutoFillButtonType::CreditCard: |
68 | return kWKAutoFillButtonTypeCreditCard; |
69 | } |
70 | ASSERT_NOT_REACHED(); |
71 | return kWKAutoFillButtonTypeNone; |
72 | } |
73 | |
74 | WKTypeID WKBundleNodeHandleGetTypeID() |
75 | { |
76 | return WebKit::toAPI(WebKit::InjectedBundleNodeHandle::APIType); |
77 | } |
78 | |
79 | WKBundleNodeHandleRef WKBundleNodeHandleCreate(JSContextRef contextRef, JSObjectRef objectRef) |
80 | { |
81 | RefPtr<WebKit::InjectedBundleNodeHandle> nodeHandle = WebKit::InjectedBundleNodeHandle::getOrCreate(contextRef, objectRef); |
82 | return toAPI(nodeHandle.leakRef()); |
83 | } |
84 | |
85 | WKBundleNodeHandleRef WKBundleNodeHandleCopyDocument(WKBundleNodeHandleRef nodeHandleRef) |
86 | { |
87 | RefPtr<WebKit::InjectedBundleNodeHandle> nodeHandle = WebKit::toImpl(nodeHandleRef)->document(); |
88 | return toAPI(nodeHandle.leakRef()); |
89 | } |
90 | |
91 | WKRect WKBundleNodeHandleGetRenderRect(WKBundleNodeHandleRef nodeHandleRef, bool* isReplaced) |
92 | { |
93 | return WebKit::toAPI(WebKit::toImpl(nodeHandleRef)->renderRect(isReplaced)); |
94 | } |
95 | |
96 | WKImageRef WKBundleNodeHandleCopySnapshotWithOptions(WKBundleNodeHandleRef nodeHandleRef, WKSnapshotOptions options) |
97 | { |
98 | RefPtr<WebKit::WebImage> image = WebKit::toImpl(nodeHandleRef)->renderedImage(WebKit::toSnapshotOptions(options), options & kWKSnapshotOptionsExcludeOverflow); |
99 | return toAPI(image.leakRef()); |
100 | } |
101 | |
102 | WKBundleRangeHandleRef WKBundleNodeHandleCopyVisibleRange(WKBundleNodeHandleRef nodeHandleRef) |
103 | { |
104 | RefPtr<WebKit::InjectedBundleRangeHandle> rangeHandle = WebKit::toImpl(nodeHandleRef)->visibleRange(); |
105 | return toAPI(rangeHandle.leakRef()); |
106 | } |
107 | |
108 | WKRect WKBundleNodeHandleGetElementBounds(WKBundleNodeHandleRef elementHandleRef) |
109 | { |
110 | return WebKit::toAPI(WebKit::toImpl(elementHandleRef)->elementBounds()); |
111 | } |
112 | |
113 | void WKBundleNodeHandleSetHTMLInputElementValueForUser(WKBundleNodeHandleRef htmlInputElementHandleRef, WKStringRef valueRef) |
114 | { |
115 | WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementValueForUser(WebKit::toWTFString(valueRef)); |
116 | } |
117 | |
118 | void WKBundleNodeHandleSetHTMLInputElementSpellcheckEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled) |
119 | { |
120 | WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementSpellcheckEnabled(enabled); |
121 | } |
122 | |
123 | bool WKBundleNodeHandleGetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandleRef) |
124 | { |
125 | return WebKit::toImpl(htmlInputElementHandleRef)->isHTMLInputElementAutoFilled(); |
126 | } |
127 | |
128 | void WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool filled) |
129 | { |
130 | WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFilled(filled); |
131 | } |
132 | |
133 | bool WKBundleNodeHandleGetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef) |
134 | { |
135 | return WebKit::toImpl(htmlInputElementHandleRef)->isHTMLInputElementAutoFillButtonEnabled(); |
136 | } |
137 | |
138 | void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef htmlInputElementHandleRef, WKAutoFillButtonType autoFillButtonType) |
139 | { |
140 | WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(toAutoFillButtonType(autoFillButtonType)); |
141 | } |
142 | |
143 | WKAutoFillButtonType WKBundleNodeHandleGetHTMLInputElementAutoFillButtonType(WKBundleNodeHandleRef htmlInputElementHandleRef) |
144 | { |
145 | return toWKAutoFillButtonType(WebKit::toImpl(htmlInputElementHandleRef)->htmlInputElementAutoFillButtonType()); |
146 | } |
147 | |
148 | WKAutoFillButtonType WKBundleNodeHandleGetHTMLInputElementLastAutoFillButtonType(WKBundleNodeHandleRef htmlInputElementHandleRef) |
149 | { |
150 | return toWKAutoFillButtonType(WebKit::toImpl(htmlInputElementHandleRef)->htmlInputElementLastAutoFillButtonType()); |
151 | } |
152 | |
153 | bool WKBundleNodeHandleGetHTMLInputElementAutoFillAvailable(WKBundleNodeHandleRef htmlInputElementHandleRef) |
154 | { |
155 | return WebKit::toImpl(htmlInputElementHandleRef)->isAutoFillAvailable(); |
156 | } |
157 | |
158 | void WKBundleNodeHandleSetHTMLInputElementAutoFillAvailable(WKBundleNodeHandleRef htmlInputElementHandleRef, bool autoFillAvailable) |
159 | { |
160 | WebKit::toImpl(htmlInputElementHandleRef)->setAutoFillAvailable(autoFillAvailable); |
161 | } |
162 | |
163 | WKRect WKBundleNodeHandleGetHTMLInputElementAutoFillButtonBounds(WKBundleNodeHandleRef htmlInputElementHandleRef) |
164 | { |
165 | return WebKit::toAPI(WebKit::toImpl(htmlInputElementHandleRef)->htmlInputElementAutoFillButtonBounds()); |
166 | } |
167 | |
168 | bool WKBundleNodeHandleGetHTMLInputElementLastChangeWasUserEdit(WKBundleNodeHandleRef htmlInputElementHandleRef) |
169 | { |
170 | return WebKit::toImpl(htmlInputElementHandleRef)->htmlInputElementLastChangeWasUserEdit(); |
171 | } |
172 | |
173 | bool WKBundleNodeHandleGetHTMLTextAreaElementLastChangeWasUserEdit(WKBundleNodeHandleRef htmlTextAreaElementHandleRef) |
174 | { |
175 | return WebKit::toImpl(htmlTextAreaElementHandleRef)->htmlTextAreaElementLastChangeWasUserEdit(); |
176 | } |
177 | |
178 | WKBundleNodeHandleRef WKBundleNodeHandleCopyHTMLTableCellElementCellAbove(WKBundleNodeHandleRef htmlTableCellElementHandleRef) |
179 | { |
180 | RefPtr<WebKit::InjectedBundleNodeHandle> nodeHandle = WebKit::toImpl(htmlTableCellElementHandleRef)->htmlTableCellElementCellAbove(); |
181 | return toAPI(nodeHandle.leakRef()); |
182 | } |
183 | |
184 | WKBundleFrameRef WKBundleNodeHandleCopyDocumentFrame(WKBundleNodeHandleRef documentHandleRef) |
185 | { |
186 | RefPtr<WebKit::WebFrame> frame = WebKit::toImpl(documentHandleRef)->documentFrame(); |
187 | return toAPI(frame.leakRef()); |
188 | } |
189 | |
190 | WKBundleFrameRef WKBundleNodeHandleCopyHTMLFrameElementContentFrame(WKBundleNodeHandleRef htmlFrameElementHandleRef) |
191 | { |
192 | RefPtr<WebKit::WebFrame> frame = WebKit::toImpl(htmlFrameElementHandleRef)->htmlFrameElementContentFrame(); |
193 | return toAPI(frame.leakRef()); |
194 | } |
195 | |
196 | WKBundleFrameRef WKBundleNodeHandleCopyHTMLIFrameElementContentFrame(WKBundleNodeHandleRef htmlIFrameElementHandleRef) |
197 | { |
198 | RefPtr<WebKit::WebFrame> frame = WebKit::toImpl(htmlIFrameElementHandleRef)->htmlIFrameElementContentFrame(); |
199 | return toAPI(frame.leakRef()); |
200 | } |
201 | |
202 | // Deprecated - use WKBundleNodeHandleGetHTMLInputElementAutoFilled(WKBundleNodeHandleRef). |
203 | bool WKBundleNodeHandleGetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandleRef) |
204 | { |
205 | return WebKit::toImpl(htmlInputElementHandleRef)->isHTMLInputElementAutoFilled(); |
206 | } |
207 | |
208 | // Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFilled(WKBundleNodeHandleRef, bool). |
209 | void WKBundleNodeHandleSetHTMLInputElementAutofilled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool filled) |
210 | { |
211 | WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFilled(filled); |
212 | } |
213 | |
214 | // Deprecated - use WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabledWithButtonType(WKBundleNodeHandleRef, WKAutoFillButtonType). |
215 | void WKBundleNodeHandleSetHTMLInputElementAutoFillButtonEnabled(WKBundleNodeHandleRef htmlInputElementHandleRef, bool enabled) |
216 | { |
217 | WebCore::AutoFillButtonType autoFillButtonType = enabled ? WebCore::AutoFillButtonType::Credentials : WebCore::AutoFillButtonType::None; |
218 | |
219 | WebKit::toImpl(htmlInputElementHandleRef)->setHTMLInputElementAutoFillButtonEnabled(autoFillButtonType); |
220 | } |
221 | |