Skip to content

Address requestPictureInPicture() algorithm#245

Merged
marcoscaceres merged 41 commits into
w3c:mainfrom
theIDinside:fix-request-pip-algorithm
May 21, 2026
Merged

Address requestPictureInPicture() algorithm#245
marcoscaceres merged 41 commits into
w3c:mainfrom
theIDinside:fix-request-pip-algorithm

Conversation

@theIDinside

@theIDinside theIDinside commented Feb 6, 2026

Copy link
Copy Markdown
Contributor

Closes #244
Closes #233
Closes #229

The idea with the change is to have the step creating the PiP window in parallel:

Let Picture-in-Picture window be a new instance of PictureInPictureWindow associated with pictureInPictureElement.

And only after that, queueing the global task that does DOM mutations and what not. Because this creation of the Picture-in-picture can theoretically take forever.

This addresses the issues (and the WIP laid out there) in #244 which points out in-parallel mutation of the DOM and resolving promises when it can't.

I think this model fits what Chrome does already and being the one implementing this in Firefox, I feel comfortable with claiming it's achievable in some form there too.

cc @zcorpan && @beaufortfrancois - leaving PR to start discussion.


Preview | Diff

@theIDinside

Copy link
Copy Markdown
Contributor Author

@beaufortfrancois - should the event be queued to happen after promise resolved or should it happen before promise resolve? Right now it's in a queued task from within a queued task, so it will happen after the promise resolves, and that is what matches most with how the spec is currently defined.

@theIDinside theIDinside force-pushed the fix-request-pip-algorithm branch from 4cd536a to 9d0d7a0 Compare February 9, 2026 14:05
@theIDinside

theIDinside commented Feb 9, 2026

Copy link
Copy Markdown
Contributor Author

Latest change addressed queuing a task to fire an event, we're already in a queued global task with steps S, and to observe the same order as before, firing the event is moved to step 5 (after promise resolve).

EDIT: Apparently, it's generally advised to dispatch the event before the promise resolves: https://w3ctag.github.io/design-principles/#promises-and-events - so PR will be updated to reflect this.

@theIDinside theIDinside force-pushed the fix-request-pip-algorithm branch from 9d0d7a0 to 12ed491 Compare February 9, 2026 14:18

@beaufortfrancois beaufortfrancois left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for starting this effort @theIDinside!

Comment thread index.bs Outdated
Comment thread index.bs Outdated
Comment thread index.bs Outdated
Comment thread index.bs Outdated
@theIDinside

Copy link
Copy Markdown
Contributor Author

This addresses I think the spec technical issues, but we have an algorithmic issue that needs solving (eventually) as well.

The specification states that more than 1 PIP window may be supported by some platforms. I think Chrome doesn't support more than 1 per document, but the spec doesn't really allow for it either. If we only really want to support 1 video window, we should specify that as a hard requirement.

@beaufortfrancois

Copy link
Copy Markdown
Collaborator

The specification states that more than 1 PIP window may be supported by some platforms. I think Chrome doesn't support more than 1 per document, but the spec doesn't really allow for it either. If we only really want to support 1 video window, we should specify that as a hard requirement.

The spec has indeed always allowed more than 1 pip window.

@theIDinside

Copy link
Copy Markdown
Contributor Author

The specification states that more than 1 PIP window may be supported by some platforms. I think Chrome doesn't support more than 1 per document, but the spec doesn't really allow for it either. If we only really want to support 1 video window, we should specify that as a hard requirement.

The spec has indeed always allowed more than 1 pip window.

Yeah that was poor phrasing on my behalf. What I meant is, the spec is written in a way that makes multi-pip impossible. To add additional picture in picture elements is to leak the previous ones (we only have 1 element on the document referencing the picture in picture window).

@theIDinside

theIDinside commented Feb 20, 2026

Copy link
Copy Markdown
Contributor Author

EDIT: What's written below is not relevant for this specific PR, but worth remembering if multi window spec work is to happen in the future.

So for instance we have initiators-of-active-picture-in-picture-sessions

But it's neither web content exposed, nor spec'ed on how to access / control it by the web developer.

The exit algorithm just looks at the pictureInPictureElement and as such, only can reference the "last one" (the leak I mentioned, because once you've exited the last one, the previous ones are not able to be referenced by web spec algorithms).

So to actually support multiple PIP windows, we need a list of pictureInPictureElements, similarly to how fullscreen does (only it uses a document's top layer, that's not what we would do). Also, exiting picture in picture would have to work like this:

  1. The individual PIP Window instances would have an exit() method
  2. HTMLVideo/Media elements would need a way to reference it's "associated picture in picture window" (as Document would need to keep a list of pictureInPicture elements)
  3. The document's method of exiting picture in picture, would exit all of the PIP windows

Then we would have a clearly defined way of supporting multiple picture in picture windows. By having document's exit method actually exit out of all, means we wouldn't break web compatibility (I think it's only chrome and safari that support it anyway at the moment, so we'd be fine). And adding the method to the HTML element is also fine I think. Very little changes would have to go in to existing browsers to make this work.

Then, finally, we would change this proposal, to have another step in the parallel queue part and that's; after checking that this is not in the list of the owner document's pictureInPicture elements, have a step that checks:

  1. If multiple pip windows are not supported and list of pictureOfPicture elements is not empty:
    1. Queue a global task on the media element event source to perform the steps of exit picture in picture
  2. ...

And then in the steps where we actually manipulate DOM elements and create PIP windows, we would push these new results on to the list, instead of just setting an individual element.

Then we would have a spec that has both support for multiple pip windows, but also a spec that allows for browsers to define if they support 1 or multiple.

If you want to, I can add these changes as a commit, so that you could preview them easier and maybe getter a better feel for what I'm saying is needed to happen here?

EDIT:
Also note, that in my example here; for browsers that only support 1 element, the "list of picture of picture elements" effectively becomes a list of 1 element, which effectively is just one element, which makes some of the changes almost cost nothing in implementation details.

@theIDinside

Copy link
Copy Markdown
Contributor Author

So for instance we have initiators-of-active-picture-in-picture-sessions
...

So I realize this part is way beyond the scope of these fixes, so we'll leave that for another time.

@beaufortfrancois

Copy link
Copy Markdown
Collaborator

So for instance we have initiators-of-active-picture-in-picture-sessions
...

So I realize this part is way beyond the scope of these fixes, so we'll leave that for another time.

I was going to say the same ;)

@chrisn

chrisn commented Feb 23, 2026

Copy link
Copy Markdown
Member

I'd suggest creating a new issue to discuss adding support for multi-PiP. I'm happy to do that if you prefer?

@theIDinside

Copy link
Copy Markdown
Contributor Author

I'd suggest creating a new issue to discuss adding support for multi-PiP. I'm happy to do that if you prefer?

Right, I sort of realized I accidentally ballooned the scope. I may or may not file an issue for that, because focus right now after asking around for Firefox is to make us webcompatible (chrome and webkit both seem to only support 1 PIP window), so it's not a high priority for me right now.

So I realize this part is way beyond the scope of these fixes, so we'll leave that for another time.

I was going to say the same ;)

Yeah :) I looked at the wall of text and caught myself :P.

@theIDinside

theIDinside commented Feb 23, 2026

Copy link
Copy Markdown
Contributor Author

@beaufortfrancois We have a web platform test that does two consecutive requestPictureInPicture, only for the second one to fail because we don't have user activation (see this test).

But the spec is not stating that we should consume a UA. Should we add that? It seems reasonable to me to have it consume a UA, so that not some script can spam infinite PIP windows, for a browser that would support multi pip window.

@beaufortfrancois

Copy link
Copy Markdown
Collaborator

@beaufortfrancois We have a web platform test that does two consecutive requestPictureInPicture, only for the second one to fail because we don't have user activation (see this test).

But the spec is not stating that we should consume a UA. Should we add that? It seems reasonable to me to have it consume a UA, so that not some script can spam infinite PIP windows, for a browser that would support multi pip window.

Thanks for catching this issue @theIDinside
It is definitely something we should fix

@theIDinside

Copy link
Copy Markdown
Contributor Author

Thanks for catching this issue @theIDinside It is definitely something we should fix

Cool! Apropo user activations, I have some question about that same test, I'll file another issue though, to not pollute this further.

Comment thread index.bs Outdated
Comment thread index.bs Outdated
Comment thread index.bs Outdated
Comment thread index.bs Outdated
of <a>this</a> does not have <a>transient activation</a>, reject |p| with a
{{NotAllowedError}} exception and return |p|.
9. Return promise, and run the remaining steps in parallel:
1. If <a>this</a> is {{pictureInPictureElement}}:

@marcoscaceres marcoscaceres Feb 26, 2026

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this one need to happen async? you can queue the task...

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I'm following you. You mean do the comparison in the queued part as well?

Yeah that seems right. I don't think this check is technically even safe to do in parallel, right?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, the idea would be to move it out of the "in parallel" loop entirely and have a new step 9. which would be:
If <a>this</a> is {{pictureInPictureElement}}, return [=a promise resolved with=] {{pictureInPictureElement}}.

And current step 9. would become a step 10, and start with the creation of the PiP window.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think that is necessarily right, either though? If we move it out of the parallel loop, that means we can do that check, enter the parallel loop (eventually) only to have the previous iteration of the parallel loop invalidate the check.

I think it still needs to be in the in-parallel part (the critical section of the algorithm, as it were), but queued in a task?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, then I think it needs to be done as part of the "queue a global task" step that runs after the possibly lengthy step that creates the PiP window, that is at the point when you synchronize things back with the main thread, otherwise you wouldn't be solving that problem.

Implementers may want to have additional logic in place to avoid creating a window for nothing if pictureInPictureElement is set, but they would be free to do so, what matters is the order of the steps that are observable by the document, and I'd say the inner process by which this window is created is not observable?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’m still not following why though. If you have a pip-window reference on main thread, returning with “a promise resolve with” should handle everything.

you would only go into parallel land if you need to create the window.

However, if checking “this” for a pip window can only be done in parallel, that would make sense… but I’m pretty sure checking for a pip window can be done sync.

@theIDinside theIDinside Feb 27, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I’m still not following why though. If you have a pip-window reference on main thread, returning with “a promise resolve with” should handle everything.

you would only go into parallel land if you need to create the window.

However, if checking “this” for a pip window can only be done in parallel, that would make sense… but I’m pretty sure checking for a pip window can be done sync.

Right, but if you fire two consecutive requests for the same video element, they both can end up waiting to get on the parallel queue, first will complete, the second will have start - and now both has passed the "if this check" in the synchronous parts (because neither had entered PIP at that point)

We would need to check on both sides of the boundary. Is that worth the spec complexity? Because just checking on the parellel side is always safe, checking on the sync side is an optimization implementations can safely make, I believe?

Edit:
Chrome checks explicit on the synchronous side. but chrome also only allows for one pip window. That means they have an implicit check on the parallel side as well as mentioned with discussion with @beaufortfrancois (see comment thread: #245 (comment))

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we just say that there can only be one PiP per top-level browsing context (including all child navigable, including third-party iframes). Then we don't need to deal with multiple pip directly (you can't spin up two pips from the same document).

I checked in Safari and Chrome, it's one pip window per browser!

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

N separate browsers can present their own PiP window, which is fine. Each browser has their own implementation.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we just say that there can only be one PiP per top-level browsing context (including all child navigable, including third-party iframes). Then we don't need to deal with multiple pip directly (you can't spin up two pips from the same document).

I checked in Safari and Chrome, it's one pip window per browser!

I also like this per-top-naivgable approach (even if safari and chrome effectively both only have per-browser). Then we have, a parallel-queue per-top-level browsing context (I'd change that definition of the queue and where it exists) and at most 1 pip window per top-level browsing context. How does that sound?

Comment thread index.bs Outdated
Comment thread index.bs Outdated
Comment thread index.bs Outdated
Comment thread index.bs Outdated
@theIDinside theIDinside force-pushed the fix-request-pip-algorithm branch from d5fe652 to fb4344d Compare April 14, 2026 11:58
@theIDinside

Copy link
Copy Markdown
Contributor Author

So, I think there's one big thing that the spec for requestPictureInPicture needs to handle, and it's been discussed by me and @marcoscaceres in this thread and that is specifically:

  • What should the user agent do, if there already is an element that is PIP'ed, and now the user requests PIP for another video element in the same doc? A doc can only have one picture in picture element (it's just a member).

Because the spec says nothing and throws its hands up, which is no good.

I am guessing that step 10.2 will have to become (after checking that pictureInPictureElement is not this, which is step 10.1):

2. If {{pictureInPictureElement}} is not `null`, run the [=exit Picture-in-Picture algorithm=].

It doesn't restrict per-top-level navigable explicitly, but I would argue that's not that important, the important part is not just overwriting doc's picture in picture element and do nothing. I think enforcing the one-per-top-level-navigable (or even browser), can be implemented here, with this wording as well (meaning, "run the exit pip algorithm if any element anywhere"), but the responsibility is on the user agent to make sure that works. Is that a reasonable take on this? @zcorpan || @marcoscaceres || @beaufortfrancois

@zcorpan

zcorpan commented Apr 29, 2026

Copy link
Copy Markdown
Contributor

I think you can call https://wicg.github.io/document-picture-in-picture/#close-existing-pip-windows which should close both types of PiP windows.

@theIDinside

Copy link
Copy Markdown
Contributor Author

I think you can call https://wicg.github.io/document-picture-in-picture/#close-existing-pip-windows which should close both types of PiP windows.

Are all browsers ok with that spec?

I'll update this PR to do 10.2:

2. If {{pictureInPictureElement}} is not `null`, run the [=exit Picture-in-Picture algorithm=].

And then we can talk about what exit Picture-in-Picture algorithm actually does in a follow up, to not have that be a blocker for this PR.

marcoscaceres and others added 2 commits April 30, 2026 23:17
- Replace {{pictureInPictureElement}} with [=Picture-in-Picture element=]
  in algorithm steps (the IDL getter does retargeting, the algorithm
  needs the raw internal state)
- Introduce |doc| variable to avoid repetitive property chains
- Export the "request Picture-in-Picture" dfn
- Fix broken reference to old "request Picture-in-Picture algorithm" dfn
- Add missing periods on algorithm steps
- Remove unnecessary article before [=this=] in fire-an-event call
- Add link-defaults for "allowed to use" disambiguation

@marcoscaceres marcoscaceres left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we should land this and iterate over the rest.

This is a very solid foundation now.

@beaufortfrancois beaufortfrancois left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with #245 (review) that the current PR is a good foundation modulo the following nits.

Comment thread index.bs Outdated
named `"picture-in-picture"`, return [=a promise rejected with=] {{NotAllowedError}} {{DOMException}}.
4. If [=this=]'s {{readyState}} attribute is {{HAVE_NOTHING}}, return [=a promise rejected with=] {{InvalidStateError}} {{DOMException}}.
5. If [=this=] has no video track, return [=a promise rejected with=] {{InvalidStateError}} {{DOMException}}.
6. If [=this=]'s {{HTMLVideoElement/disablePictureInPicture}} is true, return [=a promise rejected with=] {{InvalidStateError}} {{DOMException}}.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I thought we would keep the "MAY" part for disablePictureInPicture. See https://github.com/web-platform-tests/wpt/pull/58039/changes

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, let's keep the MAY part on this.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@marcoscaceres Does that look good to you as well?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep, that's fine... sorry I missed this last time.

Comment thread index.bs
The {{requestPictureInPicture()}} method, when invoked, MUST
return <a>a new promise</a> |promise| and run the following steps <a>in
parallel</a>:
The {{requestPictureInPicture()}} method steps <dfn export>request Picture-in-Picture</dfn>:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's open a separate issue for this and do this in a follow-up PR.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree, let's do a separate PR for this.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree. That's fine.

Comment thread index.bs Outdated
1. Set |doc|'s [=Picture-in-Picture element=] to [=this=].
2. [=list/Append=] [=relevant settings object=]'s [=origin=] to [=initiators of active
Picture-in-Picture sessions=].
3. If [=this=] is [=fullscreenElement=], [=exit fullscreen=].

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that it was RECOMMENDED before. Shall we keep it that way or force exit fullscreen?

@theIDinside theIDinside May 4, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, probably should be enforced, but I still have reservations. We should probably be as clear as possible, but as @marcoscaceres raised the question; should the algorithm wait for this to complete or not? (which also is an "this may go on until the heat death of the universe"-step). It's not trivial complexity, implementation-wise. From that perspective, maybe RECOMMENDED is better, as it introduces some leeway for differences (which may or may not be observable) between browsers.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I did an implementation check. Both shipping engines exit DOM fullscreen when entering PiP:

Chromium: PictureInPictureControllerImpl::EnterPictureInPictureInternal() explicitly calls Fullscreen::ExitFullscreen(*GetSupplementable()) before the PiP session is created.

WebKit/Safari: Exits DOM fullscreen via the platform layer during the video presentation mode transition. A site-specific quirk for BBC confirms that fullscreenchange fires while pictureInPictureElement is set (the quirk returns null from pictureInPictureElement during the event to avoid confusing site scripts). A separate quirk for ESPN/Vimeo suppresses the proprietary webkitendfullscreen event during the same fullscreen→PiP transition.

Given both engines enforce this, I think it should be normative (keep it as a mandatory algorithmic step).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On timing: neither engine awaits it. Chromium calls Fullscreen::ExitFullscreen() inline (no callback, no waiting for the async steps in the exit fullscreen algorithm to resolve). WebKit handles it through the platform layer, also without blocking PiP entry on fullscreen exit completion.

So I'd suggest: invoke "exit fullscreen" but don't require awaiting its completion. The observable effects (fullscreenElement becomes null, fullscreenchange fires) happen asynchronously per the Fullscreen spec's algorithm, and that matches what both engines ship today. No "heat death of the universe" step needed.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's great, let's keep the PR-approach then.

@beaufortfrancois

Copy link
Copy Markdown
Collaborator

I think you can call https://wicg.github.io/document-picture-in-picture/#close-existing-pip-windows which should close both types of PiP windows.

Are all browsers ok with that spec?

I'll update this PR to do 10.2:

2. If {{pictureInPictureElement}} is not `null`, run the [=exit Picture-in-Picture algorithm=].

And then we can talk about what exit Picture-in-Picture algorithm actually does in a follow up, to not have that be a blocker for this PR.

I would put your suggested line before the following actually to match https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc;l=255;drc=926f5fe0d34799d1452e5230a114e45520488ad7

        1. Set |doc|'s [=Picture-in-Picture element=] to [=this=].

Otherwise LGTM.

@theIDinside

theIDinside commented May 7, 2026

Copy link
Copy Markdown
Contributor Author

I think you can call https://wicg.github.io/document-picture-in-picture/#close-existing-pip-windows which should close both types of PiP windows.

Are all browsers ok with that spec?
I'll update this PR to do 10.2:

2. If {{pictureInPictureElement}} is not `null`, run the [=exit Picture-in-Picture algorithm=].

And then we can talk about what exit Picture-in-Picture algorithm actually does in a follow up, to not have that be a blocker for this PR.

I would put your suggested line before the following actually to match https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/modules/document_picture_in_picture/picture_in_picture_controller_impl.cc;l=255;drc=926f5fe0d34799d1452e5230a114e45520488ad7

        1. Set |doc|'s [=Picture-in-Picture element=] to [=this=].

Otherwise LGTM.

Right, makes sense. We need the task to perform this work, so putting it before that step seems right (unless the exit steps gets re-written to queue a task, but, we'll cross that bridge when we get there).

The exit algorithm needs work as well, because it doesn't take input variables (when it should), instead it's just taking "global" variables/state effectively. I'll file an issue about this.

steps

A document can only support 1 pip element as a member variable.
Therefore exit steps must run, if it's been determined that the pip
element is not the requesting pip element.
Comment thread index.bs Outdated
Comment thread index.bs Outdated
theIDinside and others added 2 commits May 10, 2026 15:41
Co-authored-by: Simon Pieters <zcorpan@gmail.com>
Comment thread index.bs
4. If [=this=]'s {{readyState}} attribute is {{HAVE_NOTHING}}, return [=a promise rejected with=] {{InvalidStateError}} {{DOMException}}.
5. If [=this=] has no video track, return [=a promise rejected with=] {{InvalidStateError}} {{DOMException}}.
6. If [=this=]'s {{HTMLVideoElement/disablePictureInPicture}} is true, user agent may return [=a promise rejected with=] {{InvalidStateError}} {{DOMException}}.
7. If |doc|'s [=Picture-in-Picture element=] is `null`:

@theIDinside theIDinside May 10, 2026

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@marcoscaceres || @beaufortfrancois || @chrisn || @zcorpan

Should we do this change.

Suggested change
7. If |doc|'s [=Picture-in-Picture element=] is `null`:
7. If |doc|'s [=Picture-in-Picture element=] is not [=this=]:

If not, then we would allow subsequent PIP requests to go through without user activation (though for the same document only, so I don't think there's any cross origin shenanigans that can happen here. Well, there could be, but it would not be the fault of the spec, but the implementation in that case).

I think we've discussed this before at some point.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@marcoscaceres

Copy link
Copy Markdown
Member

Filed follow-up issues for the remaining work discussed in this PR:

Ready to merge this solid foundation and iterate on those items separately.

@marcoscaceres marcoscaceres merged commit 9d88d7b into w3c:main May 21, 2026
2 checks passed
@beaufortfrancois

Copy link
Copy Markdown
Collaborator

Thank you @marcoscaceres for merging!

@marcoscaceres

marcoscaceres commented May 21, 2026

Copy link
Copy Markdown
Member

lol, it was accidental... runaway bot 🤖 during our chair's meeting... we were like "we should merge this after we file the issues" and the bot took me too literally.

@marcoscaceres

Copy link
Copy Markdown
Member

Anyway, thanks again for the great work @theIDinside and everyone that contributed to making this happen. It was probably the right time to merge it regardless.

@theIDinside can you just double check the issued ai filed above and check if anything else needed to be filed. I think we captured everything.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

requestPictureInPicture mutating DOM in parallel & other problems Investigate if the algorithm and the implementations need to be updated

9 participants