2010-06-16 Martin Robinson <mrobinson@igalia.com>
[WebKit-https.git] / WebKit / gtk / webkit / webkitprivate.h
1 /*
2  * Copyright (C) 2007, 2008, 2009 Holger Hans Peter Freyther
3  * Copyright (C) 2008 Jan Michael C. Alonzo
4  * Copyright (C) 2008 Collabora Ltd.
5  * Copyright (C) 2010 Igalia S.L.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  */
22
23 #ifndef webkitprivate_h
24 #define webkitprivate_h
25
26 /*
27  * This file knows the shared secret of WebKitWebView, WebKitWebFrame,
28  * and WebKitNetworkRequest.
29  * They are using WebCore which musn't be exposed to the outer world.
30  */
31
32 #include <webkit/webkitdefines.h>
33 #include <webkit/webkitdownload.h>
34 #include <webkit/webkithittestresult.h>
35 #include <webkit/webkitnetworkrequest.h>
36 #include <webkit/webkitwebview.h>
37 #include <webkit/webkitwebdatasource.h>
38 #include <webkit/webkitwebframe.h>
39 #include <webkit/webkitwebpolicydecision.h>
40 #include <webkit/webkitwebnavigationaction.h>
41 #include <webkit/webkitwebresource.h>
42 #include <webkit/webkitwebsettings.h>
43 #include <webkit/webkitwebwindowfeatures.h>
44 #include <webkit/webkitwebbackforwardlist.h>
45 #include <webkit/webkitnetworkrequest.h>
46 #include <webkit/webkitsecurityorigin.h>
47
48 #include "ArchiveResource.h"
49 #include "BackForwardList.h"
50 #include "DataObjectGtk.h"
51 #include <enchant.h>
52 #include "GOwnPtr.h"
53 #include "Geolocation.h"
54 #include "HistoryItem.h"
55 #include "Settings.h"
56 #include "Page.h"
57 #include "Frame.h"
58 #include "InspectorClientGtk.h"
59 #include "IntPoint.h"
60 #include "FrameLoaderClient.h"
61 #include "ResourceHandle.h"
62 #include "ResourceRequest.h"
63 #include "ResourceResponse.h"
64 #include "WindowFeatures.h"
65 #include "SecurityOrigin.h"
66 #include <wtf/text/CString.h>
67
68 #include <atk/atk.h>
69 #include <glib.h>
70 #include <libsoup/soup.h>
71
72 class DownloadClient;
73
74 namespace WebKit {
75
76     class DocumentLoader;
77     class PasteboardHelperGtk;
78
79     WebKitWebView* getViewFromFrame(WebKitWebFrame*);
80
81     WebCore::Frame* core(WebKitWebFrame*);
82     WebKitWebFrame* kit(WebCore::Frame*);
83
84     WebCore::Page* core(WebKitWebView*);
85     WebKitWebView* kit(WebCore::Page*);
86
87     WebCore::HistoryItem* core(WebKitWebHistoryItem*);
88     WebKitWebHistoryItem* kit(PassRefPtr<WebCore::HistoryItem>);
89
90     WebCore::BackForwardList* core(WebKitWebBackForwardList*);
91
92     WebKitWebNavigationReason kit(WebCore::NavigationType type);
93     WebCore::NavigationType core(WebKitWebNavigationReason reason);
94
95     WebCore::ResourceRequest core(WebKitNetworkRequest* request);
96
97     WebCore::ResourceResponse core(WebKitNetworkResponse* response);
98
99     WebCore::EditingBehaviorType core(WebKitEditingBehavior type);
100
101     WebKitSecurityOrigin* kit(WebCore::SecurityOrigin*);
102     WebCore::SecurityOrigin* core(WebKitSecurityOrigin*);
103
104     WebKitHitTestResult* kit(const WebCore::HitTestResult&);
105
106     WebKit::PasteboardHelperGtk* pasteboardHelperInstance();
107 }
108
109 extern "C" {
110     void webkit_init();
111
112 #define WEBKIT_PARAM_READABLE ((GParamFlags)(G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB))
113 #define WEBKIT_PARAM_READWRITE ((GParamFlags)(G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB))
114
115     #define WEBKIT_WEB_VIEW_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebViewPrivate))
116     typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
117     struct _WebKitWebViewPrivate {
118         WebCore::Page* corePage;
119         WebKitWebSettings* webSettings;
120         WebKitWebInspector* webInspector;
121         WebKitWebWindowFeatures* webWindowFeatures;
122
123         WebKitWebFrame* mainFrame;
124         WebKitWebBackForwardList* backForwardList;
125
126         GtkMenu* currentMenu;
127         gint lastPopupXPosition;
128         gint lastPopupYPosition;
129
130         HashSet<GtkWidget*> children;
131         bool editable;
132         GtkIMContext* imContext;
133
134         gboolean transparent;
135
136         GtkAdjustment* horizontalAdjustment;
137         GtkAdjustment* verticalAdjustment;
138
139         gboolean zoomFullContent;
140         WebKitLoadStatus loadStatus;
141         char* encoding;
142         char* customEncoding;
143
144         char* iconURI;
145
146         gboolean disposing;
147         gboolean usePrimaryForPaste;
148
149         // These are hosted here because the DataSource object is
150         // created too late in the frame loading process.
151         WebKitWebResource* mainResource;
152         char* mainResourceIdentifier;
153         GHashTable* subResources;
154         char* tooltipText;
155
156         int currentClickCount;
157         WebCore::IntPoint* previousClickPoint;
158         guint previousClickButton;
159         guint32 previousClickTime;
160
161         HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk> > draggingDataObjects;
162     };
163
164     #define WEBKIT_WEB_FRAME_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_FRAME, WebKitWebFramePrivate))
165     typedef struct _WebKitWebFramePrivate WebKitWebFramePrivate;
166     struct _WebKitWebFramePrivate {
167         WebCore::Frame* coreFrame;
168         WebKitWebView* webView;
169
170         gchar* name;
171         gchar* title;
172         gchar* uri;
173         WebKitLoadStatus loadStatus;
174         WebKitSecurityOrigin* origin;
175     };
176
177 #define WEBKIT_SECURITY_ORIGIN_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_SECURITY_ORIGIN, WebKitSecurityOriginPrivate))
178     struct _WebKitSecurityOriginPrivate {
179         RefPtr<WebCore::SecurityOrigin> coreOrigin;
180         gchar* protocol;
181         gchar* host;
182         GHashTable* webDatabases;
183
184         gboolean disposed;
185     };
186
187     PassRefPtr<WebCore::Frame>
188     webkit_web_frame_init_with_web_view(WebKitWebView*, WebCore::HTMLFrameOwnerElement*);
189
190     void
191     webkit_web_frame_core_frame_gone(WebKitWebFrame*);
192
193     // WebKitWebHistoryItem private
194     WebKitWebHistoryItem*
195     webkit_web_history_item_new_with_core_item(PassRefPtr<WebCore::HistoryItem> historyItem);
196
197     WEBKIT_API G_CONST_RETURN gchar*
198     webkit_web_history_item_get_target(WebKitWebHistoryItem*);
199
200     WEBKIT_API gboolean
201     webkit_web_history_item_is_target_item(WebKitWebHistoryItem*);
202
203     WEBKIT_API GList*
204     webkit_web_history_item_get_children(WebKitWebHistoryItem*);
205     // end WebKitWebHistoryItem private
206
207     // WebKitWebResource private
208     #define WEBKIT_WEB_RESOURCE_GET_PRIVATE(obj)        (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_RESOURCE, WebKitWebResourcePrivate))
209     struct _WebKitWebResourcePrivate {
210         WebCore::ArchiveResource* resource;
211
212         gchar* uri;
213         gchar* mimeType;
214         gchar* textEncoding;
215         gchar* frameName;
216
217         GString* data;
218     };
219     WebKitWebResource*
220     webkit_web_resource_new_with_core_resource(PassRefPtr<WebCore::ArchiveResource>);
221
222     void
223     webkit_web_resource_init_with_core_resource(WebKitWebResource*, PassRefPtr<WebCore::ArchiveResource>);
224
225     // end WebKitWebResource private
226
227     void
228     webkit_web_inspector_set_inspector_client(WebKitWebInspector*, WebCore::Page*);
229
230     void
231     webkit_web_inspector_set_web_view(WebKitWebInspector *web_inspector, WebKitWebView *web_view);
232
233     void
234     webkit_web_inspector_set_inspected_uri(WebKitWebInspector* web_inspector, const gchar* inspected_uri);
235
236     WEBKIT_API void
237     webkit_web_inspector_execute_script(WebKitWebInspector* inspector, long callId, const gchar* script);
238
239
240     WebKitWebWindowFeatures*
241     webkit_web_window_features_new_from_core_features (const WebCore::WindowFeatures& features);
242
243     void
244     webkit_web_view_notify_ready (WebKitWebView* web_view);
245
246     void
247     webkit_web_view_request_download(WebKitWebView* web_view, WebKitNetworkRequest* request, const WebCore::ResourceResponse& response = WebCore::ResourceResponse(), WebCore::ResourceHandle* handle = 0);
248
249     void
250     webkit_web_view_add_resource(WebKitWebView*, const char*, WebKitWebResource*);
251
252     WebKitWebResource*
253     webkit_web_view_get_resource(WebKitWebView*, char*);
254
255     WebKitWebResource*
256     webkit_web_view_get_main_resource(WebKitWebView*);
257
258     void
259     webkit_web_view_clear_resources(WebKitWebView*);
260
261     GList*
262     webkit_web_view_get_subresources(WebKitWebView*);
263
264     void
265     webkit_web_view_set_tooltip_text(WebKitWebView*, const char*);
266
267     WebKitDownload*
268     webkit_download_new_with_handle(WebKitNetworkRequest* request, WebCore::ResourceHandle* handle, const WebCore::ResourceResponse& response);
269
270     void
271     webkit_download_set_suggested_filename(WebKitDownload* download, const gchar* suggestedFilename);
272
273     WebKitWebPolicyDecision*
274     webkit_web_policy_decision_new (WebKitWebFrame*, WebCore::FramePolicyFunction);
275
276     void
277     webkit_web_policy_decision_cancel (WebKitWebPolicyDecision* decision);
278
279     WebKitNetworkRequest*
280     webkit_network_request_new_with_core_request(const WebCore::ResourceRequest& resourceRequest);
281
282     WebKitNetworkResponse*
283     webkit_network_response_new_with_core_response(const WebCore::ResourceResponse& resourceResponse);
284
285     WebKitGeolocationPolicyDecision*
286     webkit_geolocation_policy_decision_new(WebKitWebFrame*, WebCore::Geolocation*);
287
288     // FIXME: move this to webkitnetworkrequest.h once the API is agreed upon.
289     WEBKIT_API SoupMessage*
290     webkit_network_request_get_message(WebKitNetworkRequest* request);
291
292     // FIXME: move this functionality into a 'WebKitWebDataSource' once implemented
293     WEBKIT_API gchar*
294     webkit_web_frame_get_response_mime_type(WebKitWebFrame* frame);
295
296     // FIXME: Move these to webkitwebframe.h once their API has been discussed.
297
298     WEBKIT_API GSList*
299     webkit_web_frame_get_children (WebKitWebFrame* frame);
300
301     WEBKIT_API gchar*
302     webkit_web_frame_get_inner_text (WebKitWebFrame* frame);
303
304     WEBKIT_API gchar*
305     webkit_web_frame_dump_render_tree (WebKitWebFrame* frame);
306
307     WEBKIT_API gchar*
308     webkit_web_frame_counter_value_for_element_by_id (WebKitWebFrame* frame, const gchar* id);
309
310     WEBKIT_API int
311     webkit_web_frame_page_number_for_element_by_id(WebKitWebFrame* frame, const gchar* id, float pageWidth, float pageHeight);
312
313     WEBKIT_API int
314     webkit_web_frame_number_of_pages(WebKitWebFrame* frame, float pageWidth, float pageHeight);
315
316     WEBKIT_API guint
317     webkit_web_frame_get_pending_unload_event_count(WebKitWebFrame* frame);
318
319     WEBKIT_API bool
320     webkit_web_frame_pause_animation(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
321
322     WEBKIT_API bool
323     webkit_web_frame_pause_transition(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
324
325     WEBKIT_API bool
326     webkit_web_frame_pause_svg_animation(WebKitWebFrame* frame, const gchar* animationId, double time, const gchar* elementId);
327
328     WEBKIT_API gchar*
329     webkit_web_frame_marker_text_for_list_item(WebKitWebFrame* frame, JSContextRef context, JSValueRef nodeObject);
330
331     WEBKIT_API unsigned int
332     webkit_web_frame_number_of_active_animations(WebKitWebFrame* frame);
333
334     WEBKIT_API void
335     webkit_web_frame_clear_main_frame_name(WebKitWebFrame* frame);
336
337     WEBKIT_API AtkObject*
338     webkit_web_frame_get_focused_accessible_element(WebKitWebFrame* frame);
339
340     WEBKIT_API gchar*
341     webkit_web_view_get_selected_text (WebKitWebView* web_view);
342
343     WEBKIT_API void
344     webkit_web_view_set_group_name(WebKitWebView* web_view, const gchar* group_name);
345
346     WEBKIT_API void
347     webkit_web_settings_add_extra_plugin_directory (WebKitWebView *web_view, const gchar* directory);
348
349     GSList*
350     webkit_web_settings_get_enchant_dicts(WebKitWebView* web_view);
351
352     bool
353     webkit_web_view_use_primary_for_paste(WebKitWebView* web_view);
354
355     GHashTable*
356     webkit_history_items(void);
357
358     WEBKIT_API void
359     webkit_gc_collect_javascript_objects();
360
361     WEBKIT_API void
362     webkit_gc_collect_javascript_objects_on_alternate_thread(gboolean waitUntilDone);
363
364     WEBKIT_API gsize
365     webkit_gc_count_javascript_objects();
366
367     WEBKIT_API void
368     webkit_application_cache_set_maximum_size(unsigned long long size);
369
370     WEBKIT_API unsigned int
371     webkit_worker_thread_count();
372     
373     WEBKIT_API void
374     webkit_white_list_access_from_origin(const gchar* sourceOrigin, const gchar* destinationProtocol, const gchar* destinationHost, bool allowDestinationSubdomains);
375     
376     WEBKIT_API void
377     webkit_reset_origin_access_white_lists();
378
379     // WebKitWebDataSource private
380     WebKitWebDataSource*
381     webkit_web_data_source_new_with_loader(PassRefPtr<WebKit::DocumentLoader>);
382
383     WEBKIT_API WebKitWebDatabase *
384     webkit_security_origin_get_web_database(WebKitSecurityOrigin* securityOrigin, const char* databaseName);
385
386     WEBKIT_API void
387     webkit_web_frame_layout(WebKitWebFrame* frame);
388 }
389
390 #endif