返回 DeepSeek-Reasonix
ICoreWebView2WebResourceResponse.go
根目录 / desktop / third_party / go-webview2 / pkg / edge / ICoreWebView2WebResourceResponse.go
1 //go:build windows
2
3 package edge
4
5 import (
6 "errors"
7 "fmt"
8 "net/http"
9 "syscall"
10 "unsafe"
11
12 "github.com/wailsapp/go-webview2/internal/w32"
13 "golang.org/x/sys/windows"
14 )
15
16 type _ICoreWebView2WebResourceResponseVtbl struct {
17 _IUnknownVtbl
18 GetContent ComProc
19 PutContent ComProc
20 GetHeaders ComProc
21 GetStatusCode ComProc
22 PutStatusCode ComProc
23 GetReasonPhrase ComProc
24 PutReasonPhrase ComProc
25 }
26
27 type ICoreWebView2WebResourceResponse struct {
28 vtbl *_ICoreWebView2WebResourceResponseVtbl
29 }
30
31 func (i *ICoreWebView2WebResourceResponse) AddRef() error {
32 _, _, err := i.vtbl.AddRef.Call(uintptr(unsafe.Pointer(i)))
33 if err != nil && !errors.Is(err, windows.ERROR_SUCCESS) {
34 return err
35 }
36
37 return nil
38 }
39
40 func (i *ICoreWebView2WebResourceResponse) Release() error {
41 _, _, err := i.vtbl.Release.Call(uintptr(unsafe.Pointer(i)))
42 if err != nil && !errors.Is(err, windows.ERROR_SUCCESS) {
43 return err
44 }
45
46 return nil
47 }
48
49 // GetHeaders returns the mutable HTTP request headers. Make sure to call
50 // Release on the returned Object after finished using it.
51 func (i *ICoreWebView2WebResourceResponse) GetHeaders() (*ICoreWebView2HttpResponseHeaders, error) {
52 var headers *ICoreWebView2HttpResponseHeaders
53 hr, _, _ := i.vtbl.GetHeaders.Call(
54 uintptr(unsafe.Pointer(i)),
55 uintptr(unsafe.Pointer(&headers)),
56 )
57 if windows.Handle(hr) != windows.S_OK {
58 return nil, syscall.Errno(hr)
59 }
60 if headers == nil {
61
62 return nil, fmt.Errorf("unknown error")
63 }
64 return headers, nil
65 }
66
67 func (i *ICoreWebView2WebResourceResponse) PutStatusCode(statusCode int) error {
68 hr, _, _ := i.vtbl.PutStatusCode.Call(
69 uintptr(unsafe.Pointer(i)),
70 uintptr(statusCode),
71 )
72
73 if windows.Handle(hr) != windows.S_OK {
74 return syscall.Errno(hr)
75 }
76
77 // Convert string 'reasonPhrase' to *uint16
78 _reasonPhrase, err := UTF16PtrFromString(http.StatusText(statusCode))
79 if err != nil {
80 return err
81 }
82
83 hr, _, _ = i.vtbl.PutReasonPhrase.Call(
84 uintptr(unsafe.Pointer(i)),
85 uintptr(unsafe.Pointer(_reasonPhrase)),
86 )
87 if windows.Handle(hr) != windows.S_OK {
88 return syscall.Errno(hr)
89 }
90 return nil
91 }
92
93 func (i *ICoreWebView2WebResourceResponse) PutContent(content *IStream) error {
94 hr, _, _ := i.vtbl.PutContent.Call(
95 uintptr(unsafe.Pointer(i)),
96 uintptr(unsafe.Pointer(content)),
97 )
98 if windows.Handle(hr) != windows.S_OK {
99 return syscall.Errno(hr)
100 }
101
102 return nil
103 }
104
105 func (i *ICoreWebView2WebResourceResponse) PutByteContent(content []byte) error {
106 var stream *IStream
107 if len(content) > 0 {
108 // Create stream for response
109 str, err := w32.SHCreateMemStream(content)
110 if err != nil {
111 return err
112 }
113 stream = (*IStream)(unsafe.Pointer(str))
114 defer stream.Release()
115 }
116
117 return i.PutContent(stream)
118 }
119
119 lines GO