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 "WKBundleFrame.h"
28 #include "WKBundleFramePrivate.h"
29
30 #include "WKAPICast.h"
31 #include "WKBundleAPICast.h"
32 #include "WebFrame.h"
33 #include <WebCore/Frame.h>
34 #include <WebCore/FrameView.h>
35
36 using namespace WebCore;
37 using namespace WebKit;
38
WKBundleFrameGetTypeID()39 WKTypeID WKBundleFrameGetTypeID()
40 {
41 return toAPI(WebFrame::APIType);
42 }
43
WKBundleFrameIsMainFrame(WKBundleFrameRef frameRef)44 bool WKBundleFrameIsMainFrame(WKBundleFrameRef frameRef)
45 {
46 return toImpl(frameRef)->isMainFrame();
47 }
48
WKBundleFrameCopyURL(WKBundleFrameRef frameRef)49 WKURLRef WKBundleFrameCopyURL(WKBundleFrameRef frameRef)
50 {
51 return toCopiedURLAPI(toImpl(frameRef)->url());
52 }
53
WKBundleFrameCopyProvisionalURL(WKBundleFrameRef frameRef)54 WKURLRef WKBundleFrameCopyProvisionalURL(WKBundleFrameRef frameRef)
55 {
56 return toCopiedURLAPI(toImpl(frameRef)->provisionalURL());
57 }
58
WKBundleFrameGetFrameLoadState(WKBundleFrameRef frameRef)59 WKFrameLoadState WKBundleFrameGetFrameLoadState(WKBundleFrameRef frameRef)
60 {
61 Frame* coreFrame = toImpl(frameRef)->coreFrame();
62 if (!coreFrame)
63 return kWKFrameLoadStateFinished;
64
65 FrameLoader* loader = coreFrame->loader();
66 if (!loader)
67 return kWKFrameLoadStateFinished;
68
69 switch (loader->state()) {
70 case FrameStateProvisional:
71 return kWKFrameLoadStateProvisional;
72 case FrameStateCommittedPage:
73 return kWKFrameLoadStateCommitted;
74 case FrameStateComplete:
75 return kWKFrameLoadStateFinished;
76 }
77
78 ASSERT_NOT_REACHED();
79 return kWKFrameLoadStateFinished;
80 }
81
WKBundleFrameCopyChildFrames(WKBundleFrameRef frameRef)82 WKArrayRef WKBundleFrameCopyChildFrames(WKBundleFrameRef frameRef)
83 {
84 return toAPI(toImpl(frameRef)->childFrames().releaseRef());
85 }
86
WKBundleFrameGetNumberOfActiveAnimations(WKBundleFrameRef frameRef)87 unsigned WKBundleFrameGetNumberOfActiveAnimations(WKBundleFrameRef frameRef)
88 {
89 return toImpl(frameRef)->numberOfActiveAnimations();
90 }
91
WKBundleFramePauseAnimationOnElementWithId(WKBundleFrameRef frameRef,WKStringRef name,WKStringRef elementID,double time)92 bool WKBundleFramePauseAnimationOnElementWithId(WKBundleFrameRef frameRef, WKStringRef name, WKStringRef elementID, double time)
93 {
94 return toImpl(frameRef)->pauseAnimationOnElementWithId(toImpl(name)->string(), toImpl(elementID)->string(), time);
95 }
96
WKBundleFrameSuspendAnimations(WKBundleFrameRef frameRef)97 void WKBundleFrameSuspendAnimations(WKBundleFrameRef frameRef)
98 {
99 toImpl(frameRef)->suspendAnimations();
100 }
101
WKBundleFrameResumeAnimations(WKBundleFrameRef frameRef)102 void WKBundleFrameResumeAnimations(WKBundleFrameRef frameRef)
103 {
104 toImpl(frameRef)->resumeAnimations();
105 }
106
WKBundleFrameGetJavaScriptContext(WKBundleFrameRef frameRef)107 JSGlobalContextRef WKBundleFrameGetJavaScriptContext(WKBundleFrameRef frameRef)
108 {
109 return toImpl(frameRef)->jsContext();
110 }
111
WKBundleFrameForJavaScriptContext(JSContextRef context)112 WKBundleFrameRef WKBundleFrameForJavaScriptContext(JSContextRef context)
113 {
114 return toAPI(WebFrame::frameForContext(context));
115 }
116
WKBundleFrameGetJavaScriptContextForWorld(WKBundleFrameRef frameRef,WKBundleScriptWorldRef worldRef)117 JSGlobalContextRef WKBundleFrameGetJavaScriptContextForWorld(WKBundleFrameRef frameRef, WKBundleScriptWorldRef worldRef)
118 {
119 return toImpl(frameRef)->jsContextForWorld(toImpl(worldRef));
120 }
121
WKBundleFrameGetJavaScriptWrapperForNodeForWorld(WKBundleFrameRef frameRef,WKBundleNodeHandleRef nodeHandleRef,WKBundleScriptWorldRef worldRef)122 JSValueRef WKBundleFrameGetJavaScriptWrapperForNodeForWorld(WKBundleFrameRef frameRef, WKBundleNodeHandleRef nodeHandleRef, WKBundleScriptWorldRef worldRef)
123 {
124 return toImpl(frameRef)->jsWrapperForWorld(toImpl(nodeHandleRef), toImpl(worldRef));
125 }
126
WKBundleFrameGetJavaScriptWrapperForRangeForWorld(WKBundleFrameRef frameRef,WKBundleRangeHandleRef rangeHandleRef,WKBundleScriptWorldRef worldRef)127 JSValueRef WKBundleFrameGetJavaScriptWrapperForRangeForWorld(WKBundleFrameRef frameRef, WKBundleRangeHandleRef rangeHandleRef, WKBundleScriptWorldRef worldRef)
128 {
129 return toImpl(frameRef)->jsWrapperForWorld(toImpl(rangeHandleRef), toImpl(worldRef));
130 }
131
WKBundleFrameCopyName(WKBundleFrameRef frameRef)132 WKStringRef WKBundleFrameCopyName(WKBundleFrameRef frameRef)
133 {
134 return toCopiedAPI(toImpl(frameRef)->name());
135 }
136
WKBundleFrameGetComputedStyleIncludingVisitedInfo(WKBundleFrameRef frameRef,JSObjectRef element)137 JSValueRef WKBundleFrameGetComputedStyleIncludingVisitedInfo(WKBundleFrameRef frameRef, JSObjectRef element)
138 {
139 return toImpl(frameRef)->computedStyleIncludingVisitedInfo(element);
140 }
141
WKBundleFrameCopyCounterValue(WKBundleFrameRef frameRef,JSObjectRef element)142 WKStringRef WKBundleFrameCopyCounterValue(WKBundleFrameRef frameRef, JSObjectRef element)
143 {
144 return toCopiedAPI(toImpl(frameRef)->counterValue(element));
145 }
146
WKBundleFrameCopyMarkerText(WKBundleFrameRef frameRef,JSObjectRef element)147 WKStringRef WKBundleFrameCopyMarkerText(WKBundleFrameRef frameRef, JSObjectRef element)
148 {
149 return toCopiedAPI(toImpl(frameRef)->markerText(element));
150 }
151
WKBundleFrameCopyInnerText(WKBundleFrameRef frameRef)152 WKStringRef WKBundleFrameCopyInnerText(WKBundleFrameRef frameRef)
153 {
154 return toCopiedAPI(toImpl(frameRef)->innerText());
155 }
156
WKBundleFrameGetPendingUnloadCount(WKBundleFrameRef frameRef)157 unsigned WKBundleFrameGetPendingUnloadCount(WKBundleFrameRef frameRef)
158 {
159 return toImpl(frameRef)->pendingUnloadCount();
160 }
161
WKBundleFrameGetPage(WKBundleFrameRef frameRef)162 WKBundlePageRef WKBundleFrameGetPage(WKBundleFrameRef frameRef)
163 {
164 return toAPI(toImpl(frameRef)->page());
165 }
166
WKBundleFrameClearOpener(WKBundleFrameRef frameRef)167 void WKBundleFrameClearOpener(WKBundleFrameRef frameRef)
168 {
169 Frame* coreFrame = toImpl(frameRef)->coreFrame();
170 if (coreFrame)
171 coreFrame->loader()->setOpener(0);
172 }
173
WKBundleFrameCopyLayerTreeAsText(WKBundleFrameRef frameRef)174 WKStringRef WKBundleFrameCopyLayerTreeAsText(WKBundleFrameRef frameRef)
175 {
176 return toCopiedAPI(toImpl(frameRef)->layerTreeAsText());
177 }
178
WKBundleFrameAllowsFollowingLink(WKBundleFrameRef frameRef,WKURLRef urlRef)179 bool WKBundleFrameAllowsFollowingLink(WKBundleFrameRef frameRef, WKURLRef urlRef)
180 {
181 return toImpl(frameRef)->allowsFollowingLink(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string()));
182 }
183
WKBundleFrameGetContentBounds(WKBundleFrameRef frameRef)184 WKRect WKBundleFrameGetContentBounds(WKBundleFrameRef frameRef)
185 {
186 return toAPI(toImpl(frameRef)->contentBounds());
187 }
188
WKBundleFrameGetVisibleContentBounds(WKBundleFrameRef frameRef)189 WKRect WKBundleFrameGetVisibleContentBounds(WKBundleFrameRef frameRef)
190 {
191 return toAPI(toImpl(frameRef)->visibleContentBounds());
192 }
193
WKBundleFrameGetVisibleContentBoundsExcludingScrollbars(WKBundleFrameRef frameRef)194 WKRect WKBundleFrameGetVisibleContentBoundsExcludingScrollbars(WKBundleFrameRef frameRef)
195 {
196 return toAPI(toImpl(frameRef)->visibleContentBoundsExcludingScrollbars());
197 }
198
WKBundleFrameGetScrollOffset(WKBundleFrameRef frameRef)199 WKSize WKBundleFrameGetScrollOffset(WKBundleFrameRef frameRef)
200 {
201 return toAPI(toImpl(frameRef)->scrollOffset());
202 }
203
WKBundleFrameHasHorizontalScrollbar(WKBundleFrameRef frameRef)204 bool WKBundleFrameHasHorizontalScrollbar(WKBundleFrameRef frameRef)
205 {
206 return toImpl(frameRef)->hasHorizontalScrollbar();
207 }
208
WKBundleFrameHasVerticalScrollbar(WKBundleFrameRef frameRef)209 bool WKBundleFrameHasVerticalScrollbar(WKBundleFrameRef frameRef)
210 {
211 return toImpl(frameRef)->hasVerticalScrollbar();
212 }
213
WKBundleFrameGetDocumentBackgroundColor(WKBundleFrameRef frameRef,double * red,double * green,double * blue,double * alpha)214 bool WKBundleFrameGetDocumentBackgroundColor(WKBundleFrameRef frameRef, double* red, double* green, double* blue, double* alpha)
215 {
216 return toImpl(frameRef)->getDocumentBackgroundColor(red, green, blue, alpha);
217 }
218
WKBundleFrameCopySuggestedFilenameForResourceWithURL(WKBundleFrameRef frameRef,WKURLRef urlRef)219 WKStringRef WKBundleFrameCopySuggestedFilenameForResourceWithURL(WKBundleFrameRef frameRef, WKURLRef urlRef)
220 {
221 return toCopiedAPI(toImpl(frameRef)->suggestedFilenameForResourceWithURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string())));
222 }
223
WKBundleFrameCopyMIMETypeForResourceWithURL(WKBundleFrameRef frameRef,WKURLRef urlRef)224 WKStringRef WKBundleFrameCopyMIMETypeForResourceWithURL(WKBundleFrameRef frameRef, WKURLRef urlRef)
225 {
226 return toCopiedAPI(toImpl(frameRef)->mimeTypeForResourceWithURL(WebCore::KURL(WebCore::KURL(), toImpl(urlRef)->string())));
227 }
228