diff options
author | Teddy Wing | 2023-11-25 16:39:26 +0100 |
---|---|---|
committer | Teddy Wing | 2023-11-25 16:39:26 +0100 |
commit | 49f45511c8f1864475d2ab33ccf3cda39548c91d (patch) | |
tree | d2c00cf8f0a32eaa67e8f5ef0a63a57a63029768 | |
parent | 58e21e03dc65713675d6dc33b25504807c402de9 (diff) | |
download | swextreload-49f45511c8f1864475d2ab33ccf3cda39548c91d.tar.bz2 |
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.
-rw-r--r-- | internal/swextreload.go | 36 |
1 files 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 |