From 009545e8c01fa2d24b4afc5a214abdb99ed8c1bf Mon Sep 17 00:00:00 2001 From: Yad Smood Date: Thu, 12 Oct 2023 19:20:48 +0800 Subject: [PATCH] disable the pdf viewer by default --- lib/launcher/flags/flags.go | 6 +++++ lib/launcher/launcher.go | 44 +++++++++++++++++++++++++++++++---- lib/launcher/launcher_test.go | 2 +- 3 files changed, 47 insertions(+), 5 deletions(-) diff --git a/lib/launcher/flags/flags.go b/lib/launcher/flags/flags.go index 2a3e7eaf..1f7c8293 100644 --- a/lib/launcher/flags/flags.go +++ b/lib/launcher/flags/flags.go @@ -36,6 +36,12 @@ const ( // XVFB flag XVFB Flag = "rod-xvfb" + // ProfileDir flag + ProfileDir = "profile-directory" + + // Preferences flag + Preferences Flag = "rod-preferences" + // Leakless flag Leakless Flag = "rod-leakless" diff --git a/lib/launcher/launcher.go b/lib/launcher/launcher.go index cb681f8a..4d16f415 100644 --- a/lib/launcher/launcher.go +++ b/lib/launcher/launcher.go @@ -66,6 +66,8 @@ func New() *Launcher { // enable headless by default flags.Headless: nil, + flags.Preferences: {`{"plugins":{"always_open_pdf_externally": true}}`}, + // to disable the init blank window "no-first-run": nil, "no-startup-window": nil, @@ -242,6 +244,11 @@ func (l *Launcher) XVFB(args ...string) *Launcher { return l.Set(flags.XVFB, args...) } +// Preferences set chromium user preferences, such as set the default search engine or disable the pdf viewer. +func (l *Launcher) Preferences(pref string) *Launcher { + return l.Set(flags.Preferences, pref) +} + // Leakless switch. If enabled, the browser will be force killed after the Go process exits. // The doc of leakless: https://github.com/ysmood/leakless. func (l *Launcher) Leakless(enable bool) *Launcher { @@ -293,9 +300,9 @@ func (l *Launcher) UserDataDir(dir string) *Launcher { // Related article: https://superuser.com/a/377195 func (l *Launcher) ProfileDir(dir string) *Launcher { if dir == "" { - l.Delete("profile-directory") + l.Delete(flags.ProfileDir) } else { - l.Set("profile-directory", dir) + l.Set(flags.ProfileDir, dir) } return l } @@ -394,19 +401,23 @@ func (l *Launcher) Launch() (string, error) { return "", err } + l.setupUserPreferences() + var ll *leakless.Launcher var cmd *exec.Cmd + args := l.FormatArgs() + if l.Has(flags.Leakless) && leakless.Support() { ll = leakless.New() - cmd = ll.Command(bin, l.FormatArgs()...) + cmd = ll.Command(bin, args...) } else { port := l.Get(flags.RemoteDebuggingPort) u, err := ResolveURL(port) if err == nil { return u, nil } - cmd = exec.Command(bin, l.FormatArgs()...) + cmd = exec.Command(bin, args...) } l.setupCmd(cmd) @@ -443,6 +454,31 @@ func (l *Launcher) hasLaunched() bool { return !atomic.CompareAndSwapInt32(&l.isLaunched, 0, 1) } +func (l *Launcher) setupUserPreferences() { + userDir := l.Get(flags.UserDataDir) + if userDir == "" { + return + } + + userDir, err := filepath.Abs(userDir) + utils.E(err) + + profile := l.Get(flags.ProfileDir) + if profile == "" { + profile = "Default" + } + + path := filepath.Join(userDir, profile, "Preferences") + + pref := l.Get(flags.Preferences) + + if pref == "" { + pref = "{}" + } + + utils.E(utils.OutputFile(path, pref)) +} + func (l *Launcher) setupCmd(cmd *exec.Cmd) { l.osSetupCmd(cmd) diff --git a/lib/launcher/launcher_test.go b/lib/launcher/launcher_test.go index 7dc4f00f..60a2b817 100644 --- a/lib/launcher/launcher_test.go +++ b/lib/launcher/launcher_test.go @@ -65,7 +65,7 @@ func TestLaunch(t *testing.T) { defaults.Proxy = "test.com" defer func() { defaults.ResetWith("") }() - l := launcher.New() + l := launcher.New().Preferences("") defer l.Kill() u := l.MustLaunch()