github.com/AlpineAIO/wails/v2@v2.0.0-beta.32.0.20240505041856-1047a8fa5fef/pkg/assetserver/webview/request_linux.go (about) 1 //go:build linux 2 // +build linux 3 4 package webview 5 6 /* 7 #cgo linux pkg-config: gtk+-3.0 webkit2gtk-4.0 gio-unix-2.0 8 9 #include "gtk/gtk.h" 10 #include "webkit2/webkit2.h" 11 */ 12 import "C" 13 14 import ( 15 "io" 16 "net/http" 17 "unsafe" 18 ) 19 20 // NewRequest creates as new WebViewRequest based on a pointer to an `WebKitURISchemeRequest` 21 func NewRequest(webKitURISchemeRequest unsafe.Pointer) Request { 22 webkitReq := (*C.WebKitURISchemeRequest)(webKitURISchemeRequest) 23 C.g_object_ref(C.gpointer(webkitReq)) 24 25 req := &request{req: webkitReq} 26 return newRequestFinalizer(req) 27 } 28 29 var _ Request = &request{} 30 31 type request struct { 32 req *C.WebKitURISchemeRequest 33 34 header http.Header 35 body io.ReadCloser 36 rw *responseWriter 37 } 38 39 func (r *request) URL() (string, error) { 40 return C.GoString(C.webkit_uri_scheme_request_get_uri(r.req)), nil 41 } 42 43 func (r *request) Method() (string, error) { 44 return webkit_uri_scheme_request_get_http_method(r.req), nil 45 } 46 47 func (r *request) Header() (http.Header, error) { 48 if r.header != nil { 49 return r.header, nil 50 } 51 52 r.header = webkit_uri_scheme_request_get_http_headers(r.req) 53 return r.header, nil 54 } 55 56 func (r *request) Body() (io.ReadCloser, error) { 57 if r.body != nil { 58 return r.body, nil 59 } 60 61 r.body = webkit_uri_scheme_request_get_http_body(r.req) 62 63 return r.body, nil 64 } 65 66 func (r *request) Response() ResponseWriter { 67 if r.rw != nil { 68 return r.rw 69 } 70 71 r.rw = &responseWriter{req: r.req} 72 return r.rw 73 } 74 75 func (r *request) Close() error { 76 var err error 77 if r.body != nil { 78 err = r.body.Close() 79 } 80 r.Response().Finish() 81 C.g_object_unref(C.gpointer(r.req)) 82 return err 83 }