diff options
author | Teddy Wing | 2023-11-12 15:48:00 +0100 |
---|---|---|
committer | Teddy Wing | 2023-11-12 15:48:00 +0100 |
commit | 032d704f74a9cec209bef6a3a97109d0874ab331 (patch) | |
tree | ccf8f066a7fe12d0a94ab03547c8854b92798760 /src | |
parent | ff7eb76be6e8a6aa1e5ee5f3cc3efac8455e9daf (diff) | |
download | extreload-032d704f74a9cec209bef6a3a97109d0874ab331.tar.bz2 |
main: Attempt to use Inspector.targetCrashed to reload tab
I observed during a manual test with Websocat that Manifest V3
extensions trigger an `Inspector.targetCrashed` message after reloading
the extension:
{"id":1,"sessionId":"21A6A75608971AEAD68DB36701F9985C","method":"Runtime.evaluate","params":{"expression":"chrome.runtime.reload()"}}
{"id":1,"result":{"result":{"type":"undefined"}},"sessionId":"21A6A75608971AEAD68DB36701F9985C"}
{"method":"Inspector.targetCrashed","params":{},"sessionId":"21A6A75608971AEAD68DB36701F9985C"}
Here, I tried to listen for that `Inspector.targetCrashed` message and
use that to trigger a tab reload.
Unfortunately, that doesn't seem to work, as in my Extreload test of
this code, I don't see the `Inspector.targetCrashed` message. Looks like
I'll have to find a different means of reloading Manifest V3 extension
tabs.
Diffstat (limited to 'src')
-rw-r--r-- | src/extension.lisp | 4 | ||||
-rw-r--r-- | src/main.lisp | 31 |
2 files changed, 35 insertions, 0 deletions
diff --git a/src/extension.lisp b/src/extension.lisp index bc75fb9..9fe258c 100644 --- a/src/extension.lisp +++ b/src/extension.lisp @@ -5,6 +5,10 @@ :initarg :id :reader id :documentation "The extension's ID.") + (url + :initarg :url + :reader url + :documentation "The DevTools Protocol target URL.") (session-id :initarg :session-id :reader session-id diff --git a/src/main.lisp b/src/main.lisp index 3bc79c8..8ea05ab 100644 --- a/src/main.lisp +++ b/src/main.lisp @@ -72,6 +72,16 @@ (attach-extensions targets extension-ids))) (when (target-attached-to-target-msg-p response) + (when (and (reload-current-tab config) + (target-attached-to-target-msg-manifest-v3-extension-p response)) + ;; response is an extension in *extensions* + + (reload-tab (json-obj-get + (json-obj-get response "result") + "sessionId")) + + (return-from ws-on-message)) + (track-service-worker-target response) (reload-extension (json-obj-get @@ -198,9 +208,30 @@ the target to reload the current tab." ;; Extension IDs are 32 characters long. (+ 19 32)) + :url (json-obj-get target-info "url") :session-id (json-obj-get params "sessionId")) *extensions*)))) +(defun target-attached-to-target-msg-manifest-v3-extension-p (msg) + "Return true if the Target.attachedToTarget message `msg` corresonds to a +tracked Manifest V3 extension." + (filter + #'(lambda (extension) + (string= (json-obj-get + (json-obj-get + (json-obj-get msg "params") + "targetInfo") + "url") + (url extension))) + *extensions*)) + +(defun manifest-v3-extension-p (extension) + "Return true if `extension` is in our list of tracked Manifest V3 extensions." + (filter + #'(lambda (ext) + ()) + *extensions*)) + (defun websocket-send (client data) "Send `data` to WebSocket `client` and increment `*wg*`." (when (debug-output *config*) |