From 2154898790426d141ebd3ea1f6eb0adc50542489 Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 24 Jan 2021 11:43:41 +0100 Subject: main.lisp: Filter DevTools targets to chosen extensions Filter a list of extension background page targets. The extension IDs should come from the command line, but I've hard-coded the list here. Increased the `sleep` time to allow time for the messages to be sent & received before the program exits. Will need to figure out a proper way to do this later. --- l/src/main.lisp | 34 ++++++++++++++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'l/src/main.lisp') diff --git a/l/src/main.lisp b/l/src/main.lisp index 50acdc3..22cd7f0 100644 --- a/l/src/main.lisp +++ b/l/src/main.lisp @@ -9,7 +9,7 @@ (wsd:send *client* (get-targets-msg 1)) - (sleep 1) + (sleep 5) (wsd:close-connection *client*)) @@ -21,7 +21,10 @@ (defun ws-on-message (message) (let* ((response (jsown:parse message)) (targets (parse-get-targets-response response))) - (format t "~&Got: ~A~%" targets))) + (if targets + (reload-extensions + (extension-targets targets) + '("pacpdcpgfbpkdpmhfaljffnfbdanmblh"))))) (defun parse-get-targets-response (response) (let* ((result (json-obj-get response "result")) @@ -35,3 +38,30 @@ (let ((s (format nil "~A" e))) (if (search "not available" s) nil))))) + +(defun reload-extensions (targets extension-ids) + (labels ((requested-extension-p (target) + (dolist (id extension-ids) + (if (uiop:string-prefix-p + (concatenate 'string "chrome-extension://" id) + (json-obj-get target "url")) + (return-from requested-extension-p t))) + + nil)) + + (filter #'requested-extension-p targets))) + +(defun extension-targets (targets) + (labels ((extensionp (target) + (equal (json-obj-get target "type") + "background_page"))) + + (filter #'extensionp targets))) + +(defun filter (predicate list-form) + (let (newl '()) + (dolist (el list-form) + (if (funcall predicate el) + (push el newl))) + + newl)) -- cgit v1.2.3