github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/permissions/apis_js_wasm.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright 2023 The Prime Citizens 3 4 package permissions 5 6 import ( 7 "github.com/primecitizens/pcz/std/core/abi" 8 "github.com/primecitizens/pcz/std/core/mark" 9 "github.com/primecitizens/pcz/std/ffi/js" 10 "github.com/primecitizens/pcz/std/plat/js/webext/permissions/bindings" 11 ) 12 13 type Permissions struct { 14 // Origins is "Permissions.origins" 15 // 16 // Optional 17 Origins js.Array[js.String] 18 // Permissions is "Permissions.permissions" 19 // 20 // Optional 21 Permissions js.Array[js.String] 22 23 FFI_USE bool 24 } 25 26 // FromRef calls UpdateFrom and returns a Permissions with all fields set. 27 func (p Permissions) FromRef(ref js.Ref) Permissions { 28 p.UpdateFrom(ref) 29 return p 30 } 31 32 // New creates a new Permissions in the application heap. 33 func (p Permissions) New() js.Ref { 34 return bindings.PermissionsJSLoad( 35 js.Pointer(&p), js.True, 0, 36 ) 37 } 38 39 // UpdateFrom copies value of all fields of the heap object to p. 40 func (p *Permissions) UpdateFrom(ref js.Ref) { 41 bindings.PermissionsJSStore( 42 js.Pointer(p), ref, 43 ) 44 } 45 46 // Update writes all fields of the p to the heap object referenced by ref. 47 func (p *Permissions) Update(ref js.Ref) { 48 bindings.PermissionsJSLoad( 49 js.Pointer(p), js.False, ref, 50 ) 51 } 52 53 // FreeMembers frees fields with heap reference, if recursive is true 54 // free all heap references reachable from p. 55 func (p *Permissions) FreeMembers(recursive bool) { 56 js.Free( 57 p.Origins.Ref(), 58 p.Permissions.Ref(), 59 ) 60 p.Origins = p.Origins.FromRef(js.Undefined) 61 p.Permissions = p.Permissions.FromRef(js.Undefined) 62 } 63 64 // HasFuncContains returns true if the function "WEBEXT.permissions.contains" exists. 65 func HasFuncContains() bool { 66 return js.True == bindings.HasFuncContains() 67 } 68 69 // FuncContains returns the function "WEBEXT.permissions.contains". 70 func FuncContains() (fn js.Func[func(permissions Permissions) js.Promise[js.Boolean]]) { 71 bindings.FuncContains( 72 js.Pointer(&fn), 73 ) 74 return 75 } 76 77 // Contains calls the function "WEBEXT.permissions.contains" directly. 78 func Contains(permissions Permissions) (ret js.Promise[js.Boolean]) { 79 bindings.CallContains( 80 js.Pointer(&ret), 81 js.Pointer(&permissions), 82 ) 83 84 return 85 } 86 87 // TryContains calls the function "WEBEXT.permissions.contains" 88 // in a try/catch block and returns (_, err, ok = false) when it went through 89 // the catch clause. 90 func TryContains(permissions Permissions) (ret js.Promise[js.Boolean], exception js.Any, ok bool) { 91 ok = js.True == bindings.TryContains( 92 js.Pointer(&ret), js.Pointer(&exception), 93 js.Pointer(&permissions), 94 ) 95 96 return 97 } 98 99 // HasFuncGetAll returns true if the function "WEBEXT.permissions.getAll" exists. 100 func HasFuncGetAll() bool { 101 return js.True == bindings.HasFuncGetAll() 102 } 103 104 // FuncGetAll returns the function "WEBEXT.permissions.getAll". 105 func FuncGetAll() (fn js.Func[func() js.Promise[Permissions]]) { 106 bindings.FuncGetAll( 107 js.Pointer(&fn), 108 ) 109 return 110 } 111 112 // GetAll calls the function "WEBEXT.permissions.getAll" directly. 113 func GetAll() (ret js.Promise[Permissions]) { 114 bindings.CallGetAll( 115 js.Pointer(&ret), 116 ) 117 118 return 119 } 120 121 // TryGetAll calls the function "WEBEXT.permissions.getAll" 122 // in a try/catch block and returns (_, err, ok = false) when it went through 123 // the catch clause. 124 func TryGetAll() (ret js.Promise[Permissions], exception js.Any, ok bool) { 125 ok = js.True == bindings.TryGetAll( 126 js.Pointer(&ret), js.Pointer(&exception), 127 ) 128 129 return 130 } 131 132 type OnAddedEventCallbackFunc func(this js.Ref, permissions *Permissions) js.Ref 133 134 func (fn OnAddedEventCallbackFunc) Register() js.Func[func(permissions *Permissions)] { 135 return js.RegisterCallback[func(permissions *Permissions)]( 136 fn, abi.FuncPCABIInternal(fn), 137 ) 138 } 139 140 func (fn OnAddedEventCallbackFunc) DispatchCallback( 141 targetPC uintptr, ctx *js.CallbackContext, 142 ) { 143 args := ctx.Args() 144 if len(args) != 1+1 /* js this */ || 145 targetPC != uintptr(abi.FuncPCABIInternal(fn)) { 146 js.ThrowInvalidCallbackInvocation() 147 } 148 var arg0 Permissions 149 arg0.UpdateFrom(args[0+1]) 150 defer arg0.FreeMembers(true) 151 152 if ctx.Return(fn( 153 args[0], 154 155 mark.NoEscape(&arg0), 156 )) { 157 return 158 } 159 160 js.ThrowCallbackValueNotReturned() 161 } 162 163 type OnAddedEventCallback[T any] struct { 164 Fn func(arg T, this js.Ref, permissions *Permissions) js.Ref 165 Arg T 166 } 167 168 func (cb *OnAddedEventCallback[T]) Register() js.Func[func(permissions *Permissions)] { 169 return js.RegisterCallback[func(permissions *Permissions)]( 170 cb, abi.FuncPCABIInternal(cb.Fn), 171 ) 172 } 173 174 func (cb *OnAddedEventCallback[T]) DispatchCallback( 175 targetPC uintptr, ctx *js.CallbackContext, 176 ) { 177 args := ctx.Args() 178 if len(args) != 1+1 /* js this */ || 179 targetPC != uintptr(abi.FuncPCABIInternal(cb.Fn)) { 180 js.ThrowInvalidCallbackInvocation() 181 } 182 var arg0 Permissions 183 arg0.UpdateFrom(args[0+1]) 184 defer arg0.FreeMembers(true) 185 186 if ctx.Return(cb.Fn( 187 cb.Arg, 188 args[0], 189 190 mark.NoEscape(&arg0), 191 )) { 192 return 193 } 194 195 js.ThrowCallbackValueNotReturned() 196 } 197 198 // HasFuncOnAdded returns true if the function "WEBEXT.permissions.onAdded.addListener" exists. 199 func HasFuncOnAdded() bool { 200 return js.True == bindings.HasFuncOnAdded() 201 } 202 203 // FuncOnAdded returns the function "WEBEXT.permissions.onAdded.addListener". 204 func FuncOnAdded() (fn js.Func[func(callback js.Func[func(permissions *Permissions)])]) { 205 bindings.FuncOnAdded( 206 js.Pointer(&fn), 207 ) 208 return 209 } 210 211 // OnAdded calls the function "WEBEXT.permissions.onAdded.addListener" directly. 212 func OnAdded(callback js.Func[func(permissions *Permissions)]) (ret js.Void) { 213 bindings.CallOnAdded( 214 js.Pointer(&ret), 215 callback.Ref(), 216 ) 217 218 return 219 } 220 221 // TryOnAdded calls the function "WEBEXT.permissions.onAdded.addListener" 222 // in a try/catch block and returns (_, err, ok = false) when it went through 223 // the catch clause. 224 func TryOnAdded(callback js.Func[func(permissions *Permissions)]) (ret js.Void, exception js.Any, ok bool) { 225 ok = js.True == bindings.TryOnAdded( 226 js.Pointer(&ret), js.Pointer(&exception), 227 callback.Ref(), 228 ) 229 230 return 231 } 232 233 // HasFuncOffAdded returns true if the function "WEBEXT.permissions.onAdded.removeListener" exists. 234 func HasFuncOffAdded() bool { 235 return js.True == bindings.HasFuncOffAdded() 236 } 237 238 // FuncOffAdded returns the function "WEBEXT.permissions.onAdded.removeListener". 239 func FuncOffAdded() (fn js.Func[func(callback js.Func[func(permissions *Permissions)])]) { 240 bindings.FuncOffAdded( 241 js.Pointer(&fn), 242 ) 243 return 244 } 245 246 // OffAdded calls the function "WEBEXT.permissions.onAdded.removeListener" directly. 247 func OffAdded(callback js.Func[func(permissions *Permissions)]) (ret js.Void) { 248 bindings.CallOffAdded( 249 js.Pointer(&ret), 250 callback.Ref(), 251 ) 252 253 return 254 } 255 256 // TryOffAdded calls the function "WEBEXT.permissions.onAdded.removeListener" 257 // in a try/catch block and returns (_, err, ok = false) when it went through 258 // the catch clause. 259 func TryOffAdded(callback js.Func[func(permissions *Permissions)]) (ret js.Void, exception js.Any, ok bool) { 260 ok = js.True == bindings.TryOffAdded( 261 js.Pointer(&ret), js.Pointer(&exception), 262 callback.Ref(), 263 ) 264 265 return 266 } 267 268 // HasFuncHasOnAdded returns true if the function "WEBEXT.permissions.onAdded.hasListener" exists. 269 func HasFuncHasOnAdded() bool { 270 return js.True == bindings.HasFuncHasOnAdded() 271 } 272 273 // FuncHasOnAdded returns the function "WEBEXT.permissions.onAdded.hasListener". 274 func FuncHasOnAdded() (fn js.Func[func(callback js.Func[func(permissions *Permissions)]) bool]) { 275 bindings.FuncHasOnAdded( 276 js.Pointer(&fn), 277 ) 278 return 279 } 280 281 // HasOnAdded calls the function "WEBEXT.permissions.onAdded.hasListener" directly. 282 func HasOnAdded(callback js.Func[func(permissions *Permissions)]) (ret bool) { 283 bindings.CallHasOnAdded( 284 js.Pointer(&ret), 285 callback.Ref(), 286 ) 287 288 return 289 } 290 291 // TryHasOnAdded calls the function "WEBEXT.permissions.onAdded.hasListener" 292 // in a try/catch block and returns (_, err, ok = false) when it went through 293 // the catch clause. 294 func TryHasOnAdded(callback js.Func[func(permissions *Permissions)]) (ret bool, exception js.Any, ok bool) { 295 ok = js.True == bindings.TryHasOnAdded( 296 js.Pointer(&ret), js.Pointer(&exception), 297 callback.Ref(), 298 ) 299 300 return 301 } 302 303 type OnRemovedEventCallbackFunc func(this js.Ref, permissions *Permissions) js.Ref 304 305 func (fn OnRemovedEventCallbackFunc) Register() js.Func[func(permissions *Permissions)] { 306 return js.RegisterCallback[func(permissions *Permissions)]( 307 fn, abi.FuncPCABIInternal(fn), 308 ) 309 } 310 311 func (fn OnRemovedEventCallbackFunc) DispatchCallback( 312 targetPC uintptr, ctx *js.CallbackContext, 313 ) { 314 args := ctx.Args() 315 if len(args) != 1+1 /* js this */ || 316 targetPC != uintptr(abi.FuncPCABIInternal(fn)) { 317 js.ThrowInvalidCallbackInvocation() 318 } 319 var arg0 Permissions 320 arg0.UpdateFrom(args[0+1]) 321 defer arg0.FreeMembers(true) 322 323 if ctx.Return(fn( 324 args[0], 325 326 mark.NoEscape(&arg0), 327 )) { 328 return 329 } 330 331 js.ThrowCallbackValueNotReturned() 332 } 333 334 type OnRemovedEventCallback[T any] struct { 335 Fn func(arg T, this js.Ref, permissions *Permissions) js.Ref 336 Arg T 337 } 338 339 func (cb *OnRemovedEventCallback[T]) Register() js.Func[func(permissions *Permissions)] { 340 return js.RegisterCallback[func(permissions *Permissions)]( 341 cb, abi.FuncPCABIInternal(cb.Fn), 342 ) 343 } 344 345 func (cb *OnRemovedEventCallback[T]) DispatchCallback( 346 targetPC uintptr, ctx *js.CallbackContext, 347 ) { 348 args := ctx.Args() 349 if len(args) != 1+1 /* js this */ || 350 targetPC != uintptr(abi.FuncPCABIInternal(cb.Fn)) { 351 js.ThrowInvalidCallbackInvocation() 352 } 353 var arg0 Permissions 354 arg0.UpdateFrom(args[0+1]) 355 defer arg0.FreeMembers(true) 356 357 if ctx.Return(cb.Fn( 358 cb.Arg, 359 args[0], 360 361 mark.NoEscape(&arg0), 362 )) { 363 return 364 } 365 366 js.ThrowCallbackValueNotReturned() 367 } 368 369 // HasFuncOnRemoved returns true if the function "WEBEXT.permissions.onRemoved.addListener" exists. 370 func HasFuncOnRemoved() bool { 371 return js.True == bindings.HasFuncOnRemoved() 372 } 373 374 // FuncOnRemoved returns the function "WEBEXT.permissions.onRemoved.addListener". 375 func FuncOnRemoved() (fn js.Func[func(callback js.Func[func(permissions *Permissions)])]) { 376 bindings.FuncOnRemoved( 377 js.Pointer(&fn), 378 ) 379 return 380 } 381 382 // OnRemoved calls the function "WEBEXT.permissions.onRemoved.addListener" directly. 383 func OnRemoved(callback js.Func[func(permissions *Permissions)]) (ret js.Void) { 384 bindings.CallOnRemoved( 385 js.Pointer(&ret), 386 callback.Ref(), 387 ) 388 389 return 390 } 391 392 // TryOnRemoved calls the function "WEBEXT.permissions.onRemoved.addListener" 393 // in a try/catch block and returns (_, err, ok = false) when it went through 394 // the catch clause. 395 func TryOnRemoved(callback js.Func[func(permissions *Permissions)]) (ret js.Void, exception js.Any, ok bool) { 396 ok = js.True == bindings.TryOnRemoved( 397 js.Pointer(&ret), js.Pointer(&exception), 398 callback.Ref(), 399 ) 400 401 return 402 } 403 404 // HasFuncOffRemoved returns true if the function "WEBEXT.permissions.onRemoved.removeListener" exists. 405 func HasFuncOffRemoved() bool { 406 return js.True == bindings.HasFuncOffRemoved() 407 } 408 409 // FuncOffRemoved returns the function "WEBEXT.permissions.onRemoved.removeListener". 410 func FuncOffRemoved() (fn js.Func[func(callback js.Func[func(permissions *Permissions)])]) { 411 bindings.FuncOffRemoved( 412 js.Pointer(&fn), 413 ) 414 return 415 } 416 417 // OffRemoved calls the function "WEBEXT.permissions.onRemoved.removeListener" directly. 418 func OffRemoved(callback js.Func[func(permissions *Permissions)]) (ret js.Void) { 419 bindings.CallOffRemoved( 420 js.Pointer(&ret), 421 callback.Ref(), 422 ) 423 424 return 425 } 426 427 // TryOffRemoved calls the function "WEBEXT.permissions.onRemoved.removeListener" 428 // in a try/catch block and returns (_, err, ok = false) when it went through 429 // the catch clause. 430 func TryOffRemoved(callback js.Func[func(permissions *Permissions)]) (ret js.Void, exception js.Any, ok bool) { 431 ok = js.True == bindings.TryOffRemoved( 432 js.Pointer(&ret), js.Pointer(&exception), 433 callback.Ref(), 434 ) 435 436 return 437 } 438 439 // HasFuncHasOnRemoved returns true if the function "WEBEXT.permissions.onRemoved.hasListener" exists. 440 func HasFuncHasOnRemoved() bool { 441 return js.True == bindings.HasFuncHasOnRemoved() 442 } 443 444 // FuncHasOnRemoved returns the function "WEBEXT.permissions.onRemoved.hasListener". 445 func FuncHasOnRemoved() (fn js.Func[func(callback js.Func[func(permissions *Permissions)]) bool]) { 446 bindings.FuncHasOnRemoved( 447 js.Pointer(&fn), 448 ) 449 return 450 } 451 452 // HasOnRemoved calls the function "WEBEXT.permissions.onRemoved.hasListener" directly. 453 func HasOnRemoved(callback js.Func[func(permissions *Permissions)]) (ret bool) { 454 bindings.CallHasOnRemoved( 455 js.Pointer(&ret), 456 callback.Ref(), 457 ) 458 459 return 460 } 461 462 // TryHasOnRemoved calls the function "WEBEXT.permissions.onRemoved.hasListener" 463 // in a try/catch block and returns (_, err, ok = false) when it went through 464 // the catch clause. 465 func TryHasOnRemoved(callback js.Func[func(permissions *Permissions)]) (ret bool, exception js.Any, ok bool) { 466 ok = js.True == bindings.TryHasOnRemoved( 467 js.Pointer(&ret), js.Pointer(&exception), 468 callback.Ref(), 469 ) 470 471 return 472 } 473 474 // HasFuncRemove returns true if the function "WEBEXT.permissions.remove" exists. 475 func HasFuncRemove() bool { 476 return js.True == bindings.HasFuncRemove() 477 } 478 479 // FuncRemove returns the function "WEBEXT.permissions.remove". 480 func FuncRemove() (fn js.Func[func(permissions Permissions) js.Promise[js.Boolean]]) { 481 bindings.FuncRemove( 482 js.Pointer(&fn), 483 ) 484 return 485 } 486 487 // Remove calls the function "WEBEXT.permissions.remove" directly. 488 func Remove(permissions Permissions) (ret js.Promise[js.Boolean]) { 489 bindings.CallRemove( 490 js.Pointer(&ret), 491 js.Pointer(&permissions), 492 ) 493 494 return 495 } 496 497 // TryRemove calls the function "WEBEXT.permissions.remove" 498 // in a try/catch block and returns (_, err, ok = false) when it went through 499 // the catch clause. 500 func TryRemove(permissions Permissions) (ret js.Promise[js.Boolean], exception js.Any, ok bool) { 501 ok = js.True == bindings.TryRemove( 502 js.Pointer(&ret), js.Pointer(&exception), 503 js.Pointer(&permissions), 504 ) 505 506 return 507 } 508 509 // HasFuncRequest returns true if the function "WEBEXT.permissions.request" exists. 510 func HasFuncRequest() bool { 511 return js.True == bindings.HasFuncRequest() 512 } 513 514 // FuncRequest returns the function "WEBEXT.permissions.request". 515 func FuncRequest() (fn js.Func[func(permissions Permissions) js.Promise[js.Boolean]]) { 516 bindings.FuncRequest( 517 js.Pointer(&fn), 518 ) 519 return 520 } 521 522 // Request calls the function "WEBEXT.permissions.request" directly. 523 func Request(permissions Permissions) (ret js.Promise[js.Boolean]) { 524 bindings.CallRequest( 525 js.Pointer(&ret), 526 js.Pointer(&permissions), 527 ) 528 529 return 530 } 531 532 // TryRequest calls the function "WEBEXT.permissions.request" 533 // in a try/catch block and returns (_, err, ok = false) when it went through 534 // the catch clause. 535 func TryRequest(permissions Permissions) (ret js.Promise[js.Boolean], exception js.Any, ok bool) { 536 ok = js.True == bindings.TryRequest( 537 js.Pointer(&ret), js.Pointer(&exception), 538 js.Pointer(&permissions), 539 ) 540 541 return 542 }