1package cef
2
3import (
4 "context"
5 "testing"
6
7 "github.com/stretchr/testify/assert"
8)
9
10func TestPopupLifecycleCallbacksCanBeDisarmed(t *testing.T) {
11 wv := &WebView{inputAttached: true}
12 readyCalls := 0
13 lifecycleCloseCalls := 0
14 oauthCloseCalls := 0
15 wv.SetOnReadyToShow(func() { readyCalls++ })
16 wv.SetOnClose(func() { lifecycleCloseCalls++ })
17 wv.AddCloseCallback(func() { oauthCloseCalls++ })
18
19 wv.SetOnReadyToShow(nil)
20 wv.SetOnClose(nil)
21 wv.fireReadyToShow()
22 wv.runCloseCallbacks()
23
24 assert.Zero(t, readyCalls)
25 assert.Zero(t, lifecycleCloseCalls)
26 assert.Equal(t, 1, oauthCloseCalls)
27}
28
29func TestOnBeforePopupAborted_ReleasesUnrecoverablePaneHostedPopup(t *testing.T) {
30 parent := &WebView{ctx: context.Background()}
31 popup := &WebView{ctx: context.Background(), nativePopupCandidate: true, nativePopupParent: parent, nativePopupID: 77}
32 closeCalls := 0
33 popup.SetOnClose(func() { closeCalls++ })
34 parent.trackPendingNativePopup(77, popup)
35
36 (&handlerSet{wv: parent}).OnBeforePopupAborted(nil, 77)
37
38 assert.Equal(t, 1, closeCalls)
39 assert.True(t, popup.IsDestroyed())
40 assert.Nil(t, parent.takePendingNativePopup(77))
41}
42
43func TestOnBeforePopupAborted_KeepsRecoverablePopupForDirectFallback(t *testing.T) {
44 parent := &WebView{ctx: context.Background()}
45 popup := &WebView{
46 ctx: context.Background(), nativePopupCandidate: true, nativePopupParent: parent, nativePopupID: 78,
47 pendingCreate: &pendingBrowserCreate{},
48 }
49 closeCalls := 0
50 popup.SetOnClose(func() { closeCalls++ })
51 parent.trackPendingNativePopup(78, popup)
52
53 (&handlerSet{wv: parent}).OnBeforePopupAborted(nil, 78)
54
55 assert.Zero(t, closeCalls)
56 assert.False(t, popup.IsDestroyed())
57 assert.False(t, popup.isNativePopupCandidate())
58}
59
60func TestOnBeforePopupAborted_LeavesNativeHostedPopupToHost(t *testing.T) {
61 parent := &WebView{ctx: context.Background()}
62 popup := &WebView{ctx: context.Background(), nativePopupCandidate: true, nativePopupParent: parent, nativePopupID: 79}
63 closeCalls := 0
64 popup.SetOnClose(func() { closeCalls++ })
65 popup.SetNativePopupHostAbort(func() {})
66 parent.trackPendingNativePopup(79, popup)
67
68 (&handlerSet{wv: parent}).OnBeforePopupAborted(nil, 79)
69
70 assert.Zero(t, closeCalls)
71 assert.False(t, popup.IsDestroyed())
72}
73
74func TestOnBeforePopupAborted_UnknownPopupIsNoop(_ *testing.T) {
75 (&handlerSet{wv: &WebView{ctx: context.Background()}}).OnBeforePopupAborted(nil, 123)
76}