返回 DeepSeek-Reasonix
corewebview2.go
根目录 / desktop / third_party / go-webview2 / pkg / edge / corewebview2.go
1 //go:build windows
2 // +build windows
3
4 package edge
5
6 import (
7 "fmt"
8 "log"
9 "runtime"
10 "syscall"
11 "unsafe"
12
13 "github.com/wailsapp/go-webview2/internal/w32"
14
15 "golang.org/x/sys/windows"
16 )
17
18 func init() {
19 runtime.LockOSThread()
20
21 r, _, _ := w32.Ole32CoInitializeEx.Call(0, uintptr(w32.COINIT_APARTMENTTHREADED))
22 if int(r) < 0 {
23 log.Printf("Warning: CoInitializeEx call failed: E=%08x", r)
24 }
25 }
26
27 type _EventRegistrationToken struct {
28 value int64
29 }
30
31 type CoreWebView2PermissionKind uint32
32
33 const (
34 CoreWebView2PermissionKindUnknownPermission CoreWebView2PermissionKind = iota
35 CoreWebView2PermissionKindMicrophone
36 CoreWebView2PermissionKindCamera
37 CoreWebView2PermissionKindGeolocation
38 CoreWebView2PermissionKindNotifications
39 CoreWebView2PermissionKindOtherSensors
40 CoreWebView2PermissionKindClipboardRead
41 )
42
43 type CoreWebView2PermissionState uint32
44
45 const (
46 CoreWebView2PermissionStateDefault CoreWebView2PermissionState = iota
47 CoreWebView2PermissionStateAllow
48 CoreWebView2PermissionStateDeny
49 )
50
51 // ComProc stores a COM procedure.
52 type ComProc uintptr
53
54 // NewComProc creates a new COM proc from a Go function.
55 func NewComProc(fn interface{}) ComProc {
56 return ComProc(windows.NewCallback(fn))
57 }
58
59 // Call calls a COM procedure.
60 //
61 //go:uintptrescapes
62 func (p ComProc) Call(a ...uintptr) (r1, r2 uintptr, lastErr error) {
63 // The magic uintptrescapes comment is needed to prevent moving uintptr(unsafe.Pointer(p)) so calls to .Call() also
64 // satisfy the unsafe.Pointer rule "(4) Conversion of a Pointer to a uintptr when calling syscall.Syscall."
65 // Otherwise it might be that pointers get moved, especially pointer onto the Go stack which might grow dynamically.
66 // See https://pkg.go.dev/unsafe#Pointer and https://github.com/golang/go/issues/34474
67 switch len(a) {
68 case 0:
69 return syscall.Syscall(uintptr(p), 0, 0, 0, 0)
70 case 1:
71 return syscall.Syscall(uintptr(p), 1, a[0], 0, 0)
72 case 2:
73 return syscall.Syscall(uintptr(p), 2, a[0], a[1], 0)
74 case 3:
75 return syscall.Syscall(uintptr(p), 3, a[0], a[1], a[2])
76 case 4:
77 return syscall.Syscall6(uintptr(p), 4, a[0], a[1], a[2], a[3], 0, 0)
78 case 5:
79 return syscall.Syscall6(uintptr(p), 5, a[0], a[1], a[2], a[3], a[4], 0)
80 case 6:
81 return syscall.Syscall6(uintptr(p), 6, a[0], a[1], a[2], a[3], a[4], a[5])
82 case 7:
83 return syscall.Syscall9(uintptr(p), 7, a[0], a[1], a[2], a[3], a[4], a[5], a[6], 0, 0)
84 case 8:
85 return syscall.Syscall9(uintptr(p), 8, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], 0)
86 case 9:
87 return syscall.Syscall9(uintptr(p), 9, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8])
88 case 10:
89 return syscall.Syscall12(uintptr(p), 10, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], 0, 0)
90 case 11:
91 return syscall.Syscall12(uintptr(p), 11, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], 0)
92 case 12:
93 return syscall.Syscall12(uintptr(p), 12, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11])
94 case 13:
95 return syscall.Syscall15(uintptr(p), 13, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], 0, 0)
96 case 14:
97 return syscall.Syscall15(uintptr(p), 14, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], 0)
98 case 15:
99 return syscall.Syscall15(uintptr(p), 15, a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], a[9], a[10], a[11], a[12], a[13], a[14])
100 default:
101 panic("too many arguments")
102 }
103 }
104
105 // IUnknown
106
107 type _IUnknownVtbl struct {
108 QueryInterface ComProc
109 AddRef ComProc
110 Release ComProc
111 }
112
113 type _IUnknownImpl interface {
114 QueryInterface(refiid, object uintptr) uintptr
115 AddRef() uintptr
116 Release() uintptr
117 }
118
119 // ICoreWebView2
120
121 type iCoreWebView2Vtbl struct {
122 _IUnknownVtbl
123 GetSettings ComProc
124 GetSource ComProc
125 Navigate ComProc
126 NavigateToString ComProc
127 AddNavigationStarting ComProc
128 RemoveNavigationStarting ComProc
129 AddContentLoading ComProc
130 RemoveContentLoading ComProc
131 AddSourceChanged ComProc
132 RemoveSourceChanged ComProc
133 AddHistoryChanged ComProc
134 RemoveHistoryChanged ComProc
135 AddNavigationCompleted ComProc
136 RemoveNavigationCompleted ComProc
137 AddFrameNavigationStarting ComProc
138 RemoveFrameNavigationStarting ComProc
139 AddFrameNavigationCompleted ComProc
140 RemoveFrameNavigationCompleted ComProc
141 AddScriptDialogOpening ComProc
142 RemoveScriptDialogOpening ComProc
143 AddPermissionRequested ComProc
144 RemovePermissionRequested ComProc
145 AddProcessFailed ComProc
146 RemoveProcessFailed ComProc
147 AddScriptToExecuteOnDocumentCreated ComProc
148 RemoveScriptToExecuteOnDocumentCreated ComProc
149 ExecuteScript ComProc
150 CapturePreview ComProc
151 Reload ComProc
152 PostWebMessageAsJSON ComProc
153 PostWebMessageAsString ComProc
154 AddWebMessageReceived ComProc
155 RemoveWebMessageReceived ComProc
156 CallDevToolsProtocolMethod ComProc
157 GetBrowserProcessID ComProc
158 GetCanGoBack ComProc
159 GetCanGoForward ComProc
160 GoBack ComProc
161 GoForward ComProc
162 GetDevToolsProtocolEventReceiver ComProc
163 Stop ComProc
164 AddNewWindowRequested ComProc
165 RemoveNewWindowRequested ComProc
166 AddDocumentTitleChanged ComProc
167 RemoveDocumentTitleChanged ComProc
168 GetDocumentTitle ComProc
169 AddHostObjectToScript ComProc
170 RemoveHostObjectFromScript ComProc
171 OpenDevToolsWindow ComProc
172 AddContainsFullScreenElementChanged ComProc
173 RemoveContainsFullScreenElementChanged ComProc
174 GetContainsFullScreenElement ComProc
175 AddWebResourceRequested ComProc
176 RemoveWebResourceRequested ComProc
177 AddWebResourceRequestedFilter ComProc
178 RemoveWebResourceRequestedFilter ComProc
179 AddWindowCloseRequested ComProc
180 RemoveWindowCloseRequested ComProc
181 }
182
183 type ICoreWebView2 struct {
184 vtbl *iCoreWebView2Vtbl
185 }
186
187 func (i *ICoreWebView2) AddRef() uint32 {
188 ret, _, _ := i.vtbl.AddRef.Call(uintptr(unsafe.Pointer(i)))
189
190 return uint32(ret)
191 }
192
193 func (i *ICoreWebView2) Release() uint32 {
194 ret, _, _ := i.vtbl.Release.Call(uintptr(unsafe.Pointer(i)))
195
196 return uint32(ret)
197 }
198
199 func (i *ICoreWebView2) AddContainsFullScreenElementChanged(eventHandler *ICoreWebView2ContainsFullScreenElementChangedEventHandler, token *_EventRegistrationToken) error {
200 hr, _, _ := i.vtbl.AddContainsFullScreenElementChanged.Call(
201 uintptr(unsafe.Pointer(i)),
202 uintptr(unsafe.Pointer(eventHandler)),
203 uintptr(unsafe.Pointer(token)),
204 )
205 if windows.Handle(hr) != windows.S_OK {
206 return windows.Errno(hr)
207 }
208
209 return nil
210 }
211
212 func (i *ICoreWebView2) AddNavigationCompleted(eventHandler *ICoreWebView2NavigationCompletedEventHandler, token *_EventRegistrationToken) error {
213 hr, _, _ := i.vtbl.AddNavigationCompleted.Call(
214 uintptr(unsafe.Pointer(i)),
215 uintptr(unsafe.Pointer(eventHandler)),
216 uintptr(unsafe.Pointer(token)),
217 )
218 if windows.Handle(hr) != windows.S_OK {
219 return windows.Errno(hr)
220 }
221
222 return nil
223 }
224
225 func (i *ICoreWebView2) AddPermissionRequested(handler *iCoreWebView2PermissionRequestedEventHandler, token *_EventRegistrationToken) error {
226 hr, _, _ := i.vtbl.AddPermissionRequested.Call(
227 uintptr(unsafe.Pointer(i)),
228 uintptr(unsafe.Pointer(handler)),
229 uintptr(unsafe.Pointer(token)),
230 )
231 if windows.Handle(hr) != windows.S_OK {
232 return windows.Errno(hr)
233 }
234
235 return nil
236 }
237
238 func (i *ICoreWebView2) AddProcessFailed(eventHandler *ICoreWebView2ProcessFailedEventHandler, token *_EventRegistrationToken) error {
239 hr, _, _ := i.vtbl.AddProcessFailed.Call(
240 uintptr(unsafe.Pointer(i)),
241 uintptr(unsafe.Pointer(eventHandler)),
242 uintptr(unsafe.Pointer(token)),
243 )
244 if windows.Handle(hr) != windows.S_OK {
245 return windows.Errno(hr)
246 }
247
248 return nil
249 }
250
251 func (i *ICoreWebView2) AddWebMessageReceived(handler *iCoreWebView2WebMessageReceivedEventHandler, token *_EventRegistrationToken) error {
252 hr, _, _ := i.vtbl.AddWebMessageReceived.Call(
253 uintptr(unsafe.Pointer(i)),
254 uintptr(unsafe.Pointer(handler)),
255 uintptr(unsafe.Pointer(token)),
256 )
257 if windows.Handle(hr) != windows.S_OK {
258 return windows.Errno(hr)
259 }
260
261 return nil
262 }
263
264 func (i *ICoreWebView2) AddWebResourceRequested(handler *iCoreWebView2WebResourceRequestedEventHandler, token *_EventRegistrationToken) error {
265 hr, _, _ := i.vtbl.AddWebResourceRequested.Call(
266 uintptr(unsafe.Pointer(i)),
267 uintptr(unsafe.Pointer(handler)),
268 uintptr(unsafe.Pointer(token)),
269 )
270 if windows.Handle(hr) != windows.S_OK {
271 return windows.Errno(hr)
272 }
273
274 return nil
275 }
276
277 func (i *ICoreWebView2) AddScriptToExecuteOnDocumentCreated(javaScript string, handler *iCoreWebView2AddScriptToExecuteOnDocumentCreatedCompletedHandler) error {
278 u16js, err := windows.UTF16PtrFromString(javaScript)
279 if err != nil {
280 return err
281 }
282
283 hr, _, _ := i.vtbl.AddScriptToExecuteOnDocumentCreated.Call(
284 uintptr(unsafe.Pointer(i)),
285 uintptr(unsafe.Pointer(u16js)),
286 uintptr(unsafe.Pointer(handler)),
287 )
288 if windows.Handle(hr) != windows.S_OK {
289 return windows.Errno(hr)
290 }
291
292 return nil
293 }
294
295 func (i *ICoreWebView2) ExecuteScript(javascript string, handler *iCoreWebView2ExecuteScriptCompletedHandler) error {
296 u16js, err := windows.UTF16PtrFromString(javascript)
297 if err != nil {
298 return err
299 }
300
301 hr, _, _ := i.vtbl.ExecuteScript.Call(
302 uintptr(unsafe.Pointer(i)),
303 uintptr(unsafe.Pointer(u16js)),
304 uintptr(unsafe.Pointer(handler)),
305 )
306 if windows.Handle(hr) != windows.S_OK {
307 return windows.Errno(hr)
308 }
309
310 return nil
311 }
312
313 func (i *ICoreWebView2) GetSettings() (*ICoreWebViewSettings, error) {
314
315 var settings *ICoreWebViewSettings
316 hr, _, _ := i.vtbl.GetSettings.Call(
317 uintptr(unsafe.Pointer(i)),
318 uintptr(unsafe.Pointer(&settings)),
319 )
320 if windows.Handle(hr) != windows.S_OK {
321 return nil, windows.Errno(hr)
322 }
323 return settings, nil
324 }
325
326 func (i *ICoreWebView2) GetSource() (string, error) {
327 var _source *uint16
328 hr, _, _ := i.vtbl.GetSource.Call(
329 uintptr(unsafe.Pointer(i)),
330 uintptr(unsafe.Pointer(&_source)),
331 )
332 if windows.Handle(hr) != windows.S_OK {
333 return "", windows.Errno(hr)
334 }
335 source := windows.UTF16PtrToString(_source)
336 windows.CoTaskMemFree(unsafe.Pointer(_source))
337 return source, nil
338 }
339
340 func (i *ICoreWebView2) GetContainsFullScreenElement() (bool, error) {
341 var result bool
342 hr, _, _ := i.vtbl.GetContainsFullScreenElement.Call(
343 uintptr(unsafe.Pointer(i)),
344 uintptr(unsafe.Pointer(&result)),
345 )
346 if windows.Handle(hr) != windows.S_OK {
347 return false, windows.Errno(hr)
348 }
349 return result, nil
350 }
351
352 func (i *ICoreWebView2) Navigate(url string) error {
353 u16url, err := windows.UTF16PtrFromString(url)
354 if err != nil {
355 return err
356 }
357
358 hr, _, _ := i.vtbl.Navigate.Call(
359 uintptr(unsafe.Pointer(i)),
360 uintptr(unsafe.Pointer(u16url)),
361 )
362 if windows.Handle(hr) != windows.S_OK {
363 return windows.Errno(hr)
364 }
365
366 return nil
367 }
368
369 func (i *ICoreWebView2) NavigateToString(htmlContent string) error {
370 u16Html, err := windows.UTF16PtrFromString(htmlContent)
371 if err != nil {
372 return err
373 }
374
375 hr, _, _ := i.vtbl.NavigateToString.Call(
376 uintptr(unsafe.Pointer(i)),
377 uintptr(unsafe.Pointer(u16Html)),
378 )
379 if windows.Handle(hr) != windows.S_OK {
380 return windows.Errno(hr)
381 }
382
383 return nil
384 }
385
386 func (i *ICoreWebView2) PostWebMessageAsString(webMessageAsString string) error {
387 u16msg, err := windows.UTF16PtrFromString(webMessageAsString)
388 if err != nil {
389 return err
390 }
391
392 hr, _, _ := i.vtbl.PostWebMessageAsString.Call(
393 uintptr(unsafe.Pointer(i)),
394 uintptr(unsafe.Pointer(u16msg)),
395 )
396 if windows.Handle(hr) != windows.S_OK {
397 return windows.Errno(hr)
398 }
399
400 return nil
401 }
402
403 func (i *ICoreWebView2) QueryInterface2() (*ICoreWebView2_2, error) {
404 var result *ICoreWebView2_2
405 iid := windows.GUID{
406 Data1: 0x9E8F0CF8,
407 Data2: 0xE670,
408 Data3: 0x4B5E,
409 Data4: [8]byte{0xB2, 0xBC, 0x73, 0xE0, 0x61, 0xE3, 0x18, 0x4C},
410 }
411 hr, _, _ := i.vtbl.QueryInterface.Call(
412 uintptr(unsafe.Pointer(i)),
413 uintptr(unsafe.Pointer(&iid)),
414 uintptr(unsafe.Pointer(&result)))
415 if hr != 0 {
416 return nil, windows.Errno(hr)
417 }
418 return result, nil
419 }
420
421 // ICoreWebView2EnvironmentVtbl
422 type iCoreWebView2EnvironmentVtbl struct {
423 _IUnknownVtbl
424 CreateCoreWebView2Controller ComProc
425 CreateWebResourceResponse ComProc
426 GetBrowserVersionString ComProc
427 AddNewBrowserVersionAvailable ComProc
428 RemoveNewBrowserVersionAvailable ComProc
429 }
430
431 type ICoreWebView2Environment struct {
432 vtbl *iCoreWebView2EnvironmentVtbl
433 }
434
435 // CreateCoreWebView2Controller asynchronously creates a new WebView.
436 func (e *ICoreWebView2Environment) CreateCoreWebView2Controller(parentWindow uintptr, handler *iCoreWebView2CreateCoreWebView2ControllerCompletedHandler) error {
437 hr, _, _ := e.vtbl.CreateCoreWebView2Controller.Call(
438 uintptr(unsafe.Pointer(e)),
439 parentWindow,
440 uintptr(unsafe.Pointer(handler)),
441 )
442 if windows.Handle(hr) != windows.S_OK {
443 return windows.Errno(hr)
444 }
445
446 return nil
447 }
448
449 // CreateWebResourceResponse creates a new ICoreWebView2WebResourceResponse, it must be released after finishing using it.
450 func (e *ICoreWebView2Environment) CreateWebResourceResponse(content []byte, statusCode int, reasonPhrase string, headers string) (*ICoreWebView2WebResourceResponse, error) {
451
452 var stream uintptr
453
454 if len(content) > 0 {
455 // Create stream for response
456 stream, err := w32.SHCreateMemStream(content)
457 if err != nil {
458 return nil, err
459 }
460
461 // Release the IStream after we are finished, CreateWebResourceResponse Call will increase the reference
462 // count on IStream and therefore it won't be freed until the reference count of the response is 0.
463 defer (*IStream)(unsafe.Pointer(stream)).Release()
464 }
465
466 // Convert string 'uri' to *uint16
467 _reason, err := windows.UTF16PtrFromString(reasonPhrase)
468 if err != nil {
469 return nil, err
470 }
471 // Convert string 'uri' to *uint16
472 _headers, err := windows.UTF16PtrFromString(headers)
473 if err != nil {
474 return nil, err
475 }
476 var response *ICoreWebView2WebResourceResponse
477 hr, _, _ := e.vtbl.CreateWebResourceResponse.Call(
478 uintptr(unsafe.Pointer(e)),
479 stream,
480 uintptr(statusCode),
481 uintptr(unsafe.Pointer(_reason)),
482 uintptr(unsafe.Pointer(_headers)),
483 uintptr(unsafe.Pointer(&response)),
484 )
485 if windows.Handle(hr) != windows.S_OK {
486 return nil, syscall.Errno(hr)
487 }
488
489 if response == nil {
490 return nil, fmt.Errorf("unknown error")
491 }
492
493 return response, nil
494 }
495
496 // ICoreWebView2PermissionRequestedEventArgs
497
498 type iCoreWebView2PermissionRequestedEventArgsVtbl struct {
499 _IUnknownVtbl
500 GetURI ComProc
501 GetPermissionKind ComProc
502 GetIsUserInitiated ComProc
503 GetState ComProc
504 PutState ComProc
505 GetDeferral ComProc
506 }
507
508 type iCoreWebView2PermissionRequestedEventArgs struct {
509 vtbl *iCoreWebView2PermissionRequestedEventArgsVtbl
510 }
511
512 func (i *iCoreWebView2PermissionRequestedEventArgs) GetPermissionKind() (CoreWebView2PermissionKind, error) {
513 var kind CoreWebView2PermissionKind
514
515 hr, _, _ := i.vtbl.GetPermissionKind.Call(
516 uintptr(unsafe.Pointer(i)),
517 uintptr(unsafe.Pointer(&kind)),
518 )
519 if windows.Handle(hr) != windows.S_OK {
520 return 0, windows.Errno(hr)
521 }
522
523 return kind, nil
524 }
525
526 func (i *iCoreWebView2PermissionRequestedEventArgs) PutState(state CoreWebView2PermissionState) error {
527 hr, _, _ := i.vtbl.PutState.Call(
528 uintptr(unsafe.Pointer(i)),
529 uintptr(state),
530 )
531 if windows.Handle(hr) != windows.S_OK {
532 return windows.Errno(hr)
533 }
534
535 return nil
536 }
537
538 // ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler
539
540 type iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerImpl interface {
541 _IUnknownImpl
542 EnvironmentCompleted(res uintptr, env *ICoreWebView2Environment) uintptr
543 }
544
545 type iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl struct {
546 _IUnknownVtbl
547 Invoke ComProc
548 }
549
550 type iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler struct {
551 vtbl *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl
552 impl iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerImpl
553 }
554
555 func _ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerIUnknownQueryInterface(this *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, refiid, object uintptr) uintptr {
556 return this.impl.QueryInterface(refiid, object)
557 }
558
559 func _ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerIUnknownAddRef(this *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler) uintptr {
560 return this.impl.AddRef()
561 }
562
563 func _ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerIUnknownRelease(this *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler) uintptr {
564 return this.impl.Release()
565 }
566
567 func _ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerInvoke(this *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler, res uintptr, env *ICoreWebView2Environment) uintptr {
568 return this.impl.EnvironmentCompleted(res, env)
569 }
570
571 var iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerFn = iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerVtbl{
572 _IUnknownVtbl{
573 NewComProc(_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerIUnknownQueryInterface),
574 NewComProc(_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerIUnknownAddRef),
575 NewComProc(_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerIUnknownRelease),
576 },
577 NewComProc(_ICoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerInvoke),
578 }
579
580 func newICoreWebView2CreateCoreWebView2EnvironmentCompletedHandler(impl iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerImpl) *iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler {
581 return &iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandler{
582 vtbl: &iCoreWebView2CreateCoreWebView2EnvironmentCompletedHandlerFn,
583 impl: impl,
584 }
585 }
586
587 // ICoreWebView2PermissionRequestedEventHandler
588
589 type iCoreWebView2PermissionRequestedEventHandlerImpl interface {
590 _IUnknownImpl
591 PermissionRequested(sender *ICoreWebView2, args *iCoreWebView2PermissionRequestedEventArgs) uintptr
592 }
593
594 type iCoreWebView2PermissionRequestedEventHandlerVtbl struct {
595 _IUnknownVtbl
596 Invoke ComProc
597 }
598
599 type iCoreWebView2PermissionRequestedEventHandler struct {
600 vtbl *iCoreWebView2PermissionRequestedEventHandlerVtbl
601 impl iCoreWebView2PermissionRequestedEventHandlerImpl
602 }
603
604 func _ICoreWebView2PermissionRequestedEventHandlerIUnknownQueryInterface(this *iCoreWebView2PermissionRequestedEventHandler, refiid, object uintptr) uintptr {
605 return this.impl.QueryInterface(refiid, object)
606 }
607
608 func _ICoreWebView2PermissionRequestedEventHandlerIUnknownAddRef(this *iCoreWebView2PermissionRequestedEventHandler) uintptr {
609 return this.impl.AddRef()
610 }
611
612 func _ICoreWebView2PermissionRequestedEventHandlerIUnknownRelease(this *iCoreWebView2PermissionRequestedEventHandler) uintptr {
613 return this.impl.Release()
614 }
615
616 func _ICoreWebView2PermissionRequestedEventHandlerInvoke(this *iCoreWebView2PermissionRequestedEventHandler, sender *ICoreWebView2, args *iCoreWebView2PermissionRequestedEventArgs) uintptr {
617 return this.impl.PermissionRequested(sender, args)
618 }
619
620 var iCoreWebView2PermissionRequestedEventHandlerFn = iCoreWebView2PermissionRequestedEventHandlerVtbl{
621 _IUnknownVtbl{
622 NewComProc(_ICoreWebView2PermissionRequestedEventHandlerIUnknownQueryInterface),
623 NewComProc(_ICoreWebView2PermissionRequestedEventHandlerIUnknownAddRef),
624 NewComProc(_ICoreWebView2PermissionRequestedEventHandlerIUnknownRelease),
625 },
626 NewComProc(_ICoreWebView2PermissionRequestedEventHandlerInvoke),
627 }
628
629 func newICoreWebView2PermissionRequestedEventHandler(impl iCoreWebView2PermissionRequestedEventHandlerImpl) *iCoreWebView2PermissionRequestedEventHandler {
630 return &iCoreWebView2PermissionRequestedEventHandler{
631 vtbl: &iCoreWebView2PermissionRequestedEventHandlerFn,
632 impl: impl,
633 }
634 }
635
636 func (i *ICoreWebView2) AddWebResourceRequestedFilter(uri string, resourceContext COREWEBVIEW2_WEB_RESOURCE_CONTEXT) error {
637
638 // Convert string 'uri' to *uint16
639 _uri, err := windows.UTF16PtrFromString(uri)
640 if err != nil {
641 return err
642 }
643 hr, _, _ := i.vtbl.AddWebResourceRequestedFilter.Call(
644 uintptr(unsafe.Pointer(i)),
645 uintptr(unsafe.Pointer(_uri)),
646 uintptr(resourceContext),
647 )
648 if windows.Handle(hr) != windows.S_OK {
649 return windows.Errno(hr)
650 }
651 return nil
652 }
653
654 func (i *ICoreWebView2) OpenDevToolsWindow() error {
655
656 hr, _, _ := i.vtbl.OpenDevToolsWindow.Call(
657 uintptr(unsafe.Pointer(i)),
658 )
659 if windows.Handle(hr) != windows.S_OK {
660 return windows.Errno(hr)
661 }
662 return nil
663 }
664
664 lines GO