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