Karl Seguin
adb8779d00
allow Target.getTargetInfo to be called without parameters
2025-03-10 14:34:32 +01:00
Karl Seguin
fbb0e675f5
send attach events before result
2025-03-10 14:34:32 +01:00
Karl Seguin
a3e2b5246e
Make CDP server more authoritative with respect to IDs
...
The TL;DR is that this commit enforces the use of correct IDs, introduces a
BrowserContext, and adds some CDP tests.
These are the ids we need to be aware of when talking about CDP:
- id
- browserContextId
- targetId
- sessionId
- loaderId
- frameId
The `id` is the only one that _should_ originate from the driver. It's attached
to most messages and it's how we maintain a request -> response flow: when
the server responds to a specific message, it echo's back the id from the
requested message. (As opposed to out-of-band events sent from the server which
won't have an `id`). When I say "id" from this point forward, I mean every id
except for this req->res id.
Every other id is created by the browser.
Prior to this commit, we didn't really check incoming ids from the driver. If
the driver said "attachToTarget" and included a targetId, we just assumed that
this was the current targetId. This was aided by the fact that we only used
hard-coded IDS. If _we_ only "create" a frameId of "FRAME-1", then it's tempting
to think the driver will only ever send a frameId of "FRAME-1".
The issue with this approach is that _if_ the browser and driver fall out of sync
and there's only ever 1 browserContextId, 1 sessionId and 1 frameId, it's not
impossible to imagine cases where we behave on the thing.
Imagine this flow:
- Driver asks for a new BrowserContext
- Browser says OK, your browserContextId is 1
- Driver, for whatever reason, says close browserContextId 2
- Browser says, OK, but it doesn't check the id and just closes the only
BrowserContext it knows about (which is 1)
By both re-using the same hard-coded ids, and not verifying that the ids sent
from the client correspond to the correct ids, any issues are going to be hard
to debug.
Currently LOADER_ID and FRAEM_ID are still hard-coded. Baby steps.
2025-03-10 14:34:32 +01:00
Karl Seguin
6ab64d155b
Refactor CDP
...
CDP is now an struct which contains its own state a browser and a session.
When a client connection is made and successfully upgrades, the client creates
the CDP instance. There is now a cleaner separation betwen Server, Client and
CDP.
Removed a number of allocations, especially when writing results/events from
CDP to the client. Improved input message parsing. Tried to remove some usage
of undefined.
2025-02-12 16:47:37 +08:00
Pierre Tachoire
6d530691f3
cdp: use an enum for SessionID
2025-01-29 18:38:05 +01:00
Pierre Tachoire
4c9a24c64e
start inspector when the js env starts
2025-01-13 10:53:38 +01:00
Pierre Tachoire
b276a15786
cdp: add target.detachFromTarget noop
2025-01-13 10:53:33 +01:00
Pierre Tachoire
2fed239ece
browser: split page start from page navigate
2025-01-13 10:53:29 +01:00
Pierre Tachoire
8e2cb36597
cdp: fix some id inconsitency accross runtime messages
2025-01-13 10:49:48 +01:00
Pierre Tachoire
bcaace1c91
cdp: use identifiable hard coded ids
2025-01-13 10:47:51 +01:00
Pierre Tachoire
d664d07141
cdp: dispatch executionContextCreated on Runtime.enable
2025-01-13 10:47:42 +01:00
Pierre Tachoire
c761cd059b
cdp: log errors on sendMessageToTarget
2025-01-08 16:17:29 +01:00
Pierre Tachoire
d78e8a725d
cdp: remove useless parameter
2025-01-08 09:57:28 +01:00
Pierre Tachoire
90ba6deba2
cdp: add Target.sendMessageToTarget support
...
see https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-sendMessageToTarget
2025-01-07 16:00:44 +01:00
Pierre Tachoire
5fc763a738
cdp: add TargetCreated event on createTarget message
2025-01-07 10:34:47 +01:00
Francis Bouvier
53dd0a5e4c
cdp: handle nullable Type for params
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-12-04 22:39:54 +01:00
Francis Bouvier
325ecedf0b
websocket: first implementation
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-27 21:24:09 +01:00
Francis Bouvier
ed3a464843
cdp: fix memory leak in msg parsing of the JSON
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-11-09 03:25:42 +01:00
Francis Bouvier
f60fcbec04
Merge pull request #286 from lightpanda-io/cdp-refacto-input
...
cdp: refacto message JSON read
2024-11-15 01:03:53 +01:00
Francis Bouvier
4f99407462
Merge pull request #288 from lightpanda-io/cdp-create-target
...
cdp: browserContextId is optional in Target.createTarget
2024-11-15 00:53:22 +01:00
Pierre Tachoire
82c37fc71b
cdp: refacto message JSON read
2024-11-12 12:56:29 +01:00
Pierre Tachoire
8ba911c8dd
cdp: return provided browser context id if any
2024-11-12 10:56:06 +01:00
Francis Bouvier
ec5de2fce0
Merge pull request #287 from lightpanda-io/cdp-attach-to-target
...
cdp: add Target.attachToTarget noop
2024-11-07 15:49:15 +01:00
Pierre Tachoire
b3054d68bf
cdp: browserContextId is optional in Target.createTarget
...
https://chromedevtools.github.io/devtools-protocol/tot/Target/#method-createTarget
2024-10-29 10:37:23 +01:00
Pierre Tachoire
60adf0a9c3
cdp: add Target.attachToTarget noop
2024-10-29 10:34:36 +01:00
Francis Bouvier
8508c21080
cdp: remove send sync
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-21 18:29:10 +02:00
Francis Bouvier
8e05f09fc8
server, cdp: improve logging
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-15 22:57:56 +02:00
Francis Bouvier
84c49fbe34
cdp: ensure there is an ID on each request
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-15 17:28:18 +02:00
Francis Bouvier
c8a91d4cf6
server: merge Cmd and Accept in Ctx
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-09 00:55:29 +02:00
Francis Bouvier
76a9034668
server: newSession on disposeBrowserContext
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-07 21:14:55 +02:00
Francis Bouvier
4c225e515d
server: let the caller of sendSync free the string
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-07 16:04:29 +02:00
Francis Bouvier
5ab1d2a8a5
Add License in new cdp files
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 18:02:21 +02:00
Francis Bouvier
2f3a581859
Add TODOs and comments
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 17:48:54 +02:00
Francis Bouvier
8bdd2a14e8
Add Target.disposeBrowserContext
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 17:13:47 +02:00
Francis Bouvier
1675f69582
Add Target.closeTarget
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 17:13:29 +02:00
Francis Bouvier
94d2d28806
Redirect Runtime domain to JS engine Inspector
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-10-01 17:12:08 +02:00
Francis Bouvier
aca64eedca
Uniformize calling name conventions
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-19 15:56:44 +02:00
Francis Bouvier
1929eed8ac
Add contextID in state
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-07 16:03:12 +02:00
Francis Bouvier
ad8c9fac2b
Add target.setDiscoverTargets
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-07 16:02:37 +02:00
Francis Bouvier
fa82160265
Add target.getBrowserContexts
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-07 16:02:02 +02:00
Francis Bouvier
dc1456f4e8
Handle CDP messages with different order
...
The 'method' still needs to be the first or the second key
(in this case after the 'id').
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-06-07 15:59:57 +02:00
Francis Bouvier
9e13ffb8ff
Add sendEvent utility function
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-19 17:11:31 +02:00
Francis Bouvier
fc1b3d5397
Contextual frameTree
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-18 20:54:30 +02:00
Francis Bouvier
9974b56607
Add Target.createTarget
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-18 16:43:19 +02:00
Francis Bouvier
0506a7bb53
Add Browser.createBrowserContext
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-18 16:14:19 +02:00
Francis Bouvier
06f161c423
Add Target.getTargetInfo
...
+ do not send attachedToTarget if sessionId
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-18 13:20:23 +02:00
Francis Bouvier
e4ae2df1a4
Add some optional params in methods
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-18 11:57:39 +02:00
Francis Bouvier
4d8cdc6dc8
Handle sessionId in result
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-17 14:18:18 +02:00
Francis Bouvier
980571073d
Big refacto
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-16 00:38:06 +02:00
Francis Bouvier
5e1fe656e8
send Target.attachedToTarget after Target.setAutoAttach
...
Signed-off-by: Francis Bouvier <francis@lightpanda.io >
2024-04-15 21:34:00 +02:00