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  }