1/*
2 * Copyright (C) 2013 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#ifndef WKBundlePageLoaderClient_h
27#define WKBundlePageLoaderClient_h
28
29#include <WebKit/WKBase.h>
30#include <WebKit/WKPageLoadTypes.h>
31
32typedef void (*WKBundlePageDidStartProvisionalLoadForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
33typedef void (*WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
34typedef void (*WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKErrorRef error, WKTypeRef* userData, const void *clientInfo);
35typedef void (*WKBundlePageDidCommitLoadForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
36typedef void (*WKBundlePageDidDocumentFinishLoadForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
37typedef void (*WKBundlePageDidFinishLoadForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
38typedef void (*WKBundlePageDidFinishDocumentLoadForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
39typedef void (*WKBundlePageDidFinishProgressCallback)(WKBundlePageRef page, const void *clientInfo);
40typedef void (*WKBundlePageDidFailLoadWithErrorForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKErrorRef error, WKTypeRef* userData, const void *clientInfo);
41typedef void (*WKBundlePageDidSameDocumentNavigationForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKSameDocumentNavigationType type, WKTypeRef* userData, const void *clientInfo);
42typedef void (*WKBundlePageDidReceiveTitleForFrameCallback)(WKBundlePageRef page, WKStringRef title, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
43typedef void (*WKBundlePageDidRemoveFrameFromHierarchyCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
44typedef void (*WKBundlePageDidDisplayInsecureContentForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
45typedef void (*WKBundlePageDidRunInsecureContentForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
46typedef void (*WKBundlePageDidDetectXSSForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
47typedef void (*WKBundlePageDidFirstLayoutForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
48typedef void (*WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKTypeRef* userData, const void *clientInfo);
49typedef void (*WKBundlePageDidLayoutForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, const void* clientInfo);
50typedef void (*WKBundlePageDidClearWindowObjectForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKBundleScriptWorldRef world, const void *clientInfo);
51typedef void (*WKBundlePageDidCancelClientRedirectForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
52typedef void (*WKBundlePageWillPerformClientRedirectForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, WKURLRef url, double delay, double date, const void *clientInfo);
53typedef void (*WKBundlePageDidHandleOnloadEventsForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
54typedef bool (*WKBundlePageShouldGoToBackForwardListItemCallback)(WKBundlePageRef page, WKBundleBackForwardListItemRef item, WKTypeRef* userData, const void *clientInfo);
55typedef void (*WKBundlePageGlobalObjectIsAvailableForFrameCallback)(WKBundlePageRef page, WKBundleFrameRef, WKBundleScriptWorldRef, const void* clientInfo);
56typedef void (*WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback)(WKBundlePageRef page, WKBundleDOMWindowExtensionRef, const void* clientInfo);
57typedef void (*WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback)(WKBundlePageRef page, WKBundleDOMWindowExtensionRef, const void* clientInfo);
58typedef void (*WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback)(WKBundlePageRef page, WKBundleDOMWindowExtensionRef, const void* clientInfo);
59typedef bool (*WKBundlePageShouldForceUniversalAccessFromLocalURLCallback)(WKBundlePageRef, WKStringRef url, const void* clientInfo);
60typedef void (*WKBundlePageDidLayoutCallback)(WKBundlePageRef page, WKLayoutMilestones milestones, WKTypeRef* userData, const void *clientInfo);
61typedef void (*WKBundlePageFeaturesUsedInPageCallback)(WKBundlePageRef page, WKArrayRef featureStrings, const void *clientInfo);
62typedef void (*WKBundlePageWillLoadURLRequestCallback)(WKBundlePageRef page, WKURLRequestRef request, WKTypeRef userData, const void *clientInfo);
63typedef void (*WKBundlePageWillLoadDataRequestCallback)(WKBundlePageRef page, WKURLRequestRef request, WKDataRef data, WKStringRef MIMEType, WKStringRef encodingName, WKURLRef unreachableURL, WKTypeRef userData, const void *clientInfo);
64typedef void (*WKBundlePageWillDestroyFrame)(WKBundlePageRef page, WKBundleFrameRef frame, const void *clientInfo);
65typedef WKStringRef (*WKBundlePageUserAgentForURLCallback)(WKBundleFrameRef frame, WKURLRef url, const void *clientInfo);
66
67typedef struct WKBundlePageLoaderClientBase {
68    int                                                                     version;
69    const void *                                                            clientInfo;
70} WKBundlePageLoaderClientBase;
71
72typedef struct WKBundlePageLoaderClientV0 {
73    WKBundlePageLoaderClientBase                                            base;
74
75    // Version 0.
76    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
77    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
78    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
79    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
80    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
81    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
82    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
83    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
84    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
85    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
86    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
87    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
88    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
89    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
90    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
91    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
92    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
93    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
94} WKBundlePageLoaderClientV0;
95
96typedef struct WKBundlePageLoaderClientV1 {
97    WKBundlePageLoaderClientBase                                            base;
98
99    // Version 0.
100    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
101    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
102    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
103    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
104    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
105    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
106    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
107    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
108    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
109    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
110    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
111    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
112    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
113    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
114    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
115    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
116    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
117    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
118
119    // Version 1.
120    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
121    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
122    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
123    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
124    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
125    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
126    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
127    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
128} WKBundlePageLoaderClientV1;
129
130typedef struct WKBundlePageLoaderClientV2 {
131    WKBundlePageLoaderClientBase                                            base;
132
133    // Version 0.
134    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
135    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
136    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
137    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
138    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
139    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
140    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
141    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
142    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
143    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
144    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
145    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
146    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
147    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
148    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
149    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
150    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
151    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
152
153    // Version 1.
154    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
155    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
156    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
157    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
158    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
159    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
160    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
161    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
162
163    // Version 2
164    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
165    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
166} WKBundlePageLoaderClientV2;
167
168typedef struct WKBundlePageLoaderClientV3 {
169    WKBundlePageLoaderClientBase                                            base;
170
171    // Version 0.
172    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
173    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
174    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
175    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
176    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
177    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
178    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
179    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
180    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
181    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
182    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
183    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
184    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
185    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
186    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
187    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
188    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
189    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
190
191    // Version 1.
192    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
193    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
194    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
195    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
196    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
197    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
198    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
199    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
200
201    // Version 2
202    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
203    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
204
205    // Version 3
206    void *                                                                  didReceiveIntentForFrame_unavailable;
207    void *                                                                  registerIntentServiceForFrame_unavailable;
208} WKBundlePageLoaderClientV3;
209
210typedef struct WKBundlePageLoaderClientV4 {
211    WKBundlePageLoaderClientBase                                            base;
212
213    // Version 0.
214    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
215    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
216    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
217    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
218    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
219    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
220    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
221    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
222    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
223    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
224    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
225    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
226    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
227    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
228    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
229    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
230    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
231    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
232
233    // Version 1.
234    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
235    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
236    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
237    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
238    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
239    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
240    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
241    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
242
243    // Version 2
244    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
245    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
246
247    // Version 3
248    void *                                                                  didReceiveIntentForFrame_unavailable;
249    void *                                                                  registerIntentServiceForFrame_unavailable;
250
251    // Version 4
252    WKBundlePageDidLayoutCallback                                           didLayout;
253} WKBundlePageLoaderClientV4;
254
255typedef struct WKBundlePageLoaderClientV5 {
256    WKBundlePageLoaderClientBase                                            base;
257
258    // Version 0.
259    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
260    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
261    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
262    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
263    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
264    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
265    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
266    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
267    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
268    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
269    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
270    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
271    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
272    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
273    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
274    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
275    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
276    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
277
278    // Version 1.
279    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
280    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
281    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
282    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
283    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
284    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
285    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
286    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
287
288    // Version 2
289    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
290    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
291
292    // Version 3
293    void *                                                                  didReceiveIntentForFrame_unavailable;
294    void *                                                                  registerIntentServiceForFrame_unavailable;
295
296    // Version 4
297    WKBundlePageDidLayoutCallback                                           didLayout;
298
299    // Version 5
300    WKBundlePageFeaturesUsedInPageCallback                                  featuresUsedInPage;
301} WKBundlePageLoaderClientV5;
302
303typedef struct WKBundlePageLoaderClientV6 {
304    WKBundlePageLoaderClientBase                                            base;
305
306    // Version 0.
307    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
308    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
309    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
310    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
311    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
312    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
313    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
314    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
315    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
316    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
317    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
318    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
319    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
320    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
321    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
322    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
323    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
324    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
325
326    // Version 1.
327    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
328    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
329    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
330    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
331    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
332    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
333    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
334    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
335
336    // Version 2
337    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
338    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
339
340    // Version 3
341    void *                                                                  didReceiveIntentForFrame_unavailable;
342    void *                                                                  registerIntentServiceForFrame_unavailable;
343
344    // Version 4
345    WKBundlePageDidLayoutCallback                                           didLayout;
346
347    // Version 5
348    WKBundlePageFeaturesUsedInPageCallback                                  featuresUsedInPage;
349
350    // Version 6
351    WKBundlePageWillLoadURLRequestCallback                                  willLoadURLRequest;
352    WKBundlePageWillLoadDataRequestCallback                                 willLoadDataRequest;
353} WKBundlePageLoaderClientV6;
354
355typedef struct WKBundlePageLoaderClientV7 {
356    WKBundlePageLoaderClientBase                                            base;
357
358    // Version 0.
359    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
360    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
361    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
362    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
363    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
364    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
365    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
366    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
367    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
368    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
369    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
370    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
371    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
372    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
373    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
374    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
375    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
376    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
377
378    // Version 1.
379    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
380    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
381    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
382    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
383    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
384    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
385    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
386    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
387
388    // Version 2
389    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
390    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
391
392    // Version 3
393    void *                                                                  didReceiveIntentForFrame_unavailable;
394    void *                                                                  registerIntentServiceForFrame_unavailable;
395
396    // Version 4
397    WKBundlePageDidLayoutCallback                                           didLayout;
398
399    // Version 5
400    WKBundlePageFeaturesUsedInPageCallback                                  featuresUsedInPage;
401
402    // Version 6
403    WKBundlePageWillLoadURLRequestCallback                                  willLoadURLRequest;
404    WKBundlePageWillLoadDataRequestCallback                                 willLoadDataRequest;
405
406    // Version 7
407    WKBundlePageWillDestroyFrame                                            willDestroyFrame;
408} WKBundlePageLoaderClientV7;
409
410typedef struct WKBundlePageLoaderClientV8 {
411    WKBundlePageLoaderClientBase                                            base;
412
413    // Version 0.
414    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
415    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
416    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
417    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
418    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
419    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
420    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
421    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
422    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
423    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
424    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
425    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
426    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
427    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
428    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
429    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
430    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
431    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
432
433    // Version 1.
434    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
435    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
436    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
437    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
438    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
439    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
440    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
441    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
442
443    // Version 2
444    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
445    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
446
447    // Version 3
448    void *                                                                  didReceiveIntentForFrame_unavailable;
449    void *                                                                  registerIntentServiceForFrame_unavailable;
450
451    // Version 4
452    WKBundlePageDidLayoutCallback                                           didLayout;
453
454    // Version 5
455    WKBundlePageFeaturesUsedInPageCallback                                  featuresUsedInPage;
456
457    // Version 6
458    WKBundlePageWillLoadURLRequestCallback                                  willLoadURLRequest;
459    WKBundlePageWillLoadDataRequestCallback                                 willLoadDataRequest;
460
461    // Version 7
462    WKBundlePageWillDestroyFrame                                            willDestroyFrame;
463
464    // Version 8
465    WKBundlePageUserAgentForURLCallback                                     userAgentForURL;
466} WKBundlePageLoaderClientV8;
467
468enum { kWKBundlePageLoaderClientCurrentVersion WK_ENUM_DEPRECATED("Use an explicit version number instead") = 8 };
469typedef struct WKBundlePageLoaderClient {
470    int                                                                     version;
471    const void *                                                            clientInfo;
472
473    // Version 0.
474    WKBundlePageDidStartProvisionalLoadForFrameCallback                     didStartProvisionalLoadForFrame;
475    WKBundlePageDidReceiveServerRedirectForProvisionalLoadForFrameCallback  didReceiveServerRedirectForProvisionalLoadForFrame;
476    WKBundlePageDidFailProvisionalLoadWithErrorForFrameCallback             didFailProvisionalLoadWithErrorForFrame;
477    WKBundlePageDidCommitLoadForFrameCallback                               didCommitLoadForFrame;
478    WKBundlePageDidFinishDocumentLoadForFrameCallback                       didFinishDocumentLoadForFrame;
479    WKBundlePageDidFinishLoadForFrameCallback                               didFinishLoadForFrame;
480    WKBundlePageDidFailLoadWithErrorForFrameCallback                        didFailLoadWithErrorForFrame;
481    WKBundlePageDidSameDocumentNavigationForFrameCallback                   didSameDocumentNavigationForFrame;
482    WKBundlePageDidReceiveTitleForFrameCallback                             didReceiveTitleForFrame;
483    WKBundlePageDidFirstLayoutForFrameCallback                              didFirstLayoutForFrame;
484    WKBundlePageDidFirstVisuallyNonEmptyLayoutForFrameCallback              didFirstVisuallyNonEmptyLayoutForFrame;
485    WKBundlePageDidRemoveFrameFromHierarchyCallback                         didRemoveFrameFromHierarchy;
486    WKBundlePageDidDisplayInsecureContentForFrameCallback                   didDisplayInsecureContentForFrame;
487    WKBundlePageDidRunInsecureContentForFrameCallback                       didRunInsecureContentForFrame;
488    WKBundlePageDidClearWindowObjectForFrameCallback                        didClearWindowObjectForFrame;
489    WKBundlePageDidCancelClientRedirectForFrameCallback                     didCancelClientRedirectForFrame;
490    WKBundlePageWillPerformClientRedirectForFrameCallback                   willPerformClientRedirectForFrame;
491    WKBundlePageDidHandleOnloadEventsForFrameCallback                       didHandleOnloadEventsForFrame;
492
493    // Version 1.
494    WKBundlePageDidLayoutForFrameCallback                                   didLayoutForFrame;
495    void *                                                                  didNewFirstVisuallyNonEmptyLayout_unavailable;
496    WKBundlePageDidDetectXSSForFrameCallback                                didDetectXSSForFrame;
497    WKBundlePageShouldGoToBackForwardListItemCallback                       shouldGoToBackForwardListItem;
498    WKBundlePageGlobalObjectIsAvailableForFrameCallback                     globalObjectIsAvailableForFrame;
499    WKBundlePageWillDisconnectDOMWindowExtensionFromGlobalObjectCallback    willDisconnectDOMWindowExtensionFromGlobalObject;
500    WKBundlePageDidReconnectDOMWindowExtensionToGlobalObjectCallback        didReconnectDOMWindowExtensionToGlobalObject;
501    WKBundlePageWillDestroyGlobalObjectForDOMWindowExtensionCallback        willDestroyGlobalObjectForDOMWindowExtension;
502
503    // Version 2
504    WKBundlePageDidFinishProgressCallback                                   didFinishProgress;
505    WKBundlePageShouldForceUniversalAccessFromLocalURLCallback              shouldForceUniversalAccessFromLocalURL;
506
507    // Version 3
508    void *                                                                  didReceiveIntentForFrame_unavailable;
509    void *                                                                  registerIntentServiceForFrame_unavailable;
510
511    // Version 4
512    WKBundlePageDidLayoutCallback                                           didLayout;
513
514    // Version 5
515    WKBundlePageFeaturesUsedInPageCallback                                  featuresUsedInPage;
516
517    // Version 6
518    WKBundlePageWillLoadURLRequestCallback                                  willLoadURLRequest;
519    WKBundlePageWillLoadDataRequestCallback                                 willLoadDataRequest;
520
521    // Version 7
522    WKBundlePageWillDestroyFrame                                            willDestroyFrame;
523} WKBundlePageLoaderClient WK_DEPRECATED("Use an explicit versioned struct instead");
524
525#endif // WKBundlePageLoaderClient_h
526