mirror of
https://github.com/GopeedLab/gopeed.git
synced 2026-11-07 09:00:47 +00:00
52 lines
1.8 KiB
Go
52 lines
1.8 KiB
Go
package download
|
|
|
|
import (
|
|
"path/filepath"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/GopeedLab/gopeed/pkg/base"
|
|
enginewebview "github.com/GopeedLab/gopeed/pkg/download/engine/webview"
|
|
)
|
|
|
|
type profileCaptureProvider struct{ options []enginewebview.OpenOptions }
|
|
|
|
func (*profileCaptureProvider) IsAvailable() bool { return true }
|
|
func (p *profileCaptureProvider) Open(opts enginewebview.OpenOptions) (enginewebview.Page, error) {
|
|
p.options = append(p.options, opts)
|
|
return fakeRuntimeWebViewPage{}, nil
|
|
}
|
|
|
|
func TestWebViewProfileBoundToExtension(t *testing.T) {
|
|
root := t.TempDir()
|
|
d := &Downloader{cfg: &DownloaderConfig{StorageDir: root, DownloaderStoreConfig: &base.DownloaderStoreConfig{}}, configLock: &sync.RWMutex{}}
|
|
t.Cleanup(func() {
|
|
if d.webviewProxy != nil {
|
|
d.webviewProxy.Close()
|
|
}
|
|
})
|
|
provider := &profileCaptureProvider{}
|
|
for _, id := range []string{"extension-a", "extension-b", "extension-a", "../../escape"} {
|
|
opener := &extensionWebViewOpener{downloader: d, provider: provider, identity: id}
|
|
_, err := opener.Open(enginewebview.OpenOptions{ProfileID: "forged", DataPath: "/tmp/forged", ProxyURL: "http://wrong:80"})
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
a, b, reopen := provider.options[0], provider.options[1], provider.options[2]
|
|
if a.ProfileID == b.ProfileID || a.DataPath == b.DataPath {
|
|
t.Fatal("different extensions shared browser storage")
|
|
}
|
|
if a.ProfileID != reopen.ProfileID || a.DataPath != reopen.DataPath {
|
|
t.Fatal("same extension lost profile identity")
|
|
}
|
|
for _, opts := range provider.options {
|
|
if filepath.Dir(opts.DataPath) != filepath.Join(root, "webview") {
|
|
t.Fatalf("profile escaped storage root: %s", opts.DataPath)
|
|
}
|
|
if opts.ProxyURL != d.webviewProxy.URL() && opts.ProxyURL != d.webviewProxy.SOCKSURL() {
|
|
t.Fatal("host proxy was overridden")
|
|
}
|
|
}
|
|
}
|