mirror of
https://github.com/karust/openserp.git
synced 2026-08-05 16:53:54 +08:00
fix: browser request blocking cleanup panic
This commit is contained in:
@@ -153,6 +153,21 @@ func blockedResourceTypeSet(types []proto.NetworkResourceType) map[proto.Network
|
||||
return out
|
||||
}
|
||||
|
||||
func proxyAuthFetchPatterns() []*proto.FetchRequestPattern {
|
||||
return []*proto.FetchRequestPattern{
|
||||
{
|
||||
URLPattern: "http://*/*",
|
||||
ResourceType: proto.NetworkResourceTypeDocument,
|
||||
RequestStage: proto.FetchRequestStageRequest,
|
||||
},
|
||||
{
|
||||
URLPattern: "https://*/*",
|
||||
ResourceType: proto.NetworkResourceTypeDocument,
|
||||
RequestStage: proto.FetchRequestStageRequest,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (b *Browser) configureRequestBlocking(ctx context.Context, page *rod.Page) error {
|
||||
if !b.BlockTrackers && len(b.BlockResourceTypes) == 0 {
|
||||
return nil
|
||||
@@ -198,7 +213,9 @@ func (b *Browser) configureRequestBlocking(ctx context.Context, page *rod.Page)
|
||||
// Stop the router when the page context is done to avoid goroutine leak.
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
router.MustStop()
|
||||
if err := router.Stop(); err != nil && !errors.Is(err, context.Canceled) && !isBrowserClosedError(err) {
|
||||
WithRequest(ctx).WithError(err).Debug("Stop request-blocking router failed")
|
||||
}
|
||||
}()
|
||||
|
||||
return nil
|
||||
@@ -491,7 +508,10 @@ func (b *Browser) startProxyAuthListener(browser *rod.Browser) error {
|
||||
}()
|
||||
|
||||
<-started
|
||||
if err := (proto.FetchEnable{HandleAuthRequests: true}).Call(browser); err != nil {
|
||||
if err := (proto.FetchEnable{
|
||||
Patterns: proxyAuthFetchPatterns(),
|
||||
HandleAuthRequests: true,
|
||||
}).Call(browser); err != nil {
|
||||
cancel()
|
||||
<-stopped
|
||||
state.authCancel = nil
|
||||
|
||||
@@ -51,6 +51,25 @@ func TestShouldBlockResourceType(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestProxyAuthFetchPatternsOnlyInterceptDocuments(t *testing.T) {
|
||||
patterns := proxyAuthFetchPatterns()
|
||||
if len(patterns) != 2 {
|
||||
t.Fatalf("expected 2 proxy auth fetch patterns, got %d", len(patterns))
|
||||
}
|
||||
|
||||
for _, pattern := range patterns {
|
||||
if pattern.URLPattern != "http://*/*" && pattern.URLPattern != "https://*/*" {
|
||||
t.Fatalf("unexpected proxy auth URL pattern: %q", pattern.URLPattern)
|
||||
}
|
||||
if pattern.ResourceType != proto.NetworkResourceTypeDocument {
|
||||
t.Fatalf("expected document-only proxy auth interception, got %s", pattern.ResourceType)
|
||||
}
|
||||
if pattern.RequestStage != proto.FetchRequestStageRequest {
|
||||
t.Fatalf("expected request-stage proxy auth interception, got %s", pattern.RequestStage)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseBlockedResourceTypes(t *testing.T) {
|
||||
got, err := ParseBlockedResourceTypes("image,font,css,js,media")
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user