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 "WKBundle.h"
28 #include "WKBundlePrivate.h"
29
30 #include "InjectedBundle.h"
31 #include "WKAPICast.h"
32 #include "WKBundleAPICast.h"
33
34 using namespace WebKit;
35
WKBundleGetTypeID()36 WKTypeID WKBundleGetTypeID()
37 {
38 return toAPI(InjectedBundle::APIType);
39 }
40
WKBundleSetClient(WKBundleRef bundleRef,WKBundleClient * wkClient)41 void WKBundleSetClient(WKBundleRef bundleRef, WKBundleClient * wkClient)
42 {
43 if (wkClient && wkClient->version)
44 return;
45 toImpl(bundleRef)->initializeClient(wkClient);
46 }
47
WKBundlePostMessage(WKBundleRef bundleRef,WKStringRef messageNameRef,WKTypeRef messageBodyRef)48 void WKBundlePostMessage(WKBundleRef bundleRef, WKStringRef messageNameRef, WKTypeRef messageBodyRef)
49 {
50 toImpl(bundleRef)->postMessage(toImpl(messageNameRef)->string(), toImpl(messageBodyRef));
51 }
52
WKBundlePostSynchronousMessage(WKBundleRef bundleRef,WKStringRef messageNameRef,WKTypeRef messageBodyRef,WKTypeRef * returnDataRef)53 void WKBundlePostSynchronousMessage(WKBundleRef bundleRef, WKStringRef messageNameRef, WKTypeRef messageBodyRef, WKTypeRef* returnDataRef)
54 {
55 RefPtr<APIObject> returnData;
56 toImpl(bundleRef)->postSynchronousMessage(toImpl(messageNameRef)->string(), toImpl(messageBodyRef), returnData);
57 if (returnDataRef)
58 *returnDataRef = toAPI(returnData.release().leakRef());
59 }
60
WKBundleSetShouldTrackVisitedLinks(WKBundleRef bundleRef,bool shouldTrackVisitedLinks)61 void WKBundleSetShouldTrackVisitedLinks(WKBundleRef bundleRef, bool shouldTrackVisitedLinks)
62 {
63 toImpl(bundleRef)->setShouldTrackVisitedLinks(shouldTrackVisitedLinks);
64 }
65
WKBundleRemoveAllVisitedLinks(WKBundleRef bundleRef)66 void WKBundleRemoveAllVisitedLinks(WKBundleRef bundleRef)
67 {
68 toImpl(bundleRef)->removeAllVisitedLinks();
69 }
70
WKBundleActivateMacFontAscentHack(WKBundleRef bundleRef)71 void WKBundleActivateMacFontAscentHack(WKBundleRef bundleRef)
72 {
73 toImpl(bundleRef)->activateMacFontAscentHack();
74 }
75
WKBundleGarbageCollectJavaScriptObjects(WKBundleRef bundleRef)76 void WKBundleGarbageCollectJavaScriptObjects(WKBundleRef bundleRef)
77 {
78 toImpl(bundleRef)->garbageCollectJavaScriptObjects();
79 }
80
WKBundleGarbageCollectJavaScriptObjectsOnAlternateThreadForDebugging(WKBundleRef bundleRef,bool waitUntilDone)81 void WKBundleGarbageCollectJavaScriptObjectsOnAlternateThreadForDebugging(WKBundleRef bundleRef, bool waitUntilDone)
82 {
83 toImpl(bundleRef)->garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging(waitUntilDone);
84 }
85
WKBundleGetJavaScriptObjectsCount(WKBundleRef bundleRef)86 size_t WKBundleGetJavaScriptObjectsCount(WKBundleRef bundleRef)
87 {
88 return toImpl(bundleRef)->javaScriptObjectsCount();
89 }
90
WKBundleAddUserScript(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,WKBundleScriptWorldRef scriptWorldRef,WKStringRef sourceRef,WKURLRef urlRef,WKArrayRef whitelistRef,WKArrayRef blacklistRef,WKUserScriptInjectionTime injectionTimeRef,WKUserContentInjectedFrames injectedFramesRef)91 void WKBundleAddUserScript(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, WKBundleScriptWorldRef scriptWorldRef, WKStringRef sourceRef, WKURLRef urlRef, WKArrayRef whitelistRef, WKArrayRef blacklistRef, WKUserScriptInjectionTime injectionTimeRef, WKUserContentInjectedFrames injectedFramesRef)
92 {
93 toImpl(bundleRef)->addUserScript(toImpl(pageGroupRef), toImpl(scriptWorldRef), toWTFString(sourceRef), toWTFString(urlRef), toImpl(whitelistRef), toImpl(blacklistRef), toUserScriptInjectionTime(injectionTimeRef), toUserContentInjectedFrames(injectedFramesRef));
94 }
95
WKBundleAddUserStyleSheet(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,WKBundleScriptWorldRef scriptWorldRef,WKStringRef sourceRef,WKURLRef urlRef,WKArrayRef whitelistRef,WKArrayRef blacklistRef,WKUserContentInjectedFrames injectedFramesRef)96 void WKBundleAddUserStyleSheet(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, WKBundleScriptWorldRef scriptWorldRef, WKStringRef sourceRef, WKURLRef urlRef, WKArrayRef whitelistRef, WKArrayRef blacklistRef, WKUserContentInjectedFrames injectedFramesRef)
97 {
98 toImpl(bundleRef)->addUserStyleSheet(toImpl(pageGroupRef), toImpl(scriptWorldRef), toWTFString(sourceRef), toWTFString(urlRef), toImpl(whitelistRef), toImpl(blacklistRef), toUserContentInjectedFrames(injectedFramesRef));
99 }
100
WKBundleRemoveUserScript(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,WKBundleScriptWorldRef scriptWorldRef,WKURLRef urlRef)101 void WKBundleRemoveUserScript(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, WKBundleScriptWorldRef scriptWorldRef, WKURLRef urlRef)
102 {
103 toImpl(bundleRef)->removeUserScript(toImpl(pageGroupRef), toImpl(scriptWorldRef), toWTFString(urlRef));
104 }
105
WKBundleRemoveUserStyleSheet(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,WKBundleScriptWorldRef scriptWorldRef,WKURLRef urlRef)106 void WKBundleRemoveUserStyleSheet(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, WKBundleScriptWorldRef scriptWorldRef, WKURLRef urlRef)
107 {
108 toImpl(bundleRef)->removeUserStyleSheet(toImpl(pageGroupRef), toImpl(scriptWorldRef), toWTFString(urlRef));
109 }
110
WKBundleRemoveUserScripts(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,WKBundleScriptWorldRef scriptWorldRef)111 void WKBundleRemoveUserScripts(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, WKBundleScriptWorldRef scriptWorldRef)
112 {
113 toImpl(bundleRef)->removeUserScripts(toImpl(pageGroupRef), toImpl(scriptWorldRef));
114 }
115
WKBundleRemoveUserStyleSheets(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,WKBundleScriptWorldRef scriptWorldRef)116 void WKBundleRemoveUserStyleSheets(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, WKBundleScriptWorldRef scriptWorldRef)
117 {
118 toImpl(bundleRef)->removeUserStyleSheets(toImpl(pageGroupRef), toImpl(scriptWorldRef));
119 }
120
WKBundleRemoveAllUserContent(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef)121 void WKBundleRemoveAllUserContent(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef)
122 {
123 toImpl(bundleRef)->removeAllUserContent(toImpl(pageGroupRef));
124 }
125
WKBundleOverrideXSSAuditorEnabledForTestRunner(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,bool enabled)126 void WKBundleOverrideXSSAuditorEnabledForTestRunner(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, bool enabled)
127 {
128 toImpl(bundleRef)->overrideXSSAuditorEnabledForTestRunner(toImpl(pageGroupRef), enabled);
129 }
130
WKBundleOverrideAllowUniversalAccessFromFileURLsForTestRunner(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,bool enabled)131 void WKBundleOverrideAllowUniversalAccessFromFileURLsForTestRunner(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, bool enabled)
132 {
133 toImpl(bundleRef)->overrideAllowUniversalAccessFromFileURLsForTestRunner(toImpl(pageGroupRef), enabled);
134 }
135
WKBundleSetAllowFileAccessFromFileURLs(WKBundleRef bundleRef,WKBundlePageGroupRef pageGroupRef,bool enabled)136 void WKBundleSetAllowFileAccessFromFileURLs(WKBundleRef bundleRef, WKBundlePageGroupRef pageGroupRef, bool enabled)
137 {
138 toImpl(bundleRef)->setAllowFileAccessFromFileURLs(toImpl(pageGroupRef), enabled);
139 }
140
WKBundleReportException(JSContextRef context,JSValueRef exception)141 void WKBundleReportException(JSContextRef context, JSValueRef exception)
142 {
143 InjectedBundle::reportException(context, exception);
144 }
145
WKBundleClearAllDatabases(WKBundleRef bundleRef)146 void WKBundleClearAllDatabases(WKBundleRef bundleRef)
147 {
148 toImpl(bundleRef)->clearAllDatabases();
149 }
150
WKBundleSetDatabaseQuota(WKBundleRef bundleRef,uint64_t quota)151 void WKBundleSetDatabaseQuota(WKBundleRef bundleRef, uint64_t quota)
152 {
153 toImpl(bundleRef)->setDatabaseQuota(quota);
154 }
155
WKBundleNumberOfPages(WKBundleRef bundleRef,WKBundleFrameRef frameRef,double pageWidthInPixels,double pageHeightInPixels)156 int WKBundleNumberOfPages(WKBundleRef bundleRef, WKBundleFrameRef frameRef, double pageWidthInPixels, double pageHeightInPixels)
157 {
158 return toImpl(bundleRef)->numberOfPages(toImpl(frameRef), pageWidthInPixels, pageHeightInPixels);
159 }
160
WKBundlePageNumberForElementById(WKBundleRef bundleRef,WKBundleFrameRef frameRef,WKStringRef idRef,double pageWidthInPixels,double pageHeightInPixels)161 int WKBundlePageNumberForElementById(WKBundleRef bundleRef, WKBundleFrameRef frameRef, WKStringRef idRef, double pageWidthInPixels, double pageHeightInPixels)
162 {
163 return toImpl(bundleRef)->pageNumberForElementById(toImpl(frameRef), toImpl(idRef)->string(), pageWidthInPixels, pageHeightInPixels);
164 }
165
WKBundlePageSizeAndMarginsInPixels(WKBundleRef bundleRef,WKBundleFrameRef frameRef,int pageIndex,int width,int height,int marginTop,int marginRight,int marginBottom,int marginLeft)166 WKStringRef WKBundlePageSizeAndMarginsInPixels(WKBundleRef bundleRef, WKBundleFrameRef frameRef, int pageIndex, int width, int height, int marginTop, int marginRight, int marginBottom, int marginLeft)
167 {
168 return toCopiedAPI(toImpl(bundleRef)->pageSizeAndMarginsInPixels(toImpl(frameRef), pageIndex, width, height, marginTop, marginRight, marginBottom, marginLeft));
169 }
170
WKBundleIsPageBoxVisible(WKBundleRef bundleRef,WKBundleFrameRef frameRef,int pageIndex)171 WK_EXPORT bool WKBundleIsPageBoxVisible(WKBundleRef bundleRef, WKBundleFrameRef frameRef, int pageIndex)
172 {
173 return toImpl(bundleRef)->isPageBoxVisible(toImpl(frameRef), pageIndex);
174 }
175