diff options
| -rw-r--r-- | l/src/main.lisp | 39 | 
1 files changed, 37 insertions, 2 deletions
| diff --git a/l/src/main.lisp b/l/src/main.lisp index 65372d2..31afe73 100644 --- a/l/src/main.lisp +++ b/l/src/main.lisp @@ -18,13 +18,38 @@      `(:obj ("id" . ,call-id)             ("method" . "Target.getTargets")))) +(defun target-attach-to-target-msg (call-id target-id) +  (jsown:to-json +    `(:obj ("id" . ,call-id) +           ("method" . "Target.attachToTarget") +           ("params" . (:obj ("targetId" . ,target-id) +                             ("flatten" . t)))))) + +(defun target-attached-to-target-msg-p (message) +  (equal +    (json-obj-get message "method") +    "Target.attachedToTarget")) + +(defun runtime-evaluate-msg (call-id session-id expression) +  (jsown:to-json +    `(:obj ("id" . ,call-id) +           ("sessionId" . ,session-id) +           ("method" . "Runtime.evaluate") +           ("params" . (:obj ("expression" . ,expression)))))) +  (defun ws-on-message (message)    (let* ((response (jsown:parse message))           (targets (parse-get-targets-response response)))      (if targets          (reload-extensions            (extension-targets targets) -          '("pacpdcpgfbpkdpmhfaljffnfbdanmblh"))))) +          '("pacpdcpgfbpkdpmhfaljffnfbdanmblh"))) + +    (if (target-attached-to-target-msg-p response) +        (reload-extension +          (json-obj-get +            (json-obj-get response "params") +            "sessionId")))))  (defun parse-get-targets-response (response)    (let* ((result (json-obj-get response "result")) @@ -49,7 +74,17 @@               nil)) -    (filter #'requested-extension-p targets))) +    (dolist (extension (filter #'requested-extension-p targets)) +      (attach-to-target extension)))) + +(defun attach-to-target (extension) +  (let ((target-id (json-obj-get extension "targetId"))) +    (wsd:send *client* +              (target-attach-to-target-msg 2 target-id)))) + +(defun reload-extension (session-id) +  (wsd:send *client* +            (runtime-evaluate-msg 1 session-id "chrome.runtime.reload()")))  (defun extension-targets (targets)    (labels ((extensionp (target) | 
