Skip to content

Commit 907df32

Browse files
committed
allow user to specify custom url params for DevTools frontend
1 parent 6b689cb commit 907df32

File tree

9 files changed

+54
-13
lines changed

9 files changed

+54
-13
lines changed

src/automation/dirac/automation.cljs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,9 @@
141141
:kind :error-log
142142
:delay (or delay 100)}))
143143

144+
(defn get-frontend-url-params [devtools-id]
145+
(automate-dirac-frontend! devtools-id {:action :get-frontend-url-params}))
146+
144147
(defn scrape [devtools-id scraper-name & args]
145148
(automate-dirac-frontend! devtools-id {:action :scrape
146149
:scraper scraper-name

src/background/dirac/background/helpers.cljs

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,12 @@
3535
items (map (fn [[k v]] (str (encode k) "=" (encode v))) params)]
3636
(string/join "&" items)))
3737

38-
(defn make-relative-url [path params]
39-
{:pre [(map? params)]}
40-
(let [non-empty-params (into {} (filter #(some? (second %)) params))]
41-
(str path "?" (build-query non-empty-params))))
38+
(defn make-relative-url [path params & [user-params-str]]
39+
{:pre [(map? params)
40+
(or (string? user-params-str) (nil? user-params-str))]}
41+
(let [non-empty-params (into {} (filter #(some? (second %)) params))
42+
url-params-segments (remove empty? [(build-query non-empty-params) user-params-str])]
43+
(str path "?" (string/join "&" url-params-segments))))
4244

4345
; -- dirac frontend url -----------------------------------------------------------------------------------------------------
4446

@@ -52,7 +54,7 @@
5254
; chrome-extension://mjdnckdilfjoenmikegbbenflgjcmbid/devtools/front_end/inspector.html?devtools_id=1&dirac_flags=11111&ws=localhost:9222/devtools/page/76BE0A6D-412C-4592-BC3C-ED3ECB5DFF8C
5355
(defn make-dirac-frontend-url [devtools-id options]
5456
{:pre [devtools-id]}
55-
(let [{:keys [backend-url flags reset-settings automate extra-url-params backend-api backend-css]} options]
57+
(let [{:keys [backend-url flags reset-settings automate extra-url-params backend-api backend-css user-url-params]} options]
5658
(assert backend-url)
5759
(assert flags)
5860
(let [html-file-path (get-dirac-main-html-file-path)
@@ -66,7 +68,7 @@
6668
backend-api (assoc "backend_api" backend-api)
6769
backend-css (assoc "backend_css" backend-css)
6870
extra-url-params (merge extra-url-params))]
69-
(runtime/get-url (make-relative-url html-file-path all-params)))))
71+
(runtime/get-url (make-relative-url html-file-path all-params user-url-params)))))
7072

7173
(defn extract-devtools-id-from-url [url]
7274
(utils/parse-int (get-query-param (str url) "devtools_id")))

src/background/dirac/background/tools.cljs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,11 +107,18 @@
107107
(assoc options :backend-css backend-css)))
108108
options))
109109

110+
(defn provide-user-url-params [options]
111+
(or
112+
(if-let [user-url-params (options/get-option :user-frontend-url-params)]
113+
(assoc options :user-url-params user-url-params))
114+
options))
115+
110116
(defn prepare-options [initial-options]
111117
(-> initial-options
112118
(automate-if-marion-present)
113119
(provide-backend-api-if-available)
114-
(provide-backend-css-if-available)))
120+
(provide-backend-css-if-available)
121+
(provide-user-url-params)))
115122

116123
(defn connect-and-navigate-dirac-devtools! [frontend-tab-id backend-tab-id options]
117124
(let [devtools-id (devtools/register! frontend-tab-id backend-tab-id)

src/implant/dirac/implant/automation.cljs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,9 @@
125125
trigger-fn #(ocall (oget js/window "dirac") fn-name)]
126126
(trigger-fn-and-wait! trigger-fn delay)))
127127

128+
(defn get-frontend-url-params []
129+
(helpers/get-url-params))
130+
128131
; -- main dispatch ----------------------------------------------------------------------------------------------------------
129132

130133
(defn dispatch-command! [command]
@@ -144,6 +147,7 @@
144147
:get-suggest-box-representation (get-suggest-box-representation)
145148
:get-prompt-representation (get-prompt-representation)
146149
:trigger-internal-error (trigger-internal-error! (:delay command) (:kind command))
150+
:get-frontend-url-params (get-frontend-url-params)
147151
:scrape (apply scrape (:scraper command) (:args command))
148152
(warn "received unknown automation command:" (pr-str command))))
149153

src/implant/dirac/implant/helpers.cljs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
(:require [chromex.support :refer-macros [oget ocall oapply]]
33
[chromex.logging :refer-macros [log warn error group group-end]]))
44

5+
(defn get-url-params []
6+
(oget js/window "location" "search"))
7+
58
(defn get-query-param [name]
69
(if-let [runtime (oget js/window "Runtime")]
710
(ocall runtime "queryParam" name)

src/options/dirac/options/ui.cljs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@
5353
(f/checkbox "Enable clean URLs" data [:options :clean-urls])
5454
(f/checkbox "Beautify function names" data [:options :beautify-function-names])
5555
(f/checkbox "Use backend-supported API" data [:options :use-backend-supported-api])
56-
(f/checkbox "Use backend-supported CSS" data [:options :use-backend-supported-css])])
56+
(f/checkbox "Use backend-supported CSS" data [:options :use-backend-supported-css])]
57+
(f/text "Extra frontend URL params:" data [:options :user-frontend-url-params]))
5758
(f/form-buttons
5859
(f/button "Reset to Defaults" reset-to-defaults!)
5960
(f/button "Save and Exit" save-state-and-exit!))))))

src/shared/dirac/options/model.cljs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
:clean-urls true
2323
:beautify-function-names true
2424
:use-backend-supported-api true
25-
:use-backend-supported-css true})
25+
:use-backend-supported-css true
26+
:user-frontend-url-params nil})
2627

2728
(defonce cached-options (atom nil))
2829
(defonce chrome-event-channel (make-chrome-event-channel (chan)))

test/browser/fixtures/src/tasks/dirac/tests/tasks/suite01/misc.cljs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,13 @@
22
(:require [cljs.core.async :refer [timeout]]
33
[cljs.test :refer-macros [is testing]]
44
[dirac.settings :refer-macros [seconds minutes]]
5-
[dirac.automation :refer-macros [<!* go-task with-scenario with-devtools] :as a]
6-
[dirac.utils :as utils]))
5+
[dirac.automation :refer-macros [<!* go-task with-scenario with-devtools with-options] :as a]
6+
[clojure.string :as string]))
77

88
(go-task
9-
(with-scenario "normal"))
9+
(with-scenario "normal"
10+
(testing "user-specified url params should get propagated to DevTools frontends"
11+
(let [user-params "x=1&y=2"]
12+
(with-options {:user-frontend-url-params user-params}
13+
(with-devtools
14+
(is (string/includes? (<!* a/get-frontend-url-params) user-params))))))))
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,20 @@
11
ns Testing dirac.tests.tasks.suite01.misc
22
automate open-tab-with-scenario! ["normal"]
3+
automate store-options!
4+
automate set-options! [{:user-frontend-url-params "x=1&y=2"}]
5+
automate open-devtools!
6+
extension handling command: open-dirac-devtools
7+
extension register devtools #1
8+
devtools #1 implant initialized
9+
devtools #1 reset devtools settings
10+
devtools #1 devtools ready
11+
devtools #1 setCurrentPanel: elements
12+
devtools #1 namespacesCache is cool now
13+
automate #1 get-frontend-url-params
14+
automate #1 close-devtools!
15+
extension handling command: close-dirac-devtools
16+
extension unregister devtools #1
17+
automate restore-options!
318
automate close-tab-with-scenario! ["scenario-tab#1"]
4-
summary Automated 2 actions with 0 check-points containing 0 assertions.
19+
summary Automated 8 actions with 0 check-points containing 1 assertions.
520
0 failures, 0 errors.

0 commit comments

Comments
 (0)