From 49f45511c8f1864475d2ab33ccf3cda39548c91d Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sat, 25 Nov 2023 16:39:26 +0100 Subject: swextreload: Choose the first non-nil target to reload the current tab It's possible for the first extension target to be nil. If that happens, keep going through the list of input extensions until we find a target that isn't nil. --- internal/swextreload.go | 36 ++++++++++++++++++++++-------------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/internal/swextreload.go b/internal/swextreload.go index 3d4cd88..0b09a5e 100644 --- a/internal/swextreload.go +++ b/internal/swextreload.go @@ -62,38 +62,46 @@ func Reload( } if shouldReloadTab { - extensionURL := "chrome-extension://" + extensionIDs[0] + "/" + var firstAvailableExtensionTarget *target.Info - var firstExtensionTarget *target.Info + targetsLoop: for _, target := range targets { - if strings.HasPrefix(target.URL, extensionURL) { - firstExtensionTarget = target + for _, extensionID := range extensionIDs { + extensionURL := "chrome-extension://" + extensionID + "/" - logDebugf( - "firstExtensionTarget %s: %#v", - extensionURL, - firstExtensionTarget, - ) + if strings.HasPrefix(target.URL, extensionURL) { + // Keep going until we find an available target. + if target == nil { + continue targetsLoop + } - break + firstAvailableExtensionTarget = target + + logDebugf( + "firstAvailableExtensionTarget %s: %#v", + extensionURL, + firstAvailableExtensionTarget, + ) + + break targetsLoop + } } } - if firstExtensionTarget == nil { - // TODO: continue loop until target != null + if firstAvailableExtensionTarget == nil { return errors.New("swextreload: can't reload tab, no target available") } // In Manifest V3, we need to wait until the service worker reinstalls // before we can re-attach to it. - if !isExtensionManifestV2(firstExtensionTarget) { + if !isExtensionManifestV2(firstAvailableExtensionTarget) { time.Sleep(200 * time.Millisecond) } err = reloadTab( allocatorContext, extensionIDs[0], - firstExtensionTarget, + firstAvailableExtensionTarget, ) if err != nil { return err -- cgit v1.2.3