Let me just say, with my HTML Standard editor hat on, that I am very
excited for these changes. This area is currently a wasteland of
non-interoperable behavior, broken specifications, and
web-developer-expectations violations. The team has done some amazing work
to figure out a model that works well, is conceptually elegant, and has
minimal compat concerns. And although I haven't done my editor review yet,
I'm excited to see that they've sent spec PRs and a good number of web
platform tests for this area.

There may still be compat risks here, but I think the benefits of getting a
reasonable model for base URL inheritance are worth pushing forward (with
careful deployment and a kill-switch). Thanks so much to the team for this
work.

On Sat, Jul 1, 2023 at 3:41 AM W. James MacLean <wjmacl...@chromium.org>
wrote:

> Intent to Ship: Inherit Base URL snapshot for about:blank and
> about:srcdoc, with about:blank inheriting from initiator, not parent.
>
> Contact emails
>
> wjmacl...@chromium.org
>
> cr...@chromium.org
>
> d...@chromium.org
>
> Explainer
>
> None
>
> Specification
>
> https://github.com/whatwg/html/pull/9464 (original proposal
> <https://github.com/whatwg/html/issues/421#issuecomment-1260360824>)
>
> Summary
>
> This work aims to fix issues and improve the compatibility of Chromium's
> implementation of fallback base URL
> <https://html.spec.whatwg.org/C#fallback-base-url> specifically for
> about:srcdoc and about:blank frames. The base URL can be accessed directly
> with document.baseURI, and indirectly when resolving relative URLs.
> Chromium's current behavior differs from Safari & Firefox in several ways.
> Chromium and Safari only partially snapshot the base URL for an
> about:blank/srcdoc document from its creator document, and the
> about:blank/srcdoc document usually does not observe later changes to its
> creator document's base URL. Still, such changes may become visible in
> corner cases (e.g., if the child makes and then reverses changes to its
> own <base> element, its partial snapshot gets updated from its creator).
>
>
>
> We propose that the base URL supplied to about:srcdoc and about:blank
> frames and popups are snapshotted from their initiator at the time the
> navigation begins. The implementation will also allow base URL to work
> correctly for about:srcdoc frames when those frames are in a different
> process from their parent (e.g., sandboxed srcdoc iframes).
>
>
> Web-Visible Changes in Chrome
>
>    -
>
>    Inherit Base URL from Initiator: We propose to change the spec and
>    implementation to inherit base URLs from the navigation initiator
>    rather than from the frame's creator (where creator is the parent
>    document for about:srcdoc/blank iframes, and the opener for about:blank
>    popups). The creator of a frame may be different from the initiator of a
>    navigation that creates a document, and it is surprising when the origin
>    and base URL are inherited from different incompatible frames.
>    -
>
>       Example: Consider the case where a sibling iframe B, with a base
>       url different from its parent A, navigates its sibling iframe to
>       about:blank. Legacy Chrome behavior gives the about:blank iframe its 
> parent
>       A's base url, but its sibling B's origin; our proposal assigns both the
>       origin and base URL from the sibling B (initiator). For srcdoc attribute
>       mutations, both base URL and origin come from the parent as before
>       (unchanged).
>       -
>
>       window.open(): At present in Chrome, window.open() and
>       window.open(“about:blank”) lead to a popup frame with document.baseURI =
>       “about:blank”. With the proposed change, the popup frame will inherit 
> the
>       baseURI from the initiator. This brings Chrome into agreement with 
> Safari,
>       and essentially with Firefox (which still sets base URL to “about:blank”
>       for parameter-free calls to window.open()).
>       -
>
>    Snapshotting Base URL: We propose to change the spec and implementation
>    such that base URLs should not update in response to parent base URLs
>    changing. The current spec allows such dynamic updates only for
>    about:-schemed Documents, per the fallback base URL
>    <https://html.spec.whatwg.org/C#fallback-base-url> mechanism. But
>    these dynamic updates (as opposed to the snapshot we propose) are
>    problematic in that (i) it is difficult to provide if the child frame is
>    cross-process, and (ii) can leak information in cross-origin cases (
>    e.g. the child is sandboxed).
>    -
>
>       Chrome currently has a “broken” snapshotting behavior (described
>       above), though in most cases it behaves as a snapshot.
>       -
>
>       Safari currently has the same broken snapshotting as Chrome.
>       -
>
>       Firefox does not snapshot: it allows a frame to see dynamic changes
>       in its parent.
>       -
>
>    Store in Session History: We propose to change the spec and
>    implementation to save the base URL in session history, alongside the
>    document's origin
>    <https://html.spec.whatwg.org/C#document-state-origin>. Like the
>    session history's origin, the base URL would only be used when
>    repopulating about:blank & about:srcdoc documents from session history.
>    This change is only observable for back/forward navigations to, or
>    session history restorations of these about:-schemed documents,
>    specifically when their original initiator document is not the parent, or
>    no longer exists. From manual testing it appears neither Firefox nor Safari
>    currently persist base urls for about:blank in session history.
>    -
>
>    Detached Document: Frames that have been removed from their parent,
>    but are still alive and still have their document, will keep their
>    snapshotted base URL in the proposed behavior. The current spec for
>    about:-schemed iframes would have it refer to a non-existent parent in such
>    cases, which so the behavior is ill-defined.
>
>
> Additional discussion of the underlying issues involved may be found at:
> <https://github.com/whatwg/html/issues/421#issuecomment-1260360824>
>
>    -
>
>    https://github.com/whatwg/html/issues/421#issuecomment-1260360824
>    -
>
>    https://github.com/whatwg/html/issues/3989
>    -
>
>    Design Doc
>    
> <https://docs.google.com/document/d/1e7T1YR5aGDg-eGHKDNnKUWcz1Dr38t_O0-XJqsMeZcE/edit?usp=sharing&resourcekey=0-qCAYJPulnTdo9hV_dPCdhw>
>    -
>
>    https://github.com/whatwg/html/issues/6316
>
> Blink component
>
> Blink>
> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3EJavaScript%3EWebAssembly>
> HTML>IFRAME
>
> TAG review
> TAG review status
>
> Not applicable
>
> Risks
>
> This change will cause about:blank inherit from the initiator of the
> navigation, instead of from the parent frame. In many cases these are the
> same. When they differ, pages may observe the change in behavior. To work
> around the change, a <base> element can be used to explicitly set the
> desired base url.
>
>
> Interoperability and Compatibility
>
> At present Gecko and WebKit differ slightly, and our implementation more
> closely matches WebKit in that it snapshots the inherited base url at the
> time of navigation. Our proposed implementation differs from both in that
> the initiator provides the base url.
>
>
> Gecko: https://github.com/mozilla/standards-positions/issues/813
>
> WebKit: Support https://github.com/WebKit/standards-positions/issues/197
>
> Web developers:
>
> Other signals:
>
>
> WebView application risks
>
> Yes, there is potential for risk here, if apps depend on the previous web
> visible behavior of base URL inheritance. We will be monitoring the rollout
> and can disable on Android WebView if any issues arise.
>
>
>
>
> Debuggability
>
> Existing support for observing document.baseURI in DevTools.
>
> Will this feature be supported on all six Blink platforms (Windows, Mac,
> Linux, Chrome OS, Android, and Android WebView)?
>
> Yes
>
> Is this feature fully tested by web-platform-tests
> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md>
> ?
>
> Yes
>
>    -
>
>    html/infrastructure/urls/terminology-0
>    
> <https://github.com/web-platform-tests/wpt/tree/master/html/infrastructure/urls/terminology-0>
>    -
>
>    html/infrastructure/urls/base-url/
>    
> <https://github.com/web-platform-tests/wpt/tree/master/html/infrastructure/urls/base-url/>
>    -
>
>    CL 4652304
>    <https://chromium-review.googlesource.com/c/chromium/src/+/4652304>
>
>
> Flag name
>
> UI flag: chrome://flags/#enable-new-base-url-inheritance-behavior
>
> Command line flag: --enable-features=NewBaseUrlInheritanceBehavior
>
> Requires code in //chrome?
>
> False
>
> Estimated milestones
>
> M116
> (Implementation has been complete for a while now, and will be launching
> with a field trial first.)
>
> Anticipated spec changes
>
> Beyond our proposal, there was
> <https://github.com/whatwg/html/issues/8105> some discussion
> <https://github.com/whatwg/html/issues/9025> of future changes to
> prohibit base URL inheritance for sandboxed about:-schemed documents, but
> there are
> <https://github.com/whatwg/html/issues/8105#issuecomment-1183642551>
> compat concerns
> <https://github.com/whatwg/html/issues/9025#issuecomment-1498239984>, so
> that work is not included here.
>
> Link to entry on the Chrome Platform Status
>
> https://chromestatus.com/feature/5161101671530496
>
> --
> You received this message because you are subscribed to the Google Groups
> "blink-dev" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to blink-dev+unsubscr...@chromium.org.
> To view this discussion on the web visit
> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADAYvoe_DU3j3Viiz1uM2qWjSUOBLEMnorerdHOBAcptOW7kag%40mail.gmail.com
> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CADAYvoe_DU3j3Viiz1uM2qWjSUOBLEMnorerdHOBAcptOW7kag%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAM0wra-2-MP_KecE6rBx5xcJb6QiM0BCpOEEoRdkJ_BxMHWwug%40mail.gmail.com.

Reply via email to