Make config menu entries relative. (#704)

An earlier change had added support for placing pprof URLs under
the /ui prefix. However config menu entry URLs were built by
editing a URL produced by stripping the /ui prefix and were
therefore falling outside the /ui prefix. This ended up in
mis-navigation to the graph view when a config menu entry was
selected in another view.

Fixed by emitting a relative URL (e.g., ?f=foo) instead of an
absolute URL (e.g., /flamegraph?f=foo).
diff --git a/internal/driver/settings.go b/internal/driver/settings.go
index f72314b..1e9154c 100644
--- a/internal/driver/settings.go
+++ b/internal/driver/settings.go
@@ -79,7 +79,7 @@
 }
 
 // configMenu returns a list of items to add to a menu in the web UI.
-func configMenu(fname string, url url.URL) []configMenuEntry {
+func configMenu(fname string, u url.URL) []configMenuEntry {
 	// Start with system configs.
 	configs := []namedConfig{{Name: "Default", config: defaultConfig()}}
 	if settings, err := readSettings(fname); err == nil {
@@ -91,13 +91,15 @@
 	result := make([]configMenuEntry, len(configs))
 	lastMatch := -1
 	for i, cfg := range configs {
-		dst, changed := cfg.config.makeURL(url)
+		dst, changed := cfg.config.makeURL(u)
 		if !changed {
 			lastMatch = i
 		}
+		// Use a relative URL to work in presence of stripping/redirects in webui.go.
+		rel := &url.URL{RawQuery: dst.RawQuery, ForceQuery: true}
 		result[i] = configMenuEntry{
 			Name:       cfg.Name,
-			URL:        dst.String(),
+			URL:        rel.String(),
 			UserConfig: (i != 0),
 		}
 	}
diff --git a/internal/driver/settings_test.go b/internal/driver/settings_test.go
index f87eb49..e0ea14c 100644
--- a/internal/driver/settings_test.go
+++ b/internal/driver/settings_test.go
@@ -135,9 +135,9 @@
 	pageURL, _ := url.Parse("/top?f=foo")
 	menu := configMenu(fname, *pageURL)
 	want := []configMenuEntry{
-		{Name: "Default", URL: "/top", Current: false, UserConfig: false},
-		{Name: "A", URL: "/top?f=foo", Current: true, UserConfig: true},
-		{Name: "B", URL: "/top?f=bar", Current: false, UserConfig: true},
+		{Name: "Default", URL: "?", Current: false, UserConfig: false},
+		{Name: "A", URL: "?f=foo", Current: true, UserConfig: true},
+		{Name: "B", URL: "?f=bar", Current: false, UserConfig: true},
 	}
 	if !reflect.DeepEqual(menu, want) {
 		t.Errorf("ConfigMenu returned %v; want %v", menu, want)