chore(deps): bump purego-cef to v0.14.1
v0.14.0 pinned the CEF API 15000 contract and fixed the struct ABI corruption that made BrowserSettings.BackgroundColor land on chrome_status_bubble (transparent windowless canvas). v0.14.1 restores the global function bindings dropped by that regeneration (DictionaryValueCreate, V8ContextGetCurrentContext, all *Create factories) and fixes global factory ownership so created objects are adopted without a leaked reference. This makes the white-canvas fix in this branch effective: the opaque white BrowserSettings.BackgroundColor now actually reaches libcef.
- commit
- 902c404508da47722a324d2f14b2a4cfc04a2812
- author
- brice · · 2026-07-21 19:07 UTC
- parent
- 1dc7dd4
- signature
- GPG Verified
CD88F9E564E0102646FB6077A1A07C7C7C3E349D· arch-gpg Verified for the committer email
75 files · +1836 -1983
M go.mod +1 -1
| @@ -6,7 +6,7 @@ require ( | |||
| 6 | 6 | github.com/a-h/templ v0.3.1020 | |
| 7 | 7 | github.com/andybalholm/brotli v1.2.2 | |
| 8 | 8 | github.com/bnema/purego v0.11.0-bnema.4 | |
| 9 | - | github.com/bnema/purego-cef v0.13.4 | |
| 9 | + | github.com/bnema/purego-cef v0.14.1 | |
| 10 | 10 | github.com/bnema/purego-cef2gtk v0.8.5 | |
| 11 | 11 | github.com/bnema/purego-pipewire v0.1.5 | |
| 12 | 12 | github.com/bnema/purego-sqlite v0.1.4 | |
| @@ -6,7 +6,7 @@ require ( | |||||
| 6 | github.com/a-h/templ v0.3.1020 | 6 | github.com/a-h/templ v0.3.1020 | ||
| 7 | github.com/andybalholm/brotli v1.2.2 | 7 | github.com/andybalholm/brotli v1.2.2 | ||
| 8 | github.com/bnema/purego v0.11.0-bnema.4 | 8 | github.com/bnema/purego v0.11.0-bnema.4 | ||
| 9 | - | github.com/bnema/purego-cef v0.13.4 | 9 | + | github.com/bnema/purego-cef v0.14.1 |
| 10 | github.com/bnema/purego-cef2gtk v0.8.5 | 10 | github.com/bnema/purego-cef2gtk v0.8.5 | ||
| 11 | github.com/bnema/purego-pipewire v0.1.5 | 11 | github.com/bnema/purego-pipewire v0.1.5 | ||
| 12 | github.com/bnema/purego-sqlite v0.1.4 | 12 | github.com/bnema/purego-sqlite v0.1.4 | ||
M go.sum +2 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_browser_gen.go +15 -2 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_command_line_gen.go +15 -2 generated file: collapsed
A vendor/github.com/bnema/purego-cef/cef/cef_component_updater_gen.go +323 -0 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_cookie_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_drag_data_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_image_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_media_router_gen.go +24 -41 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_menu_model_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_parser_gen.go +10 -4 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_preference_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_print_settings_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_process_message_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_request_context_gen.go +16 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_request_gen.go +42 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_resource_bundle_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_response_gen.go +14 -1 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_shared_memory_region_gen.go +3 -3 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_shared_process_message_builder_gen.go +20 -4 generated file: collapsed
M vendor/github.com/bnema/purego-cef/cef/cef_stream_gen.go +34 -5
| @@ -323,6 +323,19 @@ func wrapStreamReader(ptr unsafe.Pointer) StreamReader { | |||
| 323 | 323 | return impl | |
| 324 | 324 | } | |
| 325 | 325 | ||
| 326 | + | // takeStreamReader adopts a CEF StreamReader pointer whose reference is already owned by | |
| 327 | + | // the caller (as returned by a global factory function). Unlike wrapStreamReader it | |
| 328 | + | // does NOT call AddRef, because the C API already transferred one reference to us. | |
| 329 | + | func takeStreamReader(ptr unsafe.Pointer) StreamReader { | |
| 330 | + | if ptr == nil { | |
| 331 | + | return nil | |
| 332 | + | } | |
| 333 | + | r := (*capi.CEFStreamReaderT)(ptr) | |
| 334 | + | impl := &streamReaderImpl{rawPtr: r} | |
| 335 | + | runtime.SetFinalizer(impl, (*streamReaderImpl).Release) | |
| 336 | + | return impl | |
| 337 | + | } | |
| 338 | + | ||
| 326 | 339 | // WriteHandler Structure the client can implement to provide a custom stream writer. The functions of this structure may be called on any thread. | |
| 327 | 340 | type WriteHandler = portin.WriteHandler | |
| 328 | 341 | ||
| @@ -634,24 +647,40 @@ func wrapStreamWriter(ptr unsafe.Pointer) StreamWriter { | |||
| 634 | 647 | return impl | |
| 635 | 648 | } | |
| 636 | 649 | ||
| 650 | + | // takeStreamWriter adopts a CEF StreamWriter pointer whose reference is already owned by | |
| 651 | + | // the caller (as returned by a global factory function). Unlike wrapStreamWriter it | |
| 652 | + | // does NOT call AddRef, because the C API already transferred one reference to us. | |
| 653 | + | func takeStreamWriter(ptr unsafe.Pointer) StreamWriter { | |
| 654 | + | if ptr == nil { | |
| 655 | + | return nil | |
| 656 | + | } | |
| 657 | + | r := (*capi.CEFStreamWriterT)(ptr) | |
| 658 | + | impl := &streamWriterImpl{rawPtr: r} | |
| 659 | + | runtime.SetFinalizer(impl, (*streamWriterImpl).Release) | |
| 660 | + | return impl | |
| 661 | + | } | |
| 662 | + | ||
| 637 | 663 | // StreamReaderCreateForFile Create a new cef_stream_reader_t object from a file. | |
| 638 | 664 | func StreamReaderCreateForFile(filename string) StreamReader { | |
| 639 | 665 | filenameStr := cefString(filename) | |
| 640 | 666 | defer freeCefString(&filenameStr) | |
| 641 | 667 | ret := capi.CEFStreamReaderCreateForFile(unsafe.Pointer(&filenameStr)) | |
| 642 | - | return wrapStreamReader(ret) | |
| 668 | + | return takeStreamReader(ret) | |
| 643 | 669 | } | |
| 644 | 670 | ||
| 645 | 671 | // StreamReaderCreateForData Create a new cef_stream_reader_t object from data. | |
| 646 | 672 | func StreamReaderCreateForData(data unsafe.Pointer, size int) StreamReader { | |
| 673 | + | if size < 0 { | |
| 674 | + | return nil | |
| 675 | + | } | |
| 647 | 676 | ret := capi.CEFStreamReaderCreateForData(data, uintptr(size)) | |
| 648 | - | return wrapStreamReader(ret) | |
| 677 | + | return takeStreamReader(ret) | |
| 649 | 678 | } | |
| 650 | 679 | ||
| 651 | 680 | // StreamReaderCreateForHandler Create a new cef_stream_reader_t object from a custom handler. | |
| 652 | 681 | func StreamReaderCreateForHandler(handler ReadHandler) StreamReader { | |
| 653 | 682 | ret := capi.CEFStreamReaderCreateForHandler(extractOrWrapRawPointer(handler, func() any { return NewReadHandler(handler) })) | |
| 654 | - | return wrapStreamReader(ret) | |
| 683 | + | return takeStreamReader(ret) | |
| 655 | 684 | } | |
| 656 | 685 | ||
| 657 | 686 | // StreamWriterCreateForFile Create a new cef_stream_writer_t object for a file. | |
| @@ -659,11 +688,11 @@ func StreamWriterCreateForFile(filename string) StreamWriter { | |||
| 659 | 688 | filenameStr := cefString(filename) | |
| 660 | 689 | defer freeCefString(&filenameStr) | |
| 661 | 690 | ret := capi.CEFStreamWriterCreateForFile(unsafe.Pointer(&filenameStr)) | |
| 662 | - | return wrapStreamWriter(ret) | |
| 691 | + | return takeStreamWriter(ret) | |
| 663 | 692 | } | |
| 664 | 693 | ||
| 665 | 694 | // StreamWriterCreateForHandler Create a new cef_stream_writer_t object for a custom handler. | |
| 666 | 695 | func StreamWriterCreateForHandler(handler WriteHandler) StreamWriter { | |
| 667 | 696 | ret := capi.CEFStreamWriterCreateForHandler(extractOrWrapRawPointer(handler, func() any { return NewWriteHandler(handler) })) | |
| 668 | - | return wrapStreamWriter(ret) | |
| 697 | + | return takeStreamWriter(ret) | |
| 669 | 698 | } | |
| @@ -323,6 +323,19 @@ func wrapStreamReader(ptr unsafe.Pointer) StreamReader { | |||||
| 323 | return impl | 323 | return impl | ||
| 324 | } | 324 | } | ||
| 325 | 325 | ||||
| 326 | + | // takeStreamReader adopts a CEF StreamReader pointer whose reference is already owned by | |||
| 327 | + | // the caller (as returned by a global factory function). Unlike wrapStreamReader it | |||
| 328 | + | // does NOT call AddRef, because the C API already transferred one reference to us. | |||
| 329 | + | func takeStreamReader(ptr unsafe.Pointer) StreamReader { | |||
| 330 | + | if ptr == nil { | |||
| 331 | + | return nil | |||
| 332 | + | } | |||
| 333 | + | r := (*capi.CEFStreamReaderT)(ptr) | |||
| 334 | + | impl := &streamReaderImpl{rawPtr: r} | |||
| 335 | + | runtime.SetFinalizer(impl, (*streamReaderImpl).Release) | |||
| 336 | + | return impl | |||
| 337 | + | } | |||
| 338 | + | ||||
| 326 | // WriteHandler Structure the client can implement to provide a custom stream writer. The functions of this structure may be called on any thread. | 339 | // WriteHandler Structure the client can implement to provide a custom stream writer. The functions of this structure may be called on any thread. | ||
| 327 | type WriteHandler = portin.WriteHandler | 340 | type WriteHandler = portin.WriteHandler | ||
| 328 | 341 | ||||
| @@ -634,24 +647,40 @@ func wrapStreamWriter(ptr unsafe.Pointer) StreamWriter { | |||||
| 634 | return impl | 647 | return impl | ||
| 635 | } | 648 | } | ||
| 636 | 649 | ||||
| 650 | + | // takeStreamWriter adopts a CEF StreamWriter pointer whose reference is already owned by | |||
| 651 | + | // the caller (as returned by a global factory function). Unlike wrapStreamWriter it | |||
| 652 | + | // does NOT call AddRef, because the C API already transferred one reference to us. | |||
| 653 | + | func takeStreamWriter(ptr unsafe.Pointer) StreamWriter { | |||
| 654 | + | if ptr == nil { | |||
| 655 | + | return nil | |||
| 656 | + | } | |||
| 657 | + | r := (*capi.CEFStreamWriterT)(ptr) | |||
| 658 | + | impl := &streamWriterImpl{rawPtr: r} | |||
| 659 | + | runtime.SetFinalizer(impl, (*streamWriterImpl).Release) | |||
| 660 | + | return impl | |||
| 661 | + | } | |||
| 662 | + | ||||
| 637 | // StreamReaderCreateForFile Create a new cef_stream_reader_t object from a file. | 663 | // StreamReaderCreateForFile Create a new cef_stream_reader_t object from a file. | ||
| 638 | func StreamReaderCreateForFile(filename string) StreamReader { | 664 | func StreamReaderCreateForFile(filename string) StreamReader { | ||
| 639 | filenameStr := cefString(filename) | 665 | filenameStr := cefString(filename) | ||
| 640 | defer freeCefString(&filenameStr) | 666 | defer freeCefString(&filenameStr) | ||
| 641 | ret := capi.CEFStreamReaderCreateForFile(unsafe.Pointer(&filenameStr)) | 667 | ret := capi.CEFStreamReaderCreateForFile(unsafe.Pointer(&filenameStr)) | ||
| 642 | - | return wrapStreamReader(ret) | 668 | + | return takeStreamReader(ret) |
| 643 | } | 669 | } | ||
| 644 | 670 | ||||
| 645 | // StreamReaderCreateForData Create a new cef_stream_reader_t object from data. | 671 | // StreamReaderCreateForData Create a new cef_stream_reader_t object from data. | ||
| 646 | func StreamReaderCreateForData(data unsafe.Pointer, size int) StreamReader { | 672 | func StreamReaderCreateForData(data unsafe.Pointer, size int) StreamReader { | ||
| 673 | + | if size < 0 { | |||
| 674 | + | return nil | |||
| 675 | + | } | |||
| 647 | ret := capi.CEFStreamReaderCreateForData(data, uintptr(size)) | 676 | ret := capi.CEFStreamReaderCreateForData(data, uintptr(size)) | ||
| 648 | - | return wrapStreamReader(ret) | 677 | + | return takeStreamReader(ret) |
| 649 | } | 678 | } | ||
| 650 | 679 | ||||
| 651 | // StreamReaderCreateForHandler Create a new cef_stream_reader_t object from a custom handler. | 680 | // StreamReaderCreateForHandler Create a new cef_stream_reader_t object from a custom handler. | ||
| 652 | func StreamReaderCreateForHandler(handler ReadHandler) StreamReader { | 681 | func StreamReaderCreateForHandler(handler ReadHandler) StreamReader { | ||
| 653 | ret := capi.CEFStreamReaderCreateForHandler(extractOrWrapRawPointer(handler, func() any { return NewReadHandler(handler) })) | 682 | ret := capi.CEFStreamReaderCreateForHandler(extractOrWrapRawPointer(handler, func() any { return NewReadHandler(handler) })) | ||
| 654 | - | return wrapStreamReader(ret) | 683 | + | return takeStreamReader(ret) |
| 655 | } | 684 | } | ||
| 656 | 685 | ||||
| 657 | // StreamWriterCreateForFile Create a new cef_stream_writer_t object for a file. | 686 | // StreamWriterCreateForFile Create a new cef_stream_writer_t object for a file. | ||
| @@ -659,11 +688,11 @@ func StreamWriterCreateForFile(filename string) StreamWriter { | |||||
| 659 | filenameStr := cefString(filename) | 688 | filenameStr := cefString(filename) | ||
| 660 | defer freeCefString(&filenameStr) | 689 | defer freeCefString(&filenameStr) | ||
| 661 | ret := capi.CEFStreamWriterCreateForFile(unsafe.Pointer(&filenameStr)) | 690 | ret := capi.CEFStreamWriterCreateForFile(unsafe.Pointer(&filenameStr)) | ||
| 662 | - | return wrapStreamWriter(ret) | 691 | + | return takeStreamWriter(ret) |
| 663 | } | 692 | } | ||
| 664 | 693 | ||||
| 665 | // StreamWriterCreateForHandler Create a new cef_stream_writer_t object for a custom handler. | 694 | // StreamWriterCreateForHandler Create a new cef_stream_writer_t object for a custom handler. | ||
| 666 | func StreamWriterCreateForHandler(handler WriteHandler) StreamWriter { | 695 | func StreamWriterCreateForHandler(handler WriteHandler) StreamWriter { | ||
| 667 | ret := capi.CEFStreamWriterCreateForHandler(extractOrWrapRawPointer(handler, func() any { return NewWriteHandler(handler) })) | 696 | ret := capi.CEFStreamWriterCreateForHandler(extractOrWrapRawPointer(handler, func() any { return NewWriteHandler(handler) })) | ||
| 668 | - | return wrapStreamWriter(ret) | 697 | + | return takeStreamWriter(ret) |
| 669 | } | 698 | } | ||