1/*
2 * Copyright (C) 2010, 2011 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 WKContext_h
27#define WKContext_h
28
29#include <WebKit2/WKBase.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
35enum {
36    kWKCacheModelDocumentViewer = 0,
37    kWKCacheModelDocumentBrowser = 1,
38    kWKCacheModelPrimaryWebBrowser = 2
39};
40typedef uint32_t WKCacheModel;
41
42// Injected Bundle Client
43typedef void (*WKContextDidReceiveMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef messageName, WKTypeRef messageBody, const void *clientInfo);
44typedef void (*WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback)(WKContextRef page, WKStringRef messageName, WKTypeRef messageBody, WKTypeRef* returnData, const void *clientInfo);
45
46struct WKContextInjectedBundleClient {
47    int                                                                 version;
48    const void *                                                        clientInfo;
49    WKContextDidReceiveMessageFromInjectedBundleCallback                didReceiveMessageFromInjectedBundle;
50    WKContextDidReceiveSynchronousMessageFromInjectedBundleCallback     didReceiveSynchronousMessageFromInjectedBundle;
51};
52typedef struct WKContextInjectedBundleClient WKContextInjectedBundleClient;
53
54// History Client
55typedef void (*WKContextDidNavigateWithNavigationDataCallback)(WKContextRef context, WKPageRef page, WKNavigationDataRef navigationData, WKFrameRef frame, const void *clientInfo);
56typedef void (*WKContextDidPerformClientRedirectCallback)(WKContextRef context, WKPageRef page, WKURLRef sourceURL, WKURLRef destinationURL, WKFrameRef frame, const void *clientInfo);
57typedef void (*WKContextDidPerformServerRedirectCallback)(WKContextRef context, WKPageRef page, WKURLRef sourceURL, WKURLRef destinationURL, WKFrameRef frame, const void *clientInfo);
58typedef void (*WKContextDidUpdateHistoryTitleCallback)(WKContextRef context, WKPageRef page, WKStringRef title, WKURLRef URL, WKFrameRef frame, const void *clientInfo);
59typedef void (*WKContextPopulateVisitedLinksCallback)(WKContextRef context, const void *clientInfo);
60
61struct WKContextHistoryClient {
62    int                                                                 version;
63    const void *                                                        clientInfo;
64    WKContextDidNavigateWithNavigationDataCallback                      didNavigateWithNavigationData;
65    WKContextDidPerformClientRedirectCallback                           didPerformClientRedirect;
66    WKContextDidPerformServerRedirectCallback                           didPerformServerRedirect;
67    WKContextDidUpdateHistoryTitleCallback                              didUpdateHistoryTitle;
68    WKContextPopulateVisitedLinksCallback                               populateVisitedLinks;
69};
70typedef struct WKContextHistoryClient WKContextHistoryClient;
71
72// Download Client
73typedef void (*WKContextDownloadDidStartCallback)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
74typedef void (*WKContextDownloadDidReceiveAuthenticationChallengeCallback)(WKContextRef context, WKDownloadRef download, WKAuthenticationChallengeRef authenticationChallenge, const void *clientInfo);
75typedef void (*WKContextDownloadDidReceiveResponseCallback)(WKContextRef context, WKDownloadRef download, WKURLResponseRef response, const void *clientInfo);
76typedef void (*WKContextDownloadDidReceiveDataCallback)(WKContextRef context, WKDownloadRef download, uint64_t length, const void *clientInfo);
77typedef bool (*WKContextDownloadShouldDecodeSourceDataOfMIMETypeCallback)(WKContextRef context, WKDownloadRef download, WKStringRef mimeType, const void *clientInfo);
78typedef WKStringRef (*WKContextDownloadDecideDestinationWithSuggestedFilenameCallback)(WKContextRef context, WKDownloadRef download, WKStringRef filename, bool* allowOverwrite, const void *clientInfo);
79typedef void (*WKContextDownloadDidCreateDestinationCallback)(WKContextRef context, WKDownloadRef download, WKStringRef path, const void *clientInfo);
80typedef void (*WKContextDownloadDidFinishCallback)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
81typedef void (*WKContextDownloadDidFailCallback)(WKContextRef context, WKDownloadRef download, WKErrorRef error, const void *clientInfo);
82typedef void (*WKContextDownloadDidCancel)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
83typedef void (*WKContextDownloadProcessDidCrashCallback)(WKContextRef context, WKDownloadRef download, const void *clientInfo);
84
85struct WKContextDownloadClient {
86    int                                                                 version;
87    const void *                                                        clientInfo;
88    WKContextDownloadDidStartCallback                                   didStart;
89    WKContextDownloadDidReceiveAuthenticationChallengeCallback          didReceiveAuthenticationChallenge;
90    WKContextDownloadDidReceiveResponseCallback                         didReceiveResponse;
91    WKContextDownloadDidReceiveDataCallback                             didReceiveData;
92    WKContextDownloadShouldDecodeSourceDataOfMIMETypeCallback           shouldDecodeSourceDataOfMIMEType;
93    WKContextDownloadDecideDestinationWithSuggestedFilenameCallback     decideDestinationWithSuggestedFilename;
94    WKContextDownloadDidCreateDestinationCallback                       didCreateDestination;
95    WKContextDownloadDidFinishCallback                                  didFinish;
96    WKContextDownloadDidFailCallback                                    didFail;
97    WKContextDownloadDidCancel                                          didCancel;
98    WKContextDownloadProcessDidCrashCallback                            processDidCrash;
99};
100typedef struct WKContextDownloadClient WKContextDownloadClient;
101
102WK_EXPORT WKTypeID WKContextGetTypeID();
103
104WK_EXPORT WKContextRef WKContextCreate();
105WK_EXPORT WKContextRef WKContextCreateWithInjectedBundlePath(WKStringRef path);
106WK_EXPORT WKContextRef WKContextGetSharedProcessContext();
107
108WK_EXPORT void WKContextSetInjectedBundleClient(WKContextRef context, const WKContextInjectedBundleClient* client);
109WK_EXPORT void WKContextSetHistoryClient(WKContextRef context, const WKContextHistoryClient* client);
110WK_EXPORT void WKContextSetDownloadClient(WKContextRef context, const WKContextDownloadClient* client);
111
112WK_EXPORT WKDownloadRef WKContextDownloadURLRequest(WKContextRef context, const WKURLRequestRef request);
113
114WK_EXPORT void WKContextSetInitializationUserDataForInjectedBundle(WKContextRef context, WKTypeRef userData);
115WK_EXPORT void WKContextPostMessageToInjectedBundle(WKContextRef context, WKStringRef messageName, WKTypeRef messageBody);
116
117WK_EXPORT void WKContextAddVisitedLink(WKContextRef context, WKStringRef visitedURL);
118
119WK_EXPORT void WKContextSetCacheModel(WKContextRef context, WKCacheModel cacheModel);
120WK_EXPORT WKCacheModel WKContextGetCacheModel(WKContextRef context);
121
122WK_EXPORT void WKContextStartMemorySampler(WKContextRef context, WKDoubleRef interval);
123WK_EXPORT void WKContextStopMemorySampler(WKContextRef context);
124
125WK_EXPORT WKApplicationCacheManagerRef WKContextGetApplicationCacheManager(WKContextRef context);
126WK_EXPORT WKCookieManagerRef WKContextGetCookieManager(WKContextRef context);
127WK_EXPORT WKDatabaseManagerRef WKContextGetDatabaseManager(WKContextRef context);
128WK_EXPORT WKGeolocationManagerRef WKContextGetGeolocationManager(WKContextRef context);
129WK_EXPORT WKIconDatabaseRef WKContextGetIconDatabase(WKContextRef context);
130WK_EXPORT WKKeyValueStorageManagerRef WKContextGetKeyValueStorageManager(WKContextRef context);
131WK_EXPORT WKMediaCacheManagerRef WKContextGetMediaCacheManager(WKContextRef context);
132WK_EXPORT WKPluginSiteDataManagerRef WKContextGetPluginSiteDataManager(WKContextRef context);
133WK_EXPORT WKResourceCacheManagerRef WKContextGetResourceCacheManager(WKContextRef context);
134
135#ifdef __cplusplus
136}
137#endif
138
139#endif /* WKContext_h */
140