3ac356338381b795c87d0213ed41957f843c5a0b
[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 "BackForwardListImpl.h"
50 #include "DataObjectGtk.h"
51 #include "DragActions.h"
52 #include "Frame.h"
53 #include "GOwnPtr.h"
54 #include "Geolocation.h"
55 #include "HistoryItem.h"
56 #include "InspectorClientGtk.h"
57 #include "IntPoint.h"
58 #include "FrameLoaderClient.h"
59 #include "FullscreenVideoController.h"
60 #include "Node.h"
61 #include "Page.h"
62 #include "PlatformString.h"
63 #include "ResourceHandle.h"
64 #include "ResourceRequest.h"
65 #include "ResourceResponse.h"
66 #include "WindowFeatures.h"
67 #include "SecurityOrigin.h"
68 #include "Settings.h"
69 #include <enchant.h>
70 #include <wtf/OwnPtr.h>
71 #include <wtf/text/CString.h>
72
73 #include <atk/atk.h>
74 #include <glib.h>
75 #include <libsoup/soup.h>
76
77 class DownloadClient;
78
79 namespace WebKit {
80
81     class DocumentLoader;
82     class PasteboardHelperGtk;
83
84     WebKitWebView* getViewFromFrame(WebKitWebFrame*);
85
86     WebCore::Frame* core(WebKitWebFrame*);
87     WebKitWebFrame* kit(WebCore::Frame*);
88
89     WebCore::Page* core(WebKitWebView*);
90     WebKitWebView* kit(WebCore::Page*);
91
92     WebCore::HistoryItem* core(WebKitWebHistoryItem*);
93     WebKitWebHistoryItem* kit(PassRefPtr<WebCore::HistoryItem>);
94
95     WebCore::BackForwardListImpl* core(WebKitWebBackForwardList*);
96
97     WebKitWebNavigationReason kit(WebCore::NavigationType type);
98     WebCore::NavigationType core(WebKitWebNavigationReason reason);
99
100     WebCore::ResourceRequest core(WebKitNetworkRequest* request);
101
102     WebCore::ResourceResponse core(WebKitNetworkResponse* response);
103
104     WebCore::EditingBehaviorType core(WebKitEditingBehavior type);
105
106     WebKitSecurityOrigin* kit(WebCore::SecurityOrigin*);
107     WebCore::SecurityOrigin* core(WebKitSecurityOrigin*);
108
109     WebKitHitTestResult* kit(const WebCore::HitTestResult&);
110
111     PasteboardHelperGtk* pasteboardHelperInstance();
112
113     typedef struct DroppingContext_ {
114         WebKitWebView* webView;
115         GdkDragContext* gdkContext;
116         RefPtr<WebCore::DataObjectGtk> dataObject;
117         WebCore::IntPoint lastMotionPosition;
118         int pendingDataRequests;
119         bool dropHappened;
120     } DroppingContext;
121 }
122
123 extern "C" {
124     void webkit_init();
125
126 #ifdef HAVE_GSETTINGS
127     GSettings* inspectorGSettings();
128 #endif
129
130 #define WEBKIT_PARAM_READABLE ((GParamFlags)(G_PARAM_READABLE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB))
131 #define WEBKIT_PARAM_READWRITE ((GParamFlags)(G_PARAM_READWRITE|G_PARAM_STATIC_NAME|G_PARAM_STATIC_NICK|G_PARAM_STATIC_BLURB))
132
133     #define WEBKIT_WEB_VIEW_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_VIEW, WebKitWebViewPrivate))
134     typedef struct _WebKitWebViewPrivate WebKitWebViewPrivate;
135     struct _WebKitWebViewPrivate {
136         WebCore::Page* corePage;
137         PlatformRefPtr<WebKitWebSettings> webSettings;
138         PlatformRefPtr<WebKitWebInspector> webInspector;
139         PlatformRefPtr<WebKitWebWindowFeatures> webWindowFeatures;
140
141         WebKitWebFrame* mainFrame;
142         PlatformRefPtr<WebKitWebBackForwardList> backForwardList;
143
144         PlatformRefPtr<GtkMenu> currentMenu;
145         gint lastPopupXPosition;
146         gint lastPopupYPosition;
147
148         HashSet<GtkWidget*> children;
149         bool editable;
150         PlatformRefPtr<GtkIMContext> imContext;
151
152         gboolean transparent;
153
154         PlatformRefPtr<GtkAdjustment> horizontalAdjustment;
155         PlatformRefPtr<GtkAdjustment> verticalAdjustment;
156
157 #ifndef GTK_API_VERSION_2
158         // GtkScrollablePolicy needs to be checked when
159         // driving the scrollable adjustment values
160         GtkScrollablePolicy horizontalScrollingPolicy;
161         GtkScrollablePolicy verticalScrollingPolicy;
162 #endif
163
164         gboolean zoomFullContent;
165         WebKitLoadStatus loadStatus;
166         CString encoding;
167         CString customEncoding;
168
169         CString iconURI;
170
171         gboolean disposing;
172         gboolean usePrimaryForPaste;
173
174 #if ENABLE(VIDEO)
175         FullscreenVideoController* fullscreenVideoController;
176 #endif
177
178         // These are hosted here because the DataSource object is
179         // created too late in the frame loading process.
180         PlatformRefPtr<WebKitWebResource> mainResource;
181         CString mainResourceIdentifier;
182         PlatformRefPtr<GHashTable> subResources;
183         CString tooltipText;
184
185         int currentClickCount;
186         WebCore::IntPoint previousClickPoint;
187         guint previousClickButton;
188         guint32 previousClickTime;
189         HashMap<GdkDragContext*, RefPtr<WebCore::DataObjectGtk> > draggingDataObjects;
190         HashMap<GdkDragContext*, WebKit::DroppingContext*> droppingContexts;
191     };
192
193     #define WEBKIT_WEB_FRAME_GET_PRIVATE(obj)    (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_FRAME, WebKitWebFramePrivate))
194     typedef struct _WebKitWebFramePrivate WebKitWebFramePrivate;
195     struct _WebKitWebFramePrivate {
196         WebCore::Frame* coreFrame;
197         WebKitWebView* webView;
198
199         gchar* name;
200         gchar* title;
201         gchar* uri;
202         WebKitLoadStatus loadStatus;
203         WebKitSecurityOrigin* origin;
204     };
205
206 #define WEBKIT_SECURITY_ORIGIN_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_SECURITY_ORIGIN, WebKitSecurityOriginPrivate))
207     struct _WebKitSecurityOriginPrivate {
208         RefPtr<WebCore::SecurityOrigin> coreOrigin;
209         gchar* protocol;
210         gchar* host;
211         GHashTable* webDatabases;
212
213         gboolean disposed;
214     };
215
216     WTF::String
217     webkitUserAgent();
218
219     void
220     webkit_web_frame_core_frame_gone(WebKitWebFrame*);
221
222     // WebKitWebHistoryItem private
223     WebKitWebHistoryItem*
224     webkit_web_history_item_new_with_core_item(PassRefPtr<WebCore::HistoryItem> historyItem);
225
226     WEBKIT_API G_CONST_RETURN gchar*
227     webkit_web_history_item_get_target(WebKitWebHistoryItem*);
228
229     WEBKIT_API gboolean
230     webkit_web_history_item_is_target_item(WebKitWebHistoryItem*);
231
232     WEBKIT_API GList*
233     webkit_web_history_item_get_children(WebKitWebHistoryItem*);
234     // end WebKitWebHistoryItem private
235
236     // WebKitWebResource private
237     #define WEBKIT_WEB_RESOURCE_GET_PRIVATE(obj)        (G_TYPE_INSTANCE_GET_PRIVATE((obj), WEBKIT_TYPE_WEB_RESOURCE, WebKitWebResourcePrivate))
238     struct _WebKitWebResourcePrivate {
239         WebCore::ArchiveResource* resource;
240
241         gchar* uri;
242         gchar* mimeType;
243         gchar* textEncoding;
244         gchar* frameName;
245
246         GString* data;
247     };
248     WebKitWebResource*
249     webkit_web_resource_new_with_core_resource(PassRefPtr<WebCore::ArchiveResource>);
250
251     void
252     webkit_web_resource_init_with_core_resource(WebKitWebResource*, PassRefPtr<WebCore::ArchiveResource>);
253
254     // end WebKitWebResource private
255
256     void
257     webkit_web_inspector_set_inspector_client(WebKitWebInspector*, WebCore::Page*);
258
259     void
260     webkit_web_inspector_set_web_view(WebKitWebInspector *web_inspector, WebKitWebView *web_view);
261
262     void
263     webkit_web_inspector_set_inspected_uri(WebKitWebInspector* web_inspector, const gchar* inspected_uri);
264
265     WEBKIT_API void
266     webkit_web_inspector_execute_script(WebKitWebInspector* inspector, long callId, const gchar* script);
267
268
269     WebKitWebWindowFeatures*
270     webkit_web_window_features_new_from_core_features (const WebCore::WindowFeatures& features);
271
272     void
273     webkit_web_view_notify_ready (WebKitWebView* web_view);
274
275     void
276     webkit_web_view_request_download(WebKitWebView* web_view, WebKitNetworkRequest* request, const WebCore::ResourceResponse& response = WebCore::ResourceResponse(), WebCore::ResourceHandle* handle = 0);
277
278     void
279     webkit_web_view_add_resource(WebKitWebView*, const char*, WebKitWebResource*);
280
281     void
282     webkit_web_view_remove_resource(WebKitWebView*, const char*);
283
284     WebKitWebResource*
285     webkit_web_view_get_resource(WebKitWebView*, char*);
286
287     WebKitWebResource*
288     webkit_web_view_get_main_resource(WebKitWebView*);
289
290     void
291     webkit_web_view_clear_resources(WebKitWebView*);
292
293     GList*
294     webkit_web_view_get_subresources(WebKitWebView*);
295
296     void
297     webkit_web_view_set_tooltip_text(WebKitWebView*, const char*);
298
299     GtkMenu*
300     webkit_web_view_get_context_menu(WebKitWebView*);
301
302     WEBKIT_API void
303     webkit_web_view_execute_core_command_by_name(WebKitWebView* webView, const gchar* name, const gchar* value);
304
305     WEBKIT_API gboolean
306     webkit_web_view_is_command_enabled(WebKitWebView* webView, const gchar* name);
307
308     WebKitDownload*
309     webkit_download_new_with_handle(WebKitNetworkRequest* request, WebCore::ResourceHandle* handle, const WebCore::ResourceResponse& response);
310
311     void
312     webkit_download_set_suggested_filename(WebKitDownload* download, const gchar* suggestedFilename);
313
314     WebKitWebPolicyDecision*
315     webkit_web_policy_decision_new (WebKitWebFrame*, WebCore::FramePolicyFunction);
316
317     void
318     webkit_web_policy_decision_cancel (WebKitWebPolicyDecision* decision);
319
320     WebKitNetworkRequest*
321     webkit_network_request_new_with_core_request(const WebCore::ResourceRequest& resourceRequest);
322
323     WebKitNetworkResponse*
324     webkit_network_response_new_with_core_response(const WebCore::ResourceResponse& resourceResponse);
325
326     WebKitGeolocationPolicyDecision*
327     webkit_geolocation_policy_decision_new(WebKitWebFrame*, WebCore::Geolocation*);
328
329     // FIXME: move this to webkitnetworkrequest.h once the API is agreed upon.
330     WEBKIT_API SoupMessage*
331     webkit_network_request_get_message(WebKitNetworkRequest* request);
332
333     // FIXME: move this functionality into a 'WebKitWebDataSource' once implemented
334     WEBKIT_API gchar*
335     webkit_web_frame_get_response_mime_type(WebKitWebFrame* frame);
336
337     // FIXME: Move these to webkitwebframe.h once their API has been discussed.
338
339     WEBKIT_API GSList*
340     webkit_web_frame_get_children (WebKitWebFrame* frame);
341
342     WEBKIT_API gchar*
343     webkit_web_frame_get_inner_text (WebKitWebFrame* frame);
344
345     WEBKIT_API gchar*
346     webkit_web_frame_dump_render_tree (WebKitWebFrame* frame);
347
348     WEBKIT_API gchar*
349     webkit_web_frame_counter_value_for_element_by_id (WebKitWebFrame* frame, const gchar* id);
350
351     WEBKIT_API int
352     webkit_web_frame_page_number_for_element_by_id(WebKitWebFrame* frame, const gchar* id, float pageWidth, float pageHeight);
353
354     WEBKIT_API int
355     webkit_web_frame_number_of_pages(WebKitWebFrame* frame, float pageWidth, float pageHeight);
356
357     WEBKIT_API guint
358     webkit_web_frame_get_pending_unload_event_count(WebKitWebFrame* frame);
359
360     WEBKIT_API bool
361     webkit_web_frame_pause_animation(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
362
363     WEBKIT_API bool
364     webkit_web_frame_pause_transition(WebKitWebFrame* frame, const gchar* name, double time, const gchar* element);
365
366     WEBKIT_API bool
367     webkit_web_frame_pause_svg_animation(WebKitWebFrame* frame, const gchar* animationId, double time, const gchar* elementId);
368
369     WEBKIT_API gchar*
370     webkit_web_frame_marker_text_for_list_item(WebKitWebFrame* frame, JSContextRef context, JSValueRef nodeObject);
371
372     WEBKIT_API unsigned int
373     webkit_web_frame_number_of_active_animations(WebKitWebFrame* frame);
374
375     WEBKIT_API void
376     webkit_web_frame_suspend_animations(WebKitWebFrame* frame);
377
378     WEBKIT_API void
379     webkit_web_frame_resume_animations(WebKitWebFrame* frame);
380
381     WEBKIT_API void
382     webkit_web_frame_clear_main_frame_name(WebKitWebFrame* frame);
383
384     WEBKIT_API AtkObject*
385     webkit_web_frame_get_focused_accessible_element(WebKitWebFrame* frame);
386
387     WEBKIT_API gchar*
388     webkit_web_view_get_selected_text (WebKitWebView* web_view);
389
390     WEBKIT_API void
391     webkit_web_view_set_group_name(WebKitWebView* web_view, const gchar* group_name);
392
393     WEBKIT_API void
394     webkit_web_settings_add_extra_plugin_directory (WebKitWebView *web_view, const gchar* directory);
395
396     GSList*
397     webkit_web_settings_get_enchant_dicts(WebKitWebView* web_view);
398
399     bool
400     webkit_web_view_use_primary_for_paste(WebKitWebView* web_view);
401
402     GHashTable*
403     webkit_history_items(void);
404
405     WEBKIT_API void
406     webkit_gc_collect_javascript_objects();
407
408     WEBKIT_API void
409     webkit_gc_collect_javascript_objects_on_alternate_thread(gboolean waitUntilDone);
410
411     WEBKIT_API gsize
412     webkit_gc_count_javascript_objects();
413
414     WEBKIT_API void
415     webkit_application_cache_set_maximum_size(unsigned long long size);
416
417     WEBKIT_API unsigned int
418     webkit_worker_thread_count();
419     
420     WEBKIT_API void
421     webkit_white_list_access_from_origin(const gchar* sourceOrigin, const gchar* destinationProtocol, const gchar* destinationHost, bool allowDestinationSubdomains);
422     
423     WEBKIT_API void
424     webkit_reset_origin_access_white_lists();
425
426     // WebKitWebDataSource private
427     WebKitWebDataSource*
428     webkit_web_data_source_new_with_loader(PassRefPtr<WebKit::DocumentLoader>);
429
430     WEBKIT_API WebKitWebDatabase *
431     webkit_security_origin_get_web_database(WebKitSecurityOrigin* securityOrigin, const char* databaseName);
432
433     WEBKIT_API void
434     webkit_web_frame_layout(WebKitWebFrame* frame);
435
436     void webkitWebViewEnterFullscreen(WebKitWebView* webView, WebCore::Node* node);
437     void webkitWebViewExitFullscreen(WebKitWebView* webView);
438 }
439
440 #endif