diff options
author | Teddy Wing | 2023-11-16 20:44:47 +0100 |
---|---|---|
committer | Teddy Wing | 2023-11-16 20:44:47 +0100 |
commit | bbbf957f675c9373db184052b9f21ddfd552aae0 (patch) | |
tree | b9ce731f9f555f934ef25bb1cfba7916c0c9d9dd /internal | |
parent | d5d9c08cc8bb5d8b77e217f7fb407688453a7c5f (diff) | |
download | swextreload-bbbf957f675c9373db184052b9f21ddfd552aae0.tar.bz2 |
swextreload: Experiment with MV2 tab reloading
Trying to set things up to not get targets again when reloading the
current tab.
Diffstat (limited to 'internal')
-rw-r--r-- | internal/swextreload.go | 108 |
1 files changed, 72 insertions, 36 deletions
diff --git a/internal/swextreload.go b/internal/swextreload.go index 3b687ea..e8af38a 100644 --- a/internal/swextreload.go +++ b/internal/swextreload.go @@ -26,6 +26,7 @@ func Reload( extensionIDs []string, shouldReloadTab bool, ) error { + var targets []*target.Info var err error allocatorContext, cancel := chromedp.NewRemoteAllocator( @@ -35,7 +36,7 @@ func Reload( defer cancel() for _, extensionID := range extensionIDs { - err = reloadExtension( + targets, err = reloadExtension( allocatorContext, extensionID, shouldReloadTab, @@ -52,7 +53,22 @@ func Reload( if shouldReloadTab { time.Sleep(200 * time.Millisecond) - err = reloadTab(allocatorContext, extensionIDs[0]) + extensionURL := "chrome-extension://" + extensionIDs[0] + "/" + + var firstExtensionTarget *target.Info + for _, target := range targets { + if strings.HasPrefix(target.URL, extensionURL) { + firstExtensionTarget = target + + break + } + } + + err = reloadTab( + allocatorContext, + extensionIDs[0], + isExtensionManifestV2(firstExtensionTarget), + ) if err != nil { return err } @@ -67,13 +83,13 @@ func reloadExtension( ctx context.Context, extensionID string, shouldReloadTab bool, -) error { +) ([]*target.Info, error) { ctx, cancel := chromedp.NewContext(ctx) defer cancel() targets, err := chromedp.Targets(ctx) if err != nil { - return fmt.Errorf("swextreload: can't get targets: %v", err) + return targets, fmt.Errorf("swextreload: can't get targets: %v", err) } if isDebug { @@ -97,63 +113,79 @@ func reloadExtension( targetCtx, cancel := chromedp.NewContext(ctx, chromedp.WithTargetID(targetID)) defer cancel() + log.Printf("Connected to target") + var runtimeResp []byte err = chromedp.Run( targetCtx, - chromedp.Evaluate(`chrome.runtime.reload();`, nil), + chromedp.Evaluate(`chrome.runtime.reload();`, &runtimeResp), ) if err != nil { - return fmt.Errorf( - "swextreload: error reloading extension '%s': %v", - extensionID, - err, - ) + return targets, + fmt.Errorf( + "swextreload: error reloading extension '%s': %v", + extensionID, + err, + ) } + log.Printf("Reloaded extension") + if isDebug { log.Printf("Runtime: %v", string(runtimeResp)) } - return nil + return targets, nil } -func reloadTab(ctx context.Context, extensionID string) error { +func reloadTab( + ctx context.Context, + extensionID string, + isExtensionManifestV2 bool, +) error { ctx, cancel := chromedp.NewContext(ctx) defer cancel() - targets, err := chromedp.Targets(ctx) - if err != nil { - return fmt.Errorf( - "swextreload: can't get targets for '%s' tab reload: %v", - extensionID, - err, - ) - } - if isDebug { - log.Printf("Targets: %#v", targets) + log.Printf("Reload tab (Manifest V2: %t)", isExtensionManifestV2) } - extensionURL := "chrome-extension://" + extensionID + "/" + if !isExtensionManifestV2 { + // TODO: If MV2, then don't re-attach, only do it if "service_worker" + targets, err := chromedp.Targets(ctx) + if err != nil { + return fmt.Errorf( + "swextreload: can't get targets for '%s' tab reload: %v", + extensionID, + err, + ) + } - var targetID target.ID - for _, target := range targets { - if strings.HasPrefix(target.URL, extensionURL) { - if isDebug { - log.Printf("Target: %#v", target) - } + if isDebug { + log.Printf("Targets: %#v", targets) + } - targetID = target.TargetID - break + extensionURL := "chrome-extension://" + extensionID + "/" + + var targetID target.ID + for _, target := range targets { + if strings.HasPrefix(target.URL, extensionURL) { + if isDebug { + log.Printf("Target: %#v", target) + } + + targetID = target.TargetID + break + } } - } - targetCtx, cancel := chromedp.NewContext(ctx, chromedp.WithTargetID(targetID)) - defer cancel() + ctx, cancel = chromedp.NewContext(ctx, chromedp.WithTargetID(targetID)) + defer cancel() + } var tabsResp []byte - err = chromedp.Run( - targetCtx, + err := chromedp.Run( + ctx, chromedp.Evaluate(`chrome.tabs.reload();`, nil), ) if err != nil { @@ -170,3 +202,7 @@ func reloadTab(ctx context.Context, extensionID string) error { return nil } + +func isExtensionManifestV2(target *target.Info) bool { + return target.Type == "background_page" +} |