From ca98806dcca2528d9ac83a68456b7daf5ff9d5a0 Mon Sep 17 00:00:00 2001 From: Levi Date: Mon, 14 Sep 2026 00:34:27 +0800 Subject: [PATCH] Pin verified native backend and complete proxy regression checks --- .gitattributes | 2 ++ .github/workflows/webview-profiles.yml | 8 ++++- go.mod | 2 +- go.sum | 2 ++ internal/webview/proxy/server_test.go | 49 ++++++++++++++++++++++++++ 5 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..437f6d74 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Keep upstream plugin sources recognizable and collapsed in GitHub reviews. +ui/flutter/third_party/** linguist-vendored whitespace=-blank-at-eol,-blank-at-eof diff --git a/.github/workflows/webview-profiles.yml b/.github/workflows/webview-profiles.yml index e0fb62de..dbd900b7 100644 --- a/.github/workflows/webview-profiles.yml +++ b/.github/workflows/webview-profiles.yml @@ -19,8 +19,14 @@ jobs: flutter-version: '3.41.6' - run: flutter pub get working-directory: ui/flutter - - run: ./gradlew :flutter_inappwebview_android:compileDebugJavaWithJavac + - uses: gradle/actions/setup-gradle@v4 + with: + gradle-version: '8.14' + - name: Compile Android native plugin working-directory: ui/flutter/android + run: | + printf 'flutter.sdk=%s\nsdk.dir=%s\n' "$FLUTTER_ROOT" "$ANDROID_HOME" > local.properties + gradle :flutter_inappwebview_android:compileDebugJavaWithJavac apple-plugin: runs-on: macos-14 steps: diff --git a/go.mod b/go.mod index 7bfd675d..c099e88f 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module github.com/GopeedLab/gopeed go 1.25.4 require ( - github.com/GopeedLab/webview_go v0.0.0-20260913162656-5f4deb099005 + github.com/GopeedLab/webview_go v0.0.0-20260913163011-2273ba19d2db github.com/anacrolix/torrent v1.60.1-0.20251217073903-486bcbe758e0 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 github.com/bodgit/sevenzip v1.6.1 diff --git a/go.sum b/go.sum index f7bb99cd..ee70062f 100644 --- a/go.sum +++ b/go.sum @@ -27,6 +27,8 @@ github.com/GopeedLab/webview_go v0.0.0-20260423085439-7a2f88b6e9b5 h1:86LVTaNDM/ github.com/GopeedLab/webview_go v0.0.0-20260423085439-7a2f88b6e9b5/go.mod h1:FvV19lu9rQ9NcbczN5y8pbWecURRRbWa8tbfFARBDa0= github.com/GopeedLab/webview_go v0.0.0-20260913162656-5f4deb099005 h1:4jyEJfmP5tpx+qaWqTF6Y04jy4xTTTGWo3l2alh9uZM= github.com/GopeedLab/webview_go v0.0.0-20260913162656-5f4deb099005/go.mod h1:FvV19lu9rQ9NcbczN5y8pbWecURRRbWa8tbfFARBDa0= +github.com/GopeedLab/webview_go v0.0.0-20260913163011-2273ba19d2db h1:kZya8+v61mZx7ys0eN1MePyXJPoB1HGRE9O4cValX9M= +github.com/GopeedLab/webview_go v0.0.0-20260913163011-2273ba19d2db/go.mod h1:FvV19lu9rQ9NcbczN5y8pbWecURRRbWa8tbfFARBDa0= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= diff --git a/internal/webview/proxy/server_test.go b/internal/webview/proxy/server_test.go index 9822b5bc..d30ff863 100644 --- a/internal/webview/proxy/server_test.go +++ b/internal/webview/proxy/server_test.go @@ -209,3 +209,52 @@ func TestSOCKSIngressPreservesRemoteDNS(t *testing.T) { t.Fatalf("unexpected body %q", body) } } + +func TestHTTPUpgradeIsForwarded(t *testing.T) { + upstream := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("Upgrade") != "fixture" { + http.Error(w, "upgrade lost", 400) + return + } + c, b, err := w.(http.Hijacker).Hijack() + if err != nil { + return + } + defer c.Close() + b.WriteString("HTTP/1.1 101 Switching Protocols\r\nConnection: Upgrade\r\nUpgrade: fixture\r\n\r\n") + b.Flush() + line, err := b.ReadString('\n') + if err != nil { + return + } + b.WriteString(line) + b.Flush() + })) + defer upstream.Close() + local, err := New(nil) + if err != nil { + t.Fatal(err) + } + defer local.Close() + endpoint, _ := url.Parse(local.URL()) + c, err := net.Dial("tcp", endpoint.Host) + if err != nil { + t.Fatal(err) + } + defer c.Close() + c.SetDeadline(time.Now().Add(3 * time.Second)) + io.WriteString(c, "GET "+upstream.URL+"/ HTTP/1.1\r\nHost: fixture\r\nConnection: Upgrade\r\nUpgrade: fixture\r\n\r\n") + reader := bufio.NewReader(c) + response, err := http.ReadResponse(reader, nil) + if err != nil { + t.Fatal(err) + } + if response.StatusCode != 101 { + t.Fatalf("upgrade failed: %s", response.Status) + } + io.WriteString(c, "hello\n") + line, err := reader.ReadString('\n') + if err != nil || line != "hello\n" { + t.Fatalf("upgraded echo %q %v", line, err) + } +}