diff options
| -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 | 
