[tests] Fix compilation of jscorebus tester
[browser-dbus-bridge.git] / tests / jscorebus-webkit.c
1 /**
2  * Browser D-Bus Bridge, JavaScriptCore version
3  *
4  * Copyright © 2008 Movial Creative Technologies Inc
5  *  Contact: Movial Creative Technologies Inc, <info@movial.com>
6  *  Authors: Kalle Vahlman, <kalle.vahlman@movial.com>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2.1 of the License, or (at your option) any later
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public
19  * License along with this library; if not, see <http://www.gnu.org/licenses/>.
20  *
21  */
22  
23 /*
24  * To build, execute this (on one line):
25  *
26  *   gcc -o jscorebus-webkit jscorebus-webkit.c \
27  *       $(pkg-config --cflags --libs webkit-1.0 dbus-glib-1 jscorebus)
28  *
29  */
30  
31 #include <dbus/dbus.h>
32 #include <dbus/dbus-glib-lowlevel.h>
33 #include <webkit/webkit.h>
34 #include <JavaScriptCore/JavaScript.h>
35 #include <jscorebus/jscorebus.h>
36
37 GtkWidget *view;
38
39 static
40 void _window_object_cleared (WebKitWebView* web_view,
41                              WebKitWebFrame* frame,
42                              JSGlobalContextRef context,
43                              JSObjectRef windowObject,
44                              gpointer user_data)
45 {
46   jscorebus_export(context);
47 }
48
49 static gboolean
50 _window_delete_event(GtkWidget *widget, GdkEvent  *event, gpointer user_data)
51 {
52   gtk_widget_destroy(widget);
53   gtk_main_quit();
54   return TRUE;
55 }
56
57 int main(int argc, char *argv[])
58 {
59   GtkWidget *window;
60   GtkWidget *swin;
61   DBusConnection *session_connection;
62   DBusConnection *system_connection;
63
64   g_thread_init(NULL);
65   gtk_init(&argc, &argv);
66
67   if (argc < 2)
68   {
69     g_print("Usage: %s <url>\n", argv[0]);
70     return(1);
71   }
72   
73   session_connection = dbus_bus_get(DBUS_BUS_SESSION, NULL);
74   system_connection = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
75
76   dbus_connection_setup_with_g_main(session_connection, NULL);
77   dbus_connection_setup_with_g_main(system_connection, NULL);
78   
79   jscorebus_init(session_connection, system_connection);
80   
81   window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
82   swin = gtk_scrolled_window_new(NULL, NULL);
83   view = webkit_web_view_new();
84   
85   gtk_container_add(GTK_CONTAINER(swin), view);
86   gtk_container_add(GTK_CONTAINER(window), swin);
87   
88   g_signal_connect(window, "delete-event",
89                    G_CALLBACK(_window_delete_event), NULL);
90
91   /***
92    * Connect to the window-object-cleared signal. This is the moment when we
93    * need to install the D-Bus bindings into the DOM.
94    */
95   g_signal_connect(view, "window-object-cleared",
96                    G_CALLBACK(_window_object_cleared), session_connection);
97
98   if (g_str_has_prefix("http://", argv[1])
99    || g_str_has_prefix("https://", argv[1])
100    || g_str_has_prefix("file://", argv[1]))
101   {
102     webkit_web_view_open(WEBKIT_WEB_VIEW(view), argv[1]);
103   } else {
104     gchar *url = NULL;
105     if (g_path_is_absolute(argv[1])) {
106       url = g_strjoin("", "file://", argv[1], NULL);
107     } else {
108       gchar *pwd = g_get_current_dir();
109       url = g_strjoin("/", "file://", pwd, argv[1], NULL);
110       g_free(pwd);
111     }
112     webkit_web_view_open(WEBKIT_WEB_VIEW(view), url);
113     g_free(url);
114   }
115
116   gtk_widget_set_size_request(window,
117                               640,
118                               480);
119   gtk_widget_show_all(window);
120   gtk_main();
121
122   return (0);
123 }
124