diff --git a/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebView2HttpRequestHeaders.go b/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebView2HttpRequestHeaders.go index a1ad2cb0..3df43b5c 100644 --- a/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebView2HttpRequestHeaders.go +++ b/v2/internal/frontend/desktop/windows/go-webview2/pkg/edge/ICoreWebView2HttpRequestHeaders.go @@ -7,6 +7,10 @@ import ( "golang.org/x/sys/windows" ) +const ( + ERROR_ELEMENT_NOT_FOUND syscall.Errno = 0x80070490 +) + type _ICoreWebView2HttpRequestHeadersVtbl struct { _IUnknownVtbl GetHeader ComProc @@ -25,6 +29,58 @@ func (i *ICoreWebView2HttpRequestHeaders) Release() error { return i.vtbl.CallRelease(unsafe.Pointer(i)) } +// GetHeader returns the value of the specified header. If the header is not found +// ERROR_ELEMENT_NOT_FOUND is returned as error. +func (i *ICoreWebView2HttpRequestHeaders) GetHeader(name string) (string, error) { + _name, err := windows.UTF16PtrFromString(name) + if err != nil { + return "", nil + } + + var _value *uint16 + res, _, err := i.vtbl.GetHeader.Call( + uintptr(unsafe.Pointer(i)), + uintptr(unsafe.Pointer(_name)), + uintptr(unsafe.Pointer(&_value)), + ) + if err != windows.ERROR_SUCCESS { + return "", err + } + if windows.Handle(res) != windows.S_OK { + return "", syscall.Errno(res) + } + + value := windows.UTF16PtrToString(_value) + windows.CoTaskMemFree(unsafe.Pointer(_value)) + return value, nil +} + +// SetHeader sets the specified header to the value. +func (i *ICoreWebView2HttpRequestHeaders) SetHeader(name, value string) error { + _name, err := windows.UTF16PtrFromString(name) + if err != nil { + return nil + } + + _value, err := windows.UTF16PtrFromString(value) + if err != nil { + return nil + } + + res, _, err := i.vtbl.SetHeader.Call( + uintptr(unsafe.Pointer(i)), + uintptr(unsafe.Pointer(_name)), + uintptr(unsafe.Pointer(_value)), + ) + if err != windows.ERROR_SUCCESS { + return err + } + if windows.Handle(res) != windows.S_OK { + return syscall.Errno(res) + } + return nil +} + // GetIterator returns an iterator over the collection of request headers. Make sure to call // Release on the returned Object after finished using it. func (i *ICoreWebView2HttpRequestHeaders) GetIterator() (*ICoreWebView2HttpHeadersCollectionIterator, error) {