diff --git a/private/lib/linux/x86_64/librktwebview_qt.so b/private/lib/linux/x86_64/librktwebview_qt.so index e0ff9e7..ebaf2ae 100755 Binary files a/private/lib/linux/x86_64/librktwebview_qt.so and b/private/lib/linux/x86_64/librktwebview_qt.so differ diff --git a/private/racket-webview-qt.rkt b/private/racket-webview-qt.rkt index ac7418d..1da7a2e 100644 --- a/private/racket-webview-qt.rkt +++ b/private/racket-webview-qt.rkt @@ -15,7 +15,8 @@ (provide rkt-wv rkt-wv-win - + + rkt-webview-new-context rkt-webview-create rkt-webview-close rkt-webview-set-ou-token @@ -256,6 +257,11 @@ (define-rktwebview rkt_webview_init (_fun -> _void)) +;RKTWEBVIEW_QT_EXPORT rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, +; const char *optional_server_cert_pem); +(define-rktwebview rkt_webview_new_context + (_fun _string/utf-8 _bytes -> _int)) + ;RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms); (define-rktwebview rkt_webview_process_events (_fun _int -> _void)) @@ -268,14 +274,13 @@ (define-rktwebview rkt_webview_version (_fun -> _rkt_data_t-pointer)) -;RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rktwebview_t parent, -; event_cb_t js_event_cb, -; const char *optional_server_cert_pem); +; RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rkt_wv_context_t context, +; rktwebview_t parent, +; event_cb_t js_event_cb); (define-rktwebview rkt_webview_create - (_fun _int + (_fun _int _int (_fun #:keep callback-box #:async-apply applier _rkt_data_t-pointer -> _void) - _bytes -> _int)) ;RKTWEBVIEW_QT_EXPORT void rkt_webview_close(int wv); @@ -415,14 +420,18 @@ ) 'done)) -(define (rkt-webview-create parent evt-callback close-callback server-cert) + +(define (rkt-webview-new-context boilerplate-js server-cert) + (rkt_webview_new_context boilerplate-js server-cert)) + + +(define (rkt-webview-create context parent evt-callback close-callback) (let* ((evt-queue (make-queue)) (parent-win (if (eq? parent #f) 0 (rkt-wv-win parent))) ) - (let ((wv (rkt_webview_create parent-win + (let ((wv (rkt_webview_create context parent-win (λ (rkt-evt) - (enqueue! evt-queue rkt-evt)) - server-cert))) + (enqueue! evt-queue rkt-evt))))) (let ((handle (make-rkt-wv wv evt-queue evt-callback #t close-callback))) (thread (λ () (sleep 1) diff --git a/private/racket-webview.rkt b/private/racket-webview.rkt index d9b35e6..4fa2fa2 100644 --- a/private/racket-webview.rkt +++ b/private/racket-webview.rkt @@ -5,6 +5,7 @@ "utils.rkt" "mimetypes.rkt" "rgba.rkt" + finalizer racket/async-channel web-server/http web-server/servlet-dispatch @@ -28,7 +29,8 @@ racket-self-signed-cert ) -(provide webview-create +(provide webview-new-context + webview-create webview-devtools webview-close @@ -102,8 +104,8 @@ webview-version - wv-base-url - wv-window-nr + wv-context-base-url + wv-win-window-nr test ) @@ -118,32 +120,38 @@ (let ((file (build-path js-path "boilerplate.js"))) (file->string file))) -(define-struct wv - ([handle #:mutable] +(define-struct wv-context + ([context #:mutable] [port #:mutable] - [window-nr #:mutable] [file-getter #:mutable] - [boilerplate-js #:mutable] [webserver-thread #:mutable] [base-url #:mutable] [request-count #:mutable] [sec-token-cache #:mutable] [cert-ou-token #:mutable] + ) + #:transparent + ) + +(define-struct wv-win + ([handle #:mutable] [context #:mutable] + [window-nr #:mutable] ) #:transparent) -(define (process-html wv-handle path out) - (let ((html (file->string path)) - (boilerplate-js ((wv-boilerplate-js wv-handle)))) - (set! html (string-replace html "
" - (string-append "" "\n" - "" "\n"))) +(define (process-html context path out) + (let ((html (file->string path))) (display html out))) +; (boilerplate-js ((wv-context-boilerplate-js wv-win-handle)))) +; (set! html (string-replace html "" +; (string-append "" "\n" +; "" "\n"))) +; (display html out))) -(define (process-file wv-handle ext path out) +(define (process-file context ext path out) (let ((content (file->bytes path))) (display content out))) @@ -185,11 +193,11 @@ ) ) -(define (web-serve wv-handle req) +(define (web-serve context req) (let* ((path (url->string (request-uri req))) - (file-getter (wv-file-getter wv-handle)) + (file-getter (wv-context-file-getter context)) (token (get-security-token req)) - (sec-cache (wv-sec-token-cache wv-handle)) + (sec-cache (wv-context-sec-token-cache context)) (cache-empty? (lru-empty? sec-cache)) (token-in-cache? (not (or (eq? token #f) (eq? (lru-has? sec-cache token) #f)))) @@ -212,8 +220,8 @@ #:headers (list (make-sec-header sec-cache)) (λ (out) (if (or (eq? ext 'html) (eq? ext 'htm)) - (process-html wv-handle file-to-serve out) - (process-file wv-handle ext file-to-serve out)) + (process-html context file-to-serve out) + (process-file context ext file-to-serve out)) )) (response/output #:code 404 @@ -238,12 +246,16 @@ ) ) ) - (let* ((cert-path (let ((p (build-path (find-system-path 'pref-dir) "racket-webview" (wv-context h)))) + (let* ((cert-path (let* ((context-nr (wv-context-context h)) + (p (build-path (find-system-path 'pref-dir) + "racket-webview" + (format "context-~a" context-nr))) + ) (make-directory* p) p)) - (window-nr (wv-window-nr h)) - (f1 (build-path cert-path (format "self-signed-~a.cert" window-nr))) - (f2 (build-path cert-path (format "self-signed-~a.key" window-nr))) + (context-nr (wv-context-context h)) + (f1 (build-path cert-path (format "self-signed-~a.cert" context-nr))) + (f2 (build-path cert-path (format "self-signed-~a.key" context-nr))) (fh1 (open-output-file f1 #:exists 'replace #:permissions #o600)) (fh2 (open-output-file f2 #:exists 'replace #:permissions #o600))) (display (certificate cert) fh1) @@ -266,12 +278,12 @@ ) (define (remove-cert-files h) - (let* ((cert-path (build-path (find-system-path 'pref-dir) + (let* ((context-nr (wv-context-context h)) + (cert-path (build-path (find-system-path 'pref-dir) "racket-webview" - (wv-context h))) - (window-nr (wv-window-nr h)) - (f1 (build-path cert-path (format "self-signed-~a.cert" window-nr))) - (f2 (build-path cert-path (format "self-signed-~a.key" window-nr))) + (format "context-~a" context-nr))) + (f1 (build-path cert-path (format "self-signed-~a.cert" context-nr))) + (f2 (build-path cert-path (format "self-signed-~a.key" context-nr))) ) (when (file-exists? f1) (delete-file f1)) @@ -387,68 +399,96 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Webview functions ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -(define/contract (webview-create context file-getter event-callback - #:boilerplate-js [bj (λ () (default-boilerplate-js))] - #:parent [p #f]) - (->* ((or/c symbol? string?) procedure? procedure?) - (#:boilerplate-js procedure? #:parent (or/c wv? #f)) - wv?) - (let* ((h (make-wv #f 0 -1 file-getter bj #f #f 0 (make-lru 250 #:cmp eq?) - (symbol->string (make-security-token)) (symbol->string context))) + +(define/contract (webview-new-context file-getter + #:boilerplate-js [bj (default-boilerplate-js)]) + (->* (procedure?) (#:boilerplate-js string?) wv-context?) + (let* ((h (make-wv-context 0 0 file-getter #f #f 0 + (make-lru 250 #:cmp eq?) + (symbol->string (make-security-token)) + )) (cert (generate-self-signed-cert 2048 365 '("127.0.0.1" "localhost") "NL" "Dijkema" - #:ou (wv-cert-ou-token h))) + #:ou (wv-context-cert-ou-token h))) (server-cert (certificate cert)) - (event-processor (λ (wv evt) - (event-callback h (util-parse-event evt)))) - (close-callback (λ () - (remove-cert-files h))) - (ph (if (wv? p) (wv-handle p) #f)) - (wv (let ((internal-handle (rkt-webview-create ph event-processor close-callback server-cert))) - (set-wv-handle! h internal-handle) - (set-wv-window-nr! h (rkt-wv-win internal-handle)) - internal-handle)) (channel (make-async-channel)) (server (let ((s (start-web-server h channel cert))) - (sleep 1) ;;; TODO: Check if web server is up. + (sleep 1) ;;; ToDO Check if server is up s)) (port-nr (let ((pn (async-channel-get channel))) - (set-wv-port! h pn) + (set-wv-context-port! h pn) pn)) - (base-req (format "https://127.0.0.1:~a" (wv-port h))) + (base-req (format "https://127.0.0.1:~a" (wv-context-port h))) ) - (set-wv-webserver-thread! h server) - (set-wv-base-url! h base-req) - (rkt-webview-set-ou-token (wv-handle h) (wv-cert-ou-token h)) - (rkt-webview-set-url! (wv-handle h) base-req) + (set-wv-context-context! h (rkt-webview-new-context bj server-cert)) + (set-wv-context-webserver-thread! h server) + (set-wv-context-base-url! h base-req) + (register-finalizer h (λ (h) (remove-cert-files h))) + h)) + +;([context #:mutable] +; [port #:mutable] +; [file-getter #:mutable] +; [webserver-thread #:mutable] +; [base-url #:mutable] +; [request-count #:mutable] +; [sec-token-cache #:mutable] +; [cert-ou-token #:mutable] + + +;(define-struct wv +; ([handle #:mutable] +; [context #:mutable] +; [window-nr #:mutable] +; ) +; #:transparent) + +(define/contract (webview-create context url-path event-callback + #:parent [p #f]) + (->* (wv-context? string? procedure?) + (#:parent (or/c wv-win? #f)) + wv-win?) + (let* ((h (make-wv-win #f context -1)) + (event-processor (λ (wv evt) + (event-callback h (util-parse-event evt)))) + (close-callback (λ () #t)) + (ph (if (wv-win? p) (wv-win-handle p) #f)) + (context-nr (wv-context-context context)) + (wv (let ((internal-handle (rkt-webview-create context-nr ph event-processor close-callback))) + (set-wv-win-handle! h internal-handle) + (set-wv-win-window-nr! h (rkt-wv-win internal-handle)) + internal-handle)) + ) + (rkt-webview-set-ou-token (wv-win-handle h) (wv-context-cert-ou-token context)) + (webview-set-url! h url-path) h) ) (define/contract (webview-devtools wv) - (-> wv? symbol?) - (rkt-webview-open-devtools (wv-handle wv))) + (-> wv-win? symbol?) + (rkt-webview-open-devtools (wv-win-handle wv))) (define/contract (webview-move wv x y) - (-> wv? number? number? symbol?) - (rkt-webview-move (wv-handle wv) x y)) + (-> wv-win? number? number? symbol?) + (rkt-webview-move (wv-win-handle wv) x y)) (define/contract (webview-resize wv w h) - (-> wv? number? number? symbol?) - (rkt-webview-resize (wv-handle wv) w h)) + (-> wv-win? number? number? symbol?) + (rkt-webview-resize (wv-win-handle wv) w h)) (define/contract (webview-set-html! wv html) - (-> wv? (or/c string? xexpr?) symbol?) + (-> wv-win? (or/c string? xexpr?) symbol?) (if (string? html) - (rkt-webview-set-html! (wv-handle wv) html) - (rkt-webview-set-html! (wv-handle wv) (xexpr->string html)) + (rkt-webview-set-html! (wv-win-handle wv) html) + (rkt-webview-set-html! (wv-win-handle wv) (xexpr->string html)) ) ) (define/contract (webview-set-url! wv url) - (-> wv? (or/c string? url?) symbol?) - (let ((u (if (string? url) (string->url url) url)) - (bu (string->url (wv-base-url wv)))) + (-> wv-win? (or/c string? url?) symbol?) + (let* ((u (if (string? url) (string->url url) url)) + (c (wv-win-context wv)) + (bu (string->url (wv-context-base-url c)))) (when (or (eq? (url-scheme u) #f) (eq? (url-host u) #f)) (set-url-host! u (url-host bu)) (set-url-port! u (url-port bu)) @@ -457,27 +497,27 @@ ) (when (eq? (url-scheme u) #f) (set-url-scheme! (url-scheme bu))) - (rkt-webview-set-url! (wv-handle wv) (url->string u)) + (rkt-webview-set-url! (wv-win-handle wv) (url->string u)) ) ) (define/contract (webview-navigate! wv place) - (-> wv? string? symbol?) + (-> wv-win? string? symbol?) (webview-run-js wv (format "window.location = '~a';" (esc-quote place)))) (define/contract (webview-base-url wv) - (-> wv? url?) - (string->url (wv-base-url wv))) + (-> wv-win? url?) + (string->url (wv-context-base-url (wv-win-context wv)))) (define-syntax def-win-func (syntax-rules () ((_ name name-to-wrap) (define/contract (name wv) - (-> wv? symbol?) - (name-to-wrap (wv-handle wv)))))) + (-> wv-win? symbol?) + (name-to-wrap (wv-win-handle wv)))))) (def-win-func webview-show rkt-webview-show) (def-win-func webview-hide rkt-webview-hide) @@ -488,9 +528,9 @@ (def-win-func webview-window-state rkt-webview-window-state) (define/contract (webview-choose-dir wv title base-dir) - (-> wv? string? (or/c path? string?) (or/c hash? boolean?)) + (-> wv-win? string? (or/c path? string?) (or/c hash? boolean?)) (let ((bd (if (path? base-dir) (path->string base-dir) base-dir))) - (let ((res (rkt-webview-choose-dir (wv-handle wv) title bd))) + (let ((res (rkt-webview-choose-dir (wv-win-handle wv) title bd))) (if (eq? res #f) #f (cond ((eq? (car res) 'oke) @@ -506,7 +546,7 @@ (define (file-open-save wv title base-dir permitted-exts open-save-f) (let* ((bd (if (path? base-dir) (path->string base-dir) base-dir)) (ext-filter (make-exts-filter permitted-exts))) - (let ((res (open-save-f (wv-handle wv) title bd ext-filter))) + (let ((res (open-save-f (wv-win-handle wv) title bd ext-filter))) (if (eq? res #f) #f (cond ((eq? (car res) 'oke) @@ -522,30 +562,29 @@ (define/contract (webview-file-open wv title base-dir permitted-exts) - (-> wv? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) + (-> wv-win? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) (or/c hash? boolean?)) (file-open-save wv title base-dir permitted-exts rkt-webview-file-open)) (define/contract (webview-file-save wv title base-dir permitted-exts) - (-> wv? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) + (-> wv-win? string? (or/c path? string?) (or/c wv-permitted-exts? wv-list-of-permitted-exts?) (or/c hash? boolean?)) (file-open-save wv title base-dir permitted-exts rkt-webview-file-save)) (define/contract (webview-set-title! wv title) - (-> wv? string? symbol?) - (rkt-webview-set-title! (wv-handle wv) title)) + (-> wv-win? string? symbol?) + (rkt-webview-set-title! (wv-win-handle wv) title)) (define/contract (webview-close wv) - (-> wv? symbol?) + (-> wv-win? symbol?) (begin - (rkt-webview-close (wv-handle wv)) - (kill-thread (wv-webserver-thread wv)) + (rkt-webview-close (wv-win-handle wv)) 'oke)) (define/contract (webview-bind! wv selector event) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) (let* ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -555,13 +594,13 @@ ) (let ((r (webview-call-js wv (format "return window.rkt_bind_evt_ids(~a, '~a', ~a)" - (wv-window-nr wv) sel evt)))) + (wv-win-window-nr wv) sel evt)))) (map (λ (el) (list (string->symbol (car el)) (cadr el) (caddr el))) r)))) (define/contract (webview-unbind! wv selector event) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) (let* ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -571,14 +610,14 @@ ) (let ((r (webview-call-js wv (format "return window.rkt_unbind_evt_ids(~a, '~a', ~a)" - (wv-window-nr wv) sel evt)))) + (wv-win-window-nr wv) sel evt)))) (map (λ (el) (list (string->symbol (car el)) (cadr el) (caddr el))) r)))) (define/contract (webview-run-js wv js) - (-> wv? string? symbol?) - (rkt-webview-run-js (wv-handle wv) js)) + (-> wv-win? string? symbol?) + (rkt-webview-run-js (wv-win-handle wv) js)) (define (webview-standard-file-getter base-path #:not-exist [on-not-exist (λ (file base-path path) path)] @@ -594,8 +633,8 @@ (define (webview-call-js wv js) - (-> wv? string? (or/c string? list? boolean? hash?)) - (let ((result (rkt-webview-call-js (wv-handle wv) js))) + (-> wv-win? string? (or/c string? list? boolean? hash?)) + (let ((result (rkt-webview-call-js (wv-win-handle wv) js))) (if (webview-call-js-result? result) (if (eq? (car result) 'oke) (hash-ref (fromJson (cadr result)) 'result #f) @@ -614,7 +653,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define/contract (webview-set-innerHTML! wv id html) - (-> wv? symbol? (or/c string? xexpr?) symbol?) + (-> wv-win? symbol? (or/c string? xexpr?) symbol?) (if (string? html) (webview-run-js wv (with-id id el @@ -624,7 +663,7 @@ ) (define/contract (webview-set-value! wv id val) - (-> wv? symbol? (or/c symbol? string? number? boolean? g:date? g:time? g:datetime? rgba?) symbol?) + (-> wv-win? symbol? (or/c symbol? string? number? boolean? g:date? g:time? g:datetime? rgba?) symbol?) (webview-run-js wv (with-id id el ((string-append @@ -651,7 +690,7 @@ ) (define/contract (webview-value wv id) - (-> wv? symbol? (or/c string? boolean?)) + (-> wv-win? symbol? (or/c string? boolean?)) (let ((v (webview-call-js wv (with-id id el ((string-append "let f = function() {\n" @@ -670,7 +709,7 @@ (syntax-rules () ((_ name type-pred? convert) (define/contract (name wv id) - (-> wv? symbol? (or/c type-pred? boolean?)) + (-> wv-win? symbol? (or/c type-pred? boolean?)) (let ((v (webview-value wv id))) (if (eq? v #f) #f @@ -689,7 +728,7 @@ (define/contract (webview-add-class! wv id-or-selector class) - (-> wv? (or/c symbol? string?) (or/c symbol? string? list?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? string? list?) hash?) (let ((sel (if (symbol? id-or-selector) (format "#~a" id-or-selector) id-or-selector)) @@ -709,7 +748,7 @@ ) (define/contract (webview-remove-class! wv id-or-selector class) - (-> wv? (or/c symbol? string?) (or/c symbol? string? list?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? string? list?) hash?) (let ((sel (if (symbol? id-or-selector) (format "#~a" id-or-selector) id-or-selector)) @@ -731,7 +770,7 @@ ) (define/contract (webview-set-style! wv selector style-entries) - (-> wv? (or/c symbol? string?) (or/c kv? list-of-kv?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c kv? list-of-kv?) hash?) (let ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -755,7 +794,7 @@ ) (define/contract (webview-get-style wv selector styles) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) (or/c list? hash?)) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) (or/c list? hash?)) (let ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -788,7 +827,7 @@ (define/contract (webview-unset-style! wv selector style-entries) - (-> wv? (or/c symbol? string?) (or/c symbol? list-of-symbol?) hash?) + (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) hash?) (let ((sel (if (symbol? selector) (format "#~a" selector) selector)) @@ -813,7 +852,7 @@ ) (define/contract (webview-set-attr! wv selector attr-entries) - (-> wv? (or/c symbol? string?) + (-> wv-win? (or/c symbol? string?) (or/c kv? list-of-kv?) hash?) (let* ((sel (if (symbol? selector) (format "#~a" selector) @@ -847,7 +886,7 @@ ) (define/contract (webview-attr wv id attr) - (-> wv? symbol? (or/c symbol? string?) (or/c string? boolean?)) + (-> wv-win? symbol? (or/c symbol? string?) (or/c string? boolean?)) (let ((v (webview-call-js wv (with-id id el -> (format "el.getAttribute('~a');" attr)) @@ -862,7 +901,7 @@ (syntax-rules () ((_ name type-pred? convert) (define/contract (name wv id attr) - (-> wv? symbol? (or/c symbol? string?) (or/c type-pred? boolean?)) + (-> wv-win? symbol? (or/c symbol? string?) (or/c type-pred? boolean?)) (let ((v (webview-attr wv id attr))) (if (eq? v #f) #f @@ -891,11 +930,14 @@ (define file-getter (webview-standard-file-getter example-path)) +(define test-context (webview-new-context file-getter)) + (define (test) (let* ((cb (λ (handle evt) (displayln evt))) - (h (webview-create 'test file-getter cb)) + (h (webview-create test-context "index.html" cb)) ) + (displayln h) (webview-set-title! h "This is a test window") (webview-resize h 800 600) (webview-move h 350 220) diff --git a/rktwebview_qt/command.h b/rktwebview_qt/command.h index ca484de..fea5d76 100644 --- a/rktwebview_qt/command.h +++ b/rktwebview_qt/command.h @@ -26,7 +26,6 @@ #define COMMAND_FILE_OPEN 20 #define COMMAND_FILE_SAVE 21 #define COMMAND_SET_OU_TOKEN 22 -#define COMMAND_SET_CERTIFICATE 23 class Command { diff --git a/rktwebview_qt/main.cpp b/rktwebview_qt/main.cpp index 66a0e89..759d260 100644 --- a/rktwebview_qt/main.cpp +++ b/rktwebview_qt/main.cpp @@ -22,7 +22,9 @@ int main(int argc, char *argv[]) rkt_webview_init(); - wv1 = rkt_webview_create(0, eventCb, nullptr); + int context = rkt_webview_new_context("console.log('boilerplate!');", nullptr); + + wv1 = rkt_webview_create(context, 0, eventCb); rkt_webview_move(wv1, 200, 300); rkt_webview_resize(wv1, 800, 600); @@ -57,7 +59,7 @@ int main(int argc, char *argv[]) if (i == 10) { - wv2 = rkt_webview_create(wv1, eventCb, nullptr); + wv2 = rkt_webview_create(context, wv1, eventCb); rkt_webview_move(wv2, 400, 200); rkt_webview_resize(wv2, 800, 600); rkt_webview_set_url(wv2, "https://127.0.0.1"); diff --git a/rktwebview_qt/rktwebview.cpp b/rktwebview_qt/rktwebview.cpp index d8a4cc6..6934420 100644 --- a/rktwebview_qt/rktwebview.cpp +++ b/rktwebview_qt/rktwebview.cpp @@ -32,10 +32,17 @@ void rkt_webview_init() } } -int rkt_webview_create(rktwebview_t parent, event_cb_t js_event_cb, const char *optional_server_cert_pem) + +rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, const char *optional_server_cert_pem) { rkt_webview_init(); - return handler->rktWebViewCreate(parent, js_event_cb, optional_server_cert_pem); + return handler->newContext(boilerplate_js, optional_server_cert_pem); +} + +int rkt_webview_create(rkt_wv_context_t context, rktwebview_t parent, event_cb_t js_event_cb) +{ + rkt_webview_init(); + return handler->rktWebViewCreate(context, parent, js_event_cb); } void rkt_webview_close(rktwebview_t wv) diff --git a/rktwebview_qt/rktwebview.h b/rktwebview_qt/rktwebview.h index 6c19a44..1fad84f 100644 --- a/rktwebview_qt/rktwebview.h +++ b/rktwebview_qt/rktwebview.h @@ -10,6 +10,7 @@ extern "C" { typedef int rktwebview_t; +typedef int rkt_wv_context_t; typedef struct { rktwebview_t wv; @@ -81,12 +82,12 @@ typedef void (*event_cb_t)(rkt_data_t *); RKTWEBVIEW_QT_EXPORT void rkt_webview_init(); RKTWEBVIEW_QT_EXPORT void rkt_webview_process_events(int for_ms); - RKTWEBVIEW_QT_EXPORT void rkt_webview_free_data(rkt_data_t *d); - RKTWEBVIEW_QT_EXPORT rkt_data_t *rkt_webview_version(); -RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rktwebview_t parent, event_cb_t js_event_cb, const char *optional_server_cert_pem); +RKTWEBVIEW_QT_EXPORT rkt_wv_context_t rkt_webview_new_context(const char *boilerplate_js, const char *optional_server_cert_pem); + +RKTWEBVIEW_QT_EXPORT int rkt_webview_create(rkt_wv_context_t context, rktwebview_t parent, event_cb_t js_event_cb); RKTWEBVIEW_QT_EXPORT void rkt_webview_close(rktwebview_t wv); RKTWEBVIEW_QT_EXPORT bool rkt_webview_valid(rktwebview_t wv); RKTWEBVIEW_QT_EXPORT result_t rkt_webview_set_title(rktwebview_t wv, const char *title); diff --git a/rktwebview_qt/rktwebview_qt.cpp b/rktwebview_qt/rktwebview_qt.cpp index 0dc6ded..f7f0cbe 100644 --- a/rktwebview_qt/rktwebview_qt.cpp +++ b/rktwebview_qt/rktwebview_qt.cpp @@ -9,6 +9,10 @@ #include