aboutsummaryrefslogtreecommitdiffstats
path: root/internal/swextreload.go
diff options
context:
space:
mode:
authorTeddy Wing2023-11-14 22:04:22 +0100
committerTeddy Wing2023-11-14 22:04:22 +0100
commitd5d9c08cc8bb5d8b77e217f7fb407688453a7c5f (patch)
tree93c7e29852e0f18b4e3e4b0d5a46f1eb51903430 /internal/swextreload.go
parentc6cffd186acc83b8a616f5137997a74ab6aac143 (diff)
downloadswextreload-d5d9c08cc8bb5d8b77e217f7fb407688453a7c5f.tar.bz2
swextreload: Try to split out tab reloading into a separate function
Trying to make it so you can reload the tab only once after reloading all extensions. This still works for a single Manifest V3 extension, but I'm having trouble getting a Manifest V2 extension to reload properly.
Diffstat (limited to 'internal/swextreload.go')
-rw-r--r--internal/swextreload.go105
1 files changed, 60 insertions, 45 deletions
diff --git a/internal/swextreload.go b/internal/swextreload.go
index 97626db..3b687ea 100644
--- a/internal/swextreload.go
+++ b/internal/swextreload.go
@@ -28,9 +28,15 @@ func Reload(
) error {
var err error
+ allocatorContext, cancel := chromedp.NewRemoteAllocator(
+ context.Background(),
+ url,
+ )
+ defer cancel()
+
for _, extensionID := range extensionIDs {
err = reloadExtension(
- url,
+ allocatorContext,
extensionID,
shouldReloadTab,
)
@@ -43,23 +49,26 @@ func Reload(
// extensions.
}
+ if shouldReloadTab {
+ time.Sleep(200 * time.Millisecond)
+
+ err = reloadTab(allocatorContext, extensionIDs[0])
+ if err != nil {
+ return err
+ }
+ }
+
return nil
}
// reloadExtension reloads the extension extensionID. If shouldReloadTab is
// true, also reload the current tab.
func reloadExtension(
- url string,
+ ctx context.Context,
extensionID string,
shouldReloadTab bool,
) error {
- allocatorContext, cancel := chromedp.NewRemoteAllocator(
- context.Background(),
- url,
- )
- defer cancel()
-
- ctx, cancel := chromedp.NewContext(allocatorContext)
+ ctx, cancel := chromedp.NewContext(ctx)
defer cancel()
targets, err := chromedp.Targets(ctx)
@@ -105,52 +114,58 @@ func reloadExtension(
log.Printf("Runtime: %v", string(runtimeResp))
}
- if shouldReloadTab {
- time.Sleep(200 * time.Millisecond)
+ return nil
+}
- targets, err = chromedp.Targets(ctx)
- if err != nil {
- return fmt.Errorf(
- "swextreload: can't get targets for '%s' tab reload: %v",
- extensionID,
- err,
- )
- }
+func reloadTab(ctx context.Context, extensionID string) error {
+ ctx, cancel := chromedp.NewContext(ctx)
+ defer cancel()
- if isDebug {
- log.Printf("Targets: %#v", targets)
- }
+ 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)
+ }
- for _, target := range targets {
- if strings.HasPrefix(target.URL, extensionURL) {
- if isDebug {
- log.Printf("Target: %#v", target)
- }
+ extensionURL := "chrome-extension://" + extensionID + "/"
- targetID = target.TargetID
- break
+ 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()
+ targetCtx, cancel := chromedp.NewContext(ctx, chromedp.WithTargetID(targetID))
+ defer cancel()
- var tabsResp []byte
- err = chromedp.Run(
- targetCtx,
- chromedp.Evaluate(`chrome.tabs.reload();`, nil),
+ var tabsResp []byte
+ err = chromedp.Run(
+ targetCtx,
+ chromedp.Evaluate(`chrome.tabs.reload();`, nil),
+ )
+ if err != nil {
+ return fmt.Errorf(
+ "swextreload: error reloading tab '%s': %v",
+ extensionID,
+ err,
)
- if err != nil {
- return fmt.Errorf(
- "swextreload: error reloading tab '%s': %v",
- extensionID,
- err,
- )
- }
+ }
- if isDebug {
- log.Printf("Tabs: %v", string(tabsResp))
- }
+ if isDebug {
+ log.Printf("Tabs: %v", string(tabsResp))
}
return nil