gtk-webkit-ruby 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.md ADDED
@@ -0,0 +1,33 @@
1
+ Gtk Webkit Ruby
2
+ ===============
3
+
4
+ Requires
5
+ --------
6
+ * rubber-generate >= 0.0.12
7
+ * ruby-gnome2 (including development files)
8
+ * webkit (including development files)
9
+
10
+ Description
11
+ -----------
12
+
13
+ Gtk Webkit bindings for ruby. Partial coverage sufficient to embed a webview in a ruby-gnome2 application.
14
+
15
+ Also initial/experimental support for allowing ruby code to be called by javascript & executing javascript from ruby.
16
+
17
+ e.g
18
+
19
+ require 'gtk2'
20
+ require 'webkit'
21
+ require 'digest/md5'
22
+
23
+ v = WebKit::WebView.new
24
+ v.main_frame.setup_ruby
25
+
26
+ v.main_frame.add_js_api('md5') do |what|
27
+ Digest::MD5.hexdigest(what)
28
+ end
29
+
30
+ puts v.main_frame.exec_js("ruby_eval('RUBY_DESCRIPTION')")
31
+ puts v.main_frame.exec_js("md5('foo')")
32
+ puts Digest::MD5.hexdigest('foo')
33
+
data/Rakefile ADDED
@@ -0,0 +1,58 @@
1
+ require 'rubygems'
2
+ gem 'rake-compiler'
3
+ require 'rake/extensiontask'
4
+ BASE_DIR = Dir.pwd
5
+ require 'rubygems/package_task'
6
+ require 'rake/testtask'
7
+
8
+ exts = []
9
+
10
+ namespace :prepare do
11
+ FileList["ext/*/*.cr"].each do |cr|
12
+ dir = File.dirname(cr)
13
+ name = File.basename(dir)
14
+ desc "Generate source for #{name}"
15
+ task(name.intern) do
16
+ sh 'rubber-generate', '--build-dir', dir, cr
17
+ end
18
+ end
19
+ end
20
+
21
+ spec = Gem::Specification.new do |s|
22
+ s.name = "gtk-webkit-ruby"
23
+ s.author = "Geoff Youngs"
24
+ s.email = "git@intersect-uk.co.uk"
25
+ s.version = "0.0.3"
26
+ s.homepage = "http://github.com/geoffyoungs/gtk-webkit-ruby"
27
+ s.summary = "Webkit bindings using rubber-generate"
28
+ s.add_dependency("rubber-generate", ">= 0.0.12")
29
+ s.platform = Gem::Platform::RUBY
30
+ s.extensions = FileList["ext/*/extconf.rb"]
31
+ s.files = FileList['ext/*/*.{c,h,cr,rd}'] + ['Rakefile', 'README.md']
32
+ s.description = <<-EOF
33
+ Gtk Webkit bindings for ruby. Partial coverage sufficient to embed a webview in a Ruby-GNOME2 application.
34
+
35
+ Also initial/experimental support for allowing ruby code to be called by javascript & executing javascript
36
+ from ruby.
37
+
38
+ e.g
39
+ require 'gtk2'
40
+ require 'webkit'
41
+
42
+ v = WebKit::WebView.new
43
+ v.main_frame.setup_ruby
44
+ puts v.main_frame.exec_js("ruby_eval('RUBY_DESCRIPTION')")
45
+ puts v.main_frame.exec_js("document.root.innerHTML")
46
+ EOF
47
+ end
48
+ Gem::PackageTask.new(spec) do |pkg|
49
+ pkg.need_tar = true
50
+ end
51
+ Rake::ExtensionTask.new("webkit", spec)
52
+
53
+ Rake::TestTask.new do |t|
54
+ t.test_files = FileList['test/*_test.rb']
55
+ end
56
+
57
+ task :default, :compile
58
+
@@ -0,0 +1,74 @@
1
+ require 'mkmf'
2
+ require 'mkmf-gnome2'
3
+ PKGConfig.have_package("gtk+-2.0") or exit(-1)
4
+ PKGConfig.have_package("webkit-1.0") or exit(-1)
5
+ have_header("webkit/webkit.h") or exit(-1)
6
+ have_header("JavaScriptCore/JavaScript.h") or exit(-1)
7
+
8
+ STDOUT.print("checking for new allocation framework... ") # for ruby-1.7
9
+ if Object.respond_to? :allocate
10
+ STDOUT.print "yes
11
+ "
12
+ $defs << "-DHAVE_OBJECT_ALLOCATE"
13
+ else
14
+ STDOUT.print "no
15
+ "
16
+ end
17
+
18
+ top = File.expand_path(File.dirname(__FILE__) + '/..') # XXX
19
+ $CFLAGS += " " + ['glib/src'].map{|d|
20
+ "-I" + File.join(top, d)
21
+ }.join(" ")
22
+
23
+ have_func("rb_define_alloc_func") # for ruby-1.8
24
+
25
+ #set_output_lib('libruby-webkit.a')
26
+ if /cygwin|mingw/ =~ RUBY_PLATFORM
27
+ top = "../.."
28
+ [
29
+ ["glib/src", "ruby-glib2"],
30
+ ].each{|d,l|
31
+ $LDFLAGS << sprintf(" -L%s/%s", top, d)
32
+ $libs << sprintf(" -l%s", l)
33
+ }
34
+ end
35
+ begin
36
+ srcdir = File.expand_path(File.dirname($0))
37
+
38
+ begin
39
+
40
+ obj_ext = "."+$OBJEXT
41
+
42
+ $libs = $libs.split(/ /).uniq.join(' ')
43
+ $source_files = Dir.glob(sprintf("%s/*.c", srcdir)).map{|fname|
44
+ fname[0, srcdir.length+1] = ''
45
+ fname
46
+ }
47
+ $objs = $source_files.collect do |item|
48
+ item.gsub(/.c$/, obj_ext)
49
+ end
50
+
51
+ #
52
+ # create Makefile
53
+ #
54
+ $defs << "-DRUBY_WEBKIT_COMPILATION"
55
+ # $CFLAGS << $defs.join(' ')
56
+ create_makefile("webkit", srcdir)
57
+ raise Interrupt if not FileTest.exist? "Makefile"
58
+
59
+ File.open("Makefile", "a") do |mfile|
60
+ $source_files.each do |e|
61
+ mfile.print sprintf("%s: %s
62
+ ", e.gsub(/.c$/, obj_ext), e)
63
+ end
64
+ end
65
+ ensure
66
+ #Dir.chdir ".."
67
+ end
68
+
69
+ #create_top_makefile()
70
+ rescue Interrupt
71
+ print " [error] " + $!.to_s + "
72
+ "
73
+ end
74
+
@@ -0,0 +1,271 @@
1
+ #include <alloca.h>
2
+
3
+ #define STRINGIZE(s) #s
4
+
5
+ #define JS_fn(f) _JS_fn(ctx, STRINGIZE(f), f)
6
+
7
+ JSObjectRef _JS_fn(JSContextRef ctx, const char *name, JSObjectCallAsFunctionCallback f)
8
+ {
9
+ JSStringRef nameStr = JSStringCreateWithUTF8CString(name);
10
+ JSObjectRef value = JSObjectMakeFunctionWithCallback(ctx, nameStr, f);
11
+ JSStringRelease(nameStr);
12
+ return value;
13
+ }
14
+
15
+ static inline bool
16
+ js_obj_set_value(JSContextRef ctx, JSObjectRef object, char *name, JSObjectRef value)
17
+ {
18
+ JSValueRef *_exception = NULL;
19
+ JSStringRef nameStr = JSStringCreateWithUTF8CString(name);
20
+
21
+ JSObjectSetProperty(ctx, object, nameStr, value, kJSPropertyAttributeNone, _exception);
22
+
23
+ JSStringRelease(nameStr);
24
+
25
+ if (*_exception) { return false; }
26
+
27
+ return true;
28
+ }
29
+
30
+ static JSValueRef
31
+ convert_string_to_jsval(JSContextRef ctx, char *str) {
32
+ JSStringRef js_s_ref;
33
+ JSValueRef js_val_ref;
34
+
35
+ js_s_ref = JSStringCreateWithUTF8CString(str);
36
+ js_val_ref = JSValueMakeString(ctx, js_s_ref);
37
+ JSStringRelease(js_s_ref);
38
+
39
+ return js_val_ref;
40
+ }
41
+
42
+ static char *
43
+ convert_javascript_to_utf8_string(JSContextRef ctx, JSValueRef val, size_t* out_len)
44
+ {
45
+ JSStringRef str = JSValueToStringCopy(ctx, val, NULL);
46
+ size_t max = 0, len;
47
+ char *buf;
48
+
49
+ max = JSStringGetMaximumUTF8CStringSize(str);
50
+ buf = malloc(max);
51
+ len = JSStringGetUTF8CString(str, buf, max);
52
+
53
+ if (out_len) {
54
+ *out_len = len;
55
+ }
56
+
57
+ JSStringRelease(str);
58
+
59
+ return buf;
60
+ }
61
+
62
+ static inline VALUE
63
+ convert_javascript_string_to_ruby(JSContextRef ctx, JSValueRef val)
64
+ {
65
+ VALUE output = Qnil;
66
+ JSStringRef str;
67
+ size_t len = 0, max = 0;
68
+ char *buf;
69
+
70
+ str = JSValueToStringCopy(ctx, val, NULL);
71
+ max = JSStringGetMaximumUTF8CStringSize(str);
72
+ buf = malloc(max);
73
+ len = JSStringGetUTF8CString(str, buf, max);
74
+
75
+ output = rb_str_new(buf, len-1); // Ignore terminator
76
+
77
+ free(buf);
78
+ JSStringRelease(str);
79
+
80
+ return output;
81
+ }
82
+
83
+ static VALUE
84
+ convert_javascript_to_ruby(JSContextRef ctx, JSValueRef val)
85
+ {
86
+ VALUE output = Qnil;
87
+ JSValueRef *_exception = NULL;
88
+
89
+ switch (JSValueGetType(ctx, val)) {
90
+ case kJSTypeUndefined:
91
+ case kJSTypeNull:
92
+ output = Qnil;
93
+ break;
94
+ case kJSTypeBoolean:
95
+ output = JSValueToBoolean(ctx, val) ? Qtrue : Qfalse;
96
+ break;
97
+ case kJSTypeNumber:
98
+ output = rb_float_new(JSValueToNumber(ctx, val, _exception));
99
+ break;
100
+ case kJSTypeString:
101
+ output = convert_javascript_string_to_ruby(ctx, val);
102
+ break;
103
+ case kJSTypeObject:
104
+ output = convert_javascript_string_to_ruby(ctx, val);
105
+ break;
106
+ }
107
+
108
+ return output;
109
+ }
110
+
111
+
112
+ static JSValueRef
113
+ convert_ruby_to_javascript(JSContextRef ctx, VALUE value)
114
+ {
115
+ JSStringRef str;
116
+ JSValueRef jsval;
117
+
118
+ switch (TYPE(value)) {
119
+ case T_FIXNUM:
120
+ return JSValueMakeNumber(ctx, (double) FIX2LONG(value));
121
+ case T_FLOAT:
122
+ return JSValueMakeNumber(ctx, (double) NUM2DBL(value));
123
+ case T_BIGNUM:
124
+ return JSValueMakeNumber(ctx, (double) rb_big2long(value));
125
+ case T_TRUE:
126
+ case T_FALSE:
127
+ return JSValueMakeBoolean(ctx, RTEST(value));
128
+ case T_UNDEF:
129
+ return JSValueMakeUndefined(ctx);
130
+ case T_NIL:
131
+ return JSValueMakeNull(ctx);
132
+ default:
133
+ if (TYPE(value) != T_STRING) {
134
+ value = rb_funcall(value, rb_intern("to_s"), 0);
135
+ }
136
+ str = JSStringCreateWithUTF8CString(RSTRING_PTR(value));
137
+ jsval = JSValueMakeString(ctx, str);
138
+ JSStringRelease(str);
139
+ return jsval;
140
+ }
141
+ }
142
+
143
+ static JSValueRef
144
+ js_call_ruby_eval (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
145
+ size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
146
+ {
147
+ JSValueRef value = NULL;
148
+
149
+ if (argumentCount == 1) {
150
+ char *script;
151
+ VALUE val;
152
+
153
+ script = convert_javascript_to_utf8_string(ctx, arguments[0], NULL);
154
+ val = rb_eval_string(script);
155
+
156
+ value = convert_ruby_to_javascript(ctx, val);
157
+
158
+ free(script);
159
+ } else {
160
+ *exception = convert_string_to_jsval(ctx, "Wrong number of arguments");
161
+ }
162
+
163
+ return value;
164
+ }
165
+
166
+ static GHashTable *ruby_fns = NULL;
167
+
168
+ static JSValueRef
169
+ js_ruby_fn(JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject,
170
+ size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
171
+ {
172
+ size_t i;
173
+ VALUE *args = ALLOC_N(VALUE, argumentCount);
174
+ VALUE ruby_fn = (VALUE) JSObjectGetPrivate(function);
175
+ JSValueRef retval;
176
+
177
+ if ((!ruby_fn) && ruby_fns) {
178
+ ruby_fn = (VALUE)g_hash_table_lookup(ruby_fns, (gpointer)function);
179
+ }
180
+
181
+ //printf("Hmm. Found: %p\n", function);
182
+
183
+ for (i = 0; i < argumentCount; i++) {
184
+ args[i] = convert_javascript_to_ruby(ctx, arguments[i]);
185
+ }
186
+
187
+ retval = convert_ruby_to_javascript(ctx,
188
+ rb_funcall2(ruby_fn, rb_intern("call"), argumentCount, args));
189
+
190
+ xfree(args);
191
+
192
+ return retval;
193
+ }
194
+
195
+ /**
196
+ * Javascript functions called directly from binding
197
+ **/
198
+ static void *
199
+ javascript_add_ruby_fn(JSGlobalContextRef ctx, char *name, VALUE ruby_fn)
200
+ {
201
+ JSObjectRef fn = NULL;
202
+
203
+ if (!ruby_fns) {
204
+ ruby_fns = g_hash_table_new(NULL, NULL);
205
+ }
206
+
207
+ JSObjectRef global = JSContextGetGlobalObject(ctx);
208
+
209
+ fn = JS_fn(js_ruby_fn);
210
+
211
+ if (!JSObjectSetPrivate(fn, (void*)ruby_fn)) {
212
+ gpointer old_value = g_hash_table_lookup(ruby_fns, (gpointer)fn);
213
+ if (old_value != NULL)
214
+ RUBYFUNC_DEL((VALUE)old_value);
215
+ RUBYFUNC_ADD(ruby_fn);
216
+ g_hash_table_insert(ruby_fns, (gpointer)fn, (gpointer)ruby_fn);
217
+ }
218
+
219
+ js_obj_set_value(ctx, global, name, fn); // Check failure?
220
+
221
+ return NULL;
222
+ }
223
+
224
+ static void *
225
+ javascript_add_ruby_eval(JSGlobalContextRef ctx)
226
+ {
227
+ JSObjectRef global = JSContextGetGlobalObject(ctx);
228
+
229
+ js_obj_set_value(ctx, global, "ruby_eval", JS_fn(js_call_ruby_eval));
230
+
231
+ return NULL;
232
+ }
233
+
234
+ static VALUE
235
+ javascript_exec(JSGlobalContextRef ctx, char *script)
236
+ {
237
+ VALUE output = Qnil;
238
+
239
+ JSStringRef js_script = JSStringCreateWithUTF8CString(script);
240
+ JSStringRef url = JSStringCreateWithUTF8CString("x-ruby://string");
241
+
242
+ JSValueRef err = JSValueMakeUndefined(ctx);
243
+ JSValueRef retval = NULL;
244
+
245
+
246
+ retval = JSEvaluateScript(ctx, js_script, NULL, url, 0, &err);
247
+
248
+ JSStringRelease(url);
249
+ JSStringRelease(js_script);
250
+
251
+ /* Convert output to ruby */
252
+ if (retval) {
253
+ output = convert_javascript_to_ruby(ctx, retval);
254
+ } else {
255
+ JSStringRef str = JSValueToStringCopy(ctx, err, NULL);
256
+ size_t len = 0, max = 0;
257
+ char *buf;
258
+
259
+ max = JSStringGetMaximumUTF8CStringSize(str);
260
+ buf = alloca(max);
261
+ len = JSStringGetUTF8CString(str, buf, max);
262
+
263
+ JSStringRelease(str);
264
+ rb_raise(cJavascriptError, buf);
265
+ //free(buf); // Will this ever be called?
266
+ }
267
+
268
+ return output;
269
+ }
270
+
271
+
@@ -0,0 +1,630 @@
1
+ /* Includes */
2
+ #include <ruby.h>
3
+ #include <stdlib.h>
4
+ #include <stdio.h>
5
+ #include <string.h>
6
+ #include "webkit/webkit.h"
7
+ #include "JavaScriptCore/JavaScript.h"
8
+
9
+ /* Setup types */
10
+ /* Try not to clash with other definitions of bool... */
11
+ typedef int rubber_bool;
12
+ #define bool rubber_bool
13
+
14
+ /* Prototypes */
15
+ #include "rbglib.h"
16
+
17
+ #include "rbgtk.h"
18
+
19
+ #if defined(G_PLATFORM_WIN32) && !defined(RUBY_GTK2_STATIC_COMPILATION)
20
+ # ifdef RUBY_GTK2_COMPILATION
21
+ # define RUBY_GTK2_VAR __declspec(dllexport)
22
+ # else
23
+ # define RUBY_GTK2_VAR extern __declspec(dllimport)
24
+ # endif
25
+ #else
26
+ # define RUBY_GTK2_VAR extern
27
+ #endif
28
+
29
+ RUBY_GTK2_VAR VALUE mGtk;
30
+ RUBY_GTK2_VAR VALUE mGdk;
31
+
32
+ #define RBGTK_INITIALIZE(obj,gtkobj) (rbgtk_initialize_gtkobject(obj, GTK_OBJECT(gtkobj)))
33
+ static VALUE mWebKit;
34
+ static VALUE
35
+ WebKit_CLASS_set_web_database_path(VALUE self, VALUE __v_path);
36
+ static VALUE
37
+ WebKit_CLASS_remove_all_web_databases(VALUE self);
38
+ static VALUE
39
+ WebKit_CLASS_set_default_web_database_quota(VALUE self, VALUE __v_quota);
40
+ static VALUE cJavascriptError;
41
+ static VALUE cWebSettings;
42
+ static VALUE
43
+ WebSettings_initialize(VALUE self);
44
+ static VALUE cWebFrame;
45
+ static VALUE
46
+ WebFrame_exec_js(VALUE self, VALUE __v_js);
47
+ static VALUE
48
+ WebFrame_add_ruby_eval(VALUE self);
49
+ static VALUE
50
+ WebFrame_add_js_api(VALUE self, VALUE __v_name);
51
+ static VALUE
52
+ WebFrame_load_string(VALUE self, VALUE __v_content, VALUE __v_mime_type, VALUE __v_encoding, VALUE __v_base_uri);
53
+ static VALUE cWebView;
54
+ static VALUE
55
+ WebView_initialize(VALUE self);
56
+ static VALUE
57
+ WebView_open(VALUE self, VALUE __v_uri);
58
+ static VALUE
59
+ WebView_execute_script(VALUE self, VALUE __v_script);
60
+ static VALUE
61
+ WebView_set_settings(VALUE self, VALUE __v_settings);
62
+ static VALUE
63
+ WebView_load_string(VALUE self, VALUE __v_content, VALUE __v_mime_type, VALUE __v_encoding, VALUE __v_base_uri);
64
+ static VALUE
65
+ WebView_load_uri(VALUE self, VALUE __v_uri);
66
+ static VALUE
67
+ WebView_main_frame(VALUE self);
68
+ static VALUE
69
+ WebView_focused_frame(VALUE self);
70
+ static VALUE
71
+ WebView_progress(VALUE self);
72
+ static VALUE
73
+ WebView_title(VALUE self);
74
+ static VALUE
75
+ WebView_uri(VALUE self);
76
+ static VALUE
77
+ WebView_reload(VALUE self);
78
+ static VALUE
79
+ WebView_reload_bypass_cache(VALUE self);
80
+ static VALUE
81
+ WebView_set_custom_encoding(VALUE self, VALUE __v_encoding);
82
+ static VALUE
83
+ WebView_stop_loading(VALUE self);
84
+ static VALUE cWebResource;
85
+ static VALUE
86
+ WebResource_encoding(VALUE self);
87
+ static VALUE
88
+ WebResource_frame_name(VALUE self);
89
+ static VALUE
90
+ WebResource_mime_type(VALUE self);
91
+ static VALUE
92
+ WebResource_uri(VALUE self);
93
+ static VALUE
94
+ WebResource_data(VALUE self);
95
+ static VALUE
96
+ WebResource_data_equals(VALUE self, VALUE data);
97
+ static VALUE cWebNetworkRequest;
98
+ static VALUE
99
+ WebNetworkRequest_uri(VALUE self);
100
+ static VALUE
101
+ WebNetworkRequest_uri_equals(VALUE self, VALUE __v_uri);
102
+ static VALUE cWebNetworkResponse;
103
+ static VALUE
104
+ WebNetworkResponse_uri(VALUE self);
105
+ static VALUE
106
+ WebNetworkResponse_uri_equals(VALUE self, VALUE __v_uri);
107
+ static VALUE _gcpool_RubyFunc = Qnil;
108
+ static void __gcpool_RubyFunc_add(VALUE val);
109
+ static void __gcpool_RubyFunc_del(VALUE val);
110
+ #define RUBYFUNC_ADD(val) __gcpool_RubyFunc_add(val)
111
+ #define RUBYFUNC_DEL(val) __gcpool_RubyFunc_del(val)
112
+
113
+ /* Inline C code */
114
+
115
+ #include <intern.h>
116
+
117
+ #include "javascript.h"
118
+
119
+ static inline VALUE strOrNil(const char *str) {
120
+ if (str) {
121
+ return rb_str_new2(str);
122
+ } else {
123
+ return Qnil;
124
+ }
125
+ }
126
+
127
+
128
+ /* Code */
129
+ static VALUE
130
+ WebKit_CLASS_set_web_database_path(VALUE self, VALUE __v_path)
131
+ {
132
+ char * path; char * __orig_path;
133
+ __orig_path = path = ( NIL_P(__v_path) ? NULL : StringValuePtr(__v_path) );
134
+
135
+ #line 31 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
136
+ webkit_set_web_database_directory_path(path);
137
+
138
+ return self;
139
+ }
140
+
141
+ static VALUE
142
+ WebKit_CLASS_remove_all_web_databases(VALUE self)
143
+ {
144
+
145
+ #line 34 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
146
+ webkit_remove_all_web_databases();
147
+
148
+ return Qnil;
149
+ }
150
+
151
+ static VALUE
152
+ WebKit_CLASS_set_default_web_database_quota(VALUE self, VALUE __v_quota)
153
+ {
154
+ guint64 quota; guint64 __orig_quota;
155
+ __orig_quota = quota = rb_num2ull(__v_quota);
156
+
157
+ #line 37 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
158
+ webkit_set_default_web_database_quota(quota);
159
+
160
+ return self;
161
+ }
162
+
163
+ static VALUE
164
+ WebSettings_initialize(VALUE self)
165
+ {
166
+
167
+ #line 43 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
168
+ G_INITIALIZE(self, webkit_web_settings_new());
169
+
170
+ return Qnil;
171
+ }
172
+
173
+ static VALUE
174
+ WebFrame_exec_js(VALUE self, VALUE __v_js)
175
+ {
176
+ VALUE __p_retval = Qnil;
177
+ char * js; char * __orig_js;
178
+ WebKitWebFrame *_self = ((WebKitWebFrame*)RVAL2GOBJ(self));
179
+ __orig_js = js = ( NIL_P(__v_js) ? NULL : StringValuePtr(__v_js) );
180
+
181
+ #line 50 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
182
+ do { __p_retval = javascript_exec(webkit_web_frame_get_global_context(_self), js); goto out; } while(0);
183
+ out:
184
+ return __p_retval;
185
+ }
186
+
187
+ static VALUE
188
+ WebFrame_add_ruby_eval(VALUE self)
189
+ {
190
+ WebKitWebFrame *_self = ((WebKitWebFrame*)RVAL2GOBJ(self));
191
+
192
+ #line 53 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
193
+ javascript_add_ruby_eval(webkit_web_frame_get_global_context(_self));
194
+
195
+ return Qnil;
196
+ }
197
+
198
+ static VALUE
199
+ WebFrame_add_js_api(VALUE self, VALUE __v_name)
200
+ {
201
+ char * name; char * __orig_name;
202
+ WebKitWebFrame *_self = ((WebKitWebFrame*)RVAL2GOBJ(self));
203
+ __orig_name = name = ( NIL_P(__v_name) ? NULL : StringValuePtr(__v_name) );
204
+ VALUE block = rb_block_proc();
205
+
206
+ #line 56 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
207
+ javascript_add_ruby_fn(webkit_web_frame_get_global_context(_self), name, block);
208
+
209
+ return Qnil;
210
+ }
211
+
212
+ static VALUE
213
+ WebFrame_load_string(VALUE self, VALUE __v_content, VALUE __v_mime_type, VALUE __v_encoding, VALUE __v_base_uri)
214
+ {
215
+ char * content; char * __orig_content;
216
+ char * mime_type; char * __orig_mime_type;
217
+ char * encoding; char * __orig_encoding;
218
+ char * base_uri; char * __orig_base_uri;
219
+ WebKitWebFrame *_self = ((WebKitWebFrame*)RVAL2GOBJ(self));
220
+ __orig_content = content = ( NIL_P(__v_content) ? NULL : StringValuePtr(__v_content) );
221
+ __orig_mime_type = mime_type = ( NIL_P(__v_mime_type) ? NULL : StringValuePtr(__v_mime_type) );
222
+ __orig_encoding = encoding = ( NIL_P(__v_encoding) ? NULL : StringValuePtr(__v_encoding) );
223
+ __orig_base_uri = base_uri = ( NIL_P(__v_base_uri) ? NULL : StringValuePtr(__v_base_uri) );
224
+
225
+ #line 59 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
226
+ webkit_web_frame_load_string(_self, content, mime_type, encoding, base_uri);
227
+
228
+ return Qnil;
229
+ }
230
+
231
+ static VALUE
232
+ WebView_initialize(VALUE self)
233
+ {
234
+
235
+ #line 65 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
236
+ RBGTK_INITIALIZE(self, webkit_web_view_new());
237
+
238
+ return Qnil;
239
+ }
240
+
241
+ static VALUE
242
+ WebView_open(VALUE self, VALUE __v_uri)
243
+ {
244
+ char * uri; char * __orig_uri;
245
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
246
+ __orig_uri = uri = ( NIL_P(__v_uri) ? NULL : StringValuePtr(__v_uri) );
247
+
248
+ #line 68 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
249
+ webkit_web_view_open(_self, uri);
250
+
251
+ return Qnil;
252
+ }
253
+
254
+ static VALUE
255
+ WebView_execute_script(VALUE self, VALUE __v_script)
256
+ {
257
+ char * script; char * __orig_script;
258
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
259
+ __orig_script = script = ( NIL_P(__v_script) ? NULL : StringValuePtr(__v_script) );
260
+
261
+ #line 71 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
262
+ webkit_web_view_execute_script(_self, script);
263
+
264
+ return Qnil;
265
+ }
266
+
267
+ static VALUE
268
+ WebView_set_settings(VALUE self, VALUE __v_settings)
269
+ {
270
+ WebKitWebSettings * settings; WebKitWebSettings * __orig_settings;
271
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
272
+ __orig_settings = settings = RVAL2GOBJ(__v_settings);
273
+
274
+ #line 74 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
275
+ webkit_web_view_set_settings(_self, settings);
276
+
277
+ return self;
278
+ }
279
+
280
+ static VALUE
281
+ WebView_load_string(VALUE self, VALUE __v_content, VALUE __v_mime_type, VALUE __v_encoding, VALUE __v_base_uri)
282
+ {
283
+ char * content; char * __orig_content;
284
+ char * mime_type; char * __orig_mime_type;
285
+ char * encoding; char * __orig_encoding;
286
+ char * base_uri; char * __orig_base_uri;
287
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
288
+ __orig_content = content = ( NIL_P(__v_content) ? NULL : StringValuePtr(__v_content) );
289
+ __orig_mime_type = mime_type = ( NIL_P(__v_mime_type) ? NULL : StringValuePtr(__v_mime_type) );
290
+ __orig_encoding = encoding = ( NIL_P(__v_encoding) ? NULL : StringValuePtr(__v_encoding) );
291
+ __orig_base_uri = base_uri = ( NIL_P(__v_base_uri) ? NULL : StringValuePtr(__v_base_uri) );
292
+
293
+ #line 77 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
294
+ webkit_web_view_load_string(_self, content, mime_type, encoding, base_uri);
295
+
296
+ return Qnil;
297
+ }
298
+
299
+ static VALUE
300
+ WebView_load_uri(VALUE self, VALUE __v_uri)
301
+ {
302
+ char * uri; char * __orig_uri;
303
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
304
+ __orig_uri = uri = ( NIL_P(__v_uri) ? NULL : StringValuePtr(__v_uri) );
305
+
306
+ #line 80 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
307
+ webkit_web_view_load_uri(_self, uri);
308
+
309
+ return Qnil;
310
+ }
311
+
312
+ static VALUE
313
+ WebView_main_frame(VALUE self)
314
+ {
315
+ VALUE __p_retval = Qnil;
316
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
317
+
318
+ #line 83 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
319
+ do { __p_retval = GOBJ2RVAL(webkit_web_view_get_main_frame(_self)); goto out; } while(0);
320
+ out:
321
+ return __p_retval;
322
+ }
323
+
324
+ static VALUE
325
+ WebView_focused_frame(VALUE self)
326
+ {
327
+ VALUE __p_retval = Qnil;
328
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
329
+
330
+ #line 86 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
331
+ do { __p_retval = GOBJ2RVAL(webkit_web_view_get_focused_frame(_self)); goto out; } while(0);
332
+ out:
333
+ return __p_retval;
334
+ }
335
+
336
+ static VALUE
337
+ WebView_progress(VALUE self)
338
+ {
339
+ VALUE __p_retval = Qnil;
340
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
341
+
342
+ #line 89 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
343
+ do { __p_retval = rb_float_new(webkit_web_view_get_progress(_self)); goto out; } while(0);
344
+ out:
345
+ return __p_retval;
346
+ }
347
+
348
+ static VALUE
349
+ WebView_title(VALUE self)
350
+ {
351
+ VALUE __p_retval = Qnil;
352
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
353
+
354
+ #line 92 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
355
+ do { __p_retval = rb_str_new2(webkit_web_view_get_title(_self)); goto out; } while(0);
356
+ out:
357
+ return __p_retval;
358
+ }
359
+
360
+ static VALUE
361
+ WebView_uri(VALUE self)
362
+ {
363
+ VALUE __p_retval = Qnil;
364
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
365
+
366
+ #line 95 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
367
+ do { __p_retval = rb_str_new2(webkit_web_view_get_uri(_self)); goto out; } while(0);
368
+ out:
369
+ return __p_retval;
370
+ }
371
+
372
+ static VALUE
373
+ WebView_reload(VALUE self)
374
+ {
375
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
376
+
377
+ #line 98 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
378
+ webkit_web_view_reload(_self);
379
+
380
+ return Qnil;
381
+ }
382
+
383
+ static VALUE
384
+ WebView_reload_bypass_cache(VALUE self)
385
+ {
386
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
387
+
388
+ #line 101 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
389
+ webkit_web_view_reload_bypass_cache(_self);
390
+
391
+ return Qnil;
392
+ }
393
+
394
+ static VALUE
395
+ WebView_set_custom_encoding(VALUE self, VALUE __v_encoding)
396
+ {
397
+ char * encoding; char * __orig_encoding;
398
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
399
+ __orig_encoding = encoding = ( NIL_P(__v_encoding) ? NULL : StringValuePtr(__v_encoding) );
400
+
401
+ #line 104 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
402
+ webkit_web_view_set_custom_encoding(_self, encoding);
403
+
404
+ return self;
405
+ }
406
+
407
+ static VALUE
408
+ WebView_stop_loading(VALUE self)
409
+ {
410
+ WebKitWebView *_self = ((WebKitWebView*)RVAL2GOBJ(self));
411
+
412
+ #line 107 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
413
+ webkit_web_view_stop_loading(_self);
414
+
415
+ return Qnil;
416
+ }
417
+
418
+ static VALUE
419
+ WebResource_encoding(VALUE self)
420
+ {
421
+ VALUE __p_retval = Qnil;
422
+ WebKitWebResource *_self = ((WebKitWebResource*)RVAL2GOBJ(self));
423
+
424
+ #line 114 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
425
+ do { __p_retval = strOrNil(webkit_web_resource_get_encoding(_self)); goto out; } while(0);
426
+ out:
427
+ return __p_retval;
428
+ }
429
+
430
+ static VALUE
431
+ WebResource_frame_name(VALUE self)
432
+ {
433
+ VALUE __p_retval = Qnil;
434
+ WebKitWebResource *_self = ((WebKitWebResource*)RVAL2GOBJ(self));
435
+
436
+ #line 117 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
437
+ do { __p_retval = strOrNil(webkit_web_resource_get_frame_name(_self)); goto out; } while(0);
438
+ out:
439
+ return __p_retval;
440
+ }
441
+
442
+ static VALUE
443
+ WebResource_mime_type(VALUE self)
444
+ {
445
+ VALUE __p_retval = Qnil;
446
+ WebKitWebResource *_self = ((WebKitWebResource*)RVAL2GOBJ(self));
447
+
448
+ #line 120 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
449
+ do { __p_retval = strOrNil(webkit_web_resource_get_mime_type(_self)); goto out; } while(0);
450
+ out:
451
+ return __p_retval;
452
+ }
453
+
454
+ static VALUE
455
+ WebResource_uri(VALUE self)
456
+ {
457
+ VALUE __p_retval = Qnil;
458
+ WebKitWebResource *_self = ((WebKitWebResource*)RVAL2GOBJ(self));
459
+
460
+ #line 123 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
461
+ do { __p_retval = strOrNil(webkit_web_resource_get_mime_type(_self)); goto out; } while(0);
462
+ out:
463
+ return __p_retval;
464
+ }
465
+
466
+ static VALUE
467
+ WebResource_data(VALUE self)
468
+ {
469
+ VALUE __p_retval = Qnil;
470
+ WebKitWebResource *_self = ((WebKitWebResource*)RVAL2GOBJ(self));
471
+
472
+ #line 126 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
473
+
474
+ do {
475
+ GString * data =
476
+ webkit_web_resource_get_data(_self);
477
+ do { __p_retval = rb_str_new(data->str, data->len); goto out; } while(0);
478
+
479
+ } while(0);
480
+
481
+ out:
482
+ return __p_retval;
483
+ }
484
+
485
+ static VALUE
486
+ WebResource_data_equals(VALUE self, VALUE data)
487
+ {
488
+ VALUE __p_retval = data;
489
+ WebKitWebResource *_self = ((WebKitWebResource*)RVAL2GOBJ(self));
490
+ Check_Type(data, T_STRING);
491
+
492
+ #line 130 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
493
+
494
+ do {
495
+ GString * odata =
496
+ webkit_web_resource_get_data(_self);
497
+ g_free(odata->str);
498
+ odata->str = g_malloc(RSTRING_LEN(data)+1);
499
+ odata->len = odata->allocated_len = RSTRING_LEN(data);
500
+ memcpy(RSTRING_PTR(data), odata->str, RSTRING_LEN(data));
501
+ do { __p_retval = data; goto out; } while(0);
502
+
503
+ } while(0);
504
+
505
+ out:
506
+ return __p_retval;
507
+ }
508
+
509
+ static VALUE
510
+ WebNetworkRequest_uri(VALUE self)
511
+ {
512
+ VALUE __p_retval = Qnil;
513
+ WebKitNetworkRequest *_self = ((WebKitNetworkRequest*)RVAL2GOBJ(self));
514
+
515
+ #line 142 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
516
+ do { __p_retval = rb_str_new2(webkit_network_request_get_uri(_self)); goto out; } while(0);
517
+ out:
518
+ return __p_retval;
519
+ }
520
+
521
+ static VALUE
522
+ WebNetworkRequest_uri_equals(VALUE self, VALUE __v_uri)
523
+ {
524
+ char * uri; char * __orig_uri;
525
+ WebKitNetworkRequest *_self = ((WebKitNetworkRequest*)RVAL2GOBJ(self));
526
+ __orig_uri = uri = ( NIL_P(__v_uri) ? NULL : StringValuePtr(__v_uri) );
527
+
528
+ #line 145 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
529
+ webkit_network_request_set_uri(_self, uri);
530
+
531
+ return __v_uri;
532
+ }
533
+
534
+ static VALUE
535
+ WebNetworkResponse_uri(VALUE self)
536
+ {
537
+ VALUE __p_retval = Qnil;
538
+ WebKitNetworkResponse *_self = ((WebKitNetworkResponse*)RVAL2GOBJ(self));
539
+
540
+ #line 152 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
541
+ do { __p_retval = rb_str_new2(webkit_network_response_get_uri(_self)); goto out; } while(0);
542
+ out:
543
+ return __p_retval;
544
+ }
545
+
546
+ static VALUE
547
+ WebNetworkResponse_uri_equals(VALUE self, VALUE __v_uri)
548
+ {
549
+ char * uri; char * __orig_uri;
550
+ WebKitNetworkResponse *_self = ((WebKitNetworkResponse*)RVAL2GOBJ(self));
551
+ __orig_uri = uri = ( NIL_P(__v_uri) ? NULL : StringValuePtr(__v_uri) );
552
+
553
+ #line 155 "/home/geoff/Projects/gtk-webkit-ruby/ext/webkit/webkit.cr"
554
+ webkit_network_response_set_uri(_self, uri);
555
+
556
+ return __v_uri;
557
+ }
558
+
559
+ static void __gcpool_RubyFunc_add(VALUE val)
560
+ {
561
+ if (_gcpool_RubyFunc == Qnil)
562
+ {
563
+ _gcpool_RubyFunc = rb_ary_new3(1, val);
564
+ }
565
+ else
566
+ {
567
+ rb_ary_push(_gcpool_RubyFunc, val);
568
+ }
569
+ }
570
+
571
+ static void __gcpool_RubyFunc_del(VALUE val)
572
+ {
573
+ if (_gcpool_RubyFunc == Qnil)
574
+ {
575
+ rb_warn("Trying to remove object from empty GC queue RubyFunc");
576
+ return;
577
+ }
578
+ rb_ary_delete(_gcpool_RubyFunc, val);
579
+ // If nothing is referenced, don't keep an empty array in the pool...
580
+ if (RARRAY(_gcpool_RubyFunc)->len == 0)
581
+ _gcpool_RubyFunc = Qnil;
582
+ }
583
+
584
+ /* Init */
585
+ void
586
+ Init_webkit(void)
587
+ {
588
+ mWebKit = rb_define_module("WebKit");
589
+ rb_define_singleton_method(mWebKit, "set_web_database_path", WebKit_CLASS_set_web_database_path, 1);
590
+ rb_define_singleton_method(mWebKit, "remove_all_web_databases", WebKit_CLASS_remove_all_web_databases, 0);
591
+ rb_define_singleton_method(mWebKit, "set_default_web_database_quota", WebKit_CLASS_set_default_web_database_quota, 1);
592
+ cJavascriptError = rb_define_class_under(mWebKit, "JavascriptError", rb_eStandardError);
593
+ cWebSettings = G_DEF_CLASS(WEBKIT_TYPE_WEB_SETTINGS, "WebSettings", mWebKit);
594
+ rb_define_method(cWebSettings, "initialize", WebSettings_initialize, 0);
595
+ cWebFrame = G_DEF_CLASS(WEBKIT_TYPE_WEB_FRAME, "WebFrame", mWebKit);
596
+ rb_define_method(cWebFrame, "exec_js", WebFrame_exec_js, 1);
597
+ rb_define_method(cWebFrame, "add_ruby_eval", WebFrame_add_ruby_eval, 0);
598
+ rb_define_method(cWebFrame, "add_js_api", WebFrame_add_js_api, 1);
599
+ rb_define_method(cWebFrame, "load_string", WebFrame_load_string, 4);
600
+ cWebView = G_DEF_CLASS(WEBKIT_TYPE_WEB_VIEW, "WebView", mWebKit);
601
+ rb_define_method(cWebView, "initialize", WebView_initialize, 0);
602
+ rb_define_method(cWebView, "open", WebView_open, 1);
603
+ rb_define_method(cWebView, "execute_script", WebView_execute_script, 1);
604
+ rb_define_method(cWebView, "set_settings", WebView_set_settings, 1);
605
+ rb_define_method(cWebView, "load_string", WebView_load_string, 4);
606
+ rb_define_method(cWebView, "load_uri", WebView_load_uri, 1);
607
+ rb_define_method(cWebView, "main_frame", WebView_main_frame, 0);
608
+ rb_define_method(cWebView, "focused_frame", WebView_focused_frame, 0);
609
+ rb_define_method(cWebView, "progress", WebView_progress, 0);
610
+ rb_define_method(cWebView, "title", WebView_title, 0);
611
+ rb_define_method(cWebView, "uri", WebView_uri, 0);
612
+ rb_define_method(cWebView, "reload", WebView_reload, 0);
613
+ rb_define_method(cWebView, "reload_bypass_cache", WebView_reload_bypass_cache, 0);
614
+ rb_define_method(cWebView, "set_custom_encoding", WebView_set_custom_encoding, 1);
615
+ rb_define_method(cWebView, "stop_loading", WebView_stop_loading, 0);
616
+ cWebResource = G_DEF_CLASS(WEBKIT_TYPE_WEB_RESOURCE, "WebResource", mWebKit);
617
+ rb_define_method(cWebResource, "encoding", WebResource_encoding, 0);
618
+ rb_define_method(cWebResource, "frame_name", WebResource_frame_name, 0);
619
+ rb_define_method(cWebResource, "mime_type", WebResource_mime_type, 0);
620
+ rb_define_method(cWebResource, "uri", WebResource_uri, 0);
621
+ rb_define_method(cWebResource, "data", WebResource_data, 0);
622
+ rb_define_method(cWebResource, "data=", WebResource_data_equals, 1);
623
+ cWebNetworkRequest = G_DEF_CLASS(WEBKIT_TYPE_NETWORK_REQUEST, "WebNetworkRequest", mWebKit);
624
+ rb_define_method(cWebNetworkRequest, "uri", WebNetworkRequest_uri, 0);
625
+ rb_define_method(cWebNetworkRequest, "uri=", WebNetworkRequest_uri_equals, 1);
626
+ cWebNetworkResponse = G_DEF_CLASS(WEBKIT_TYPE_NETWORK_RESPONSE, "WebNetworkResponse", mWebKit);
627
+ rb_define_method(cWebNetworkResponse, "uri", WebNetworkResponse_uri, 0);
628
+ rb_define_method(cWebNetworkResponse, "uri=", WebNetworkResponse_uri_equals, 1);
629
+ rb_gc_register_address(&_gcpool_RubyFunc);
630
+ }