Commit Graph

25 Commits

Author SHA1 Message Date
Kingsley Yung
daed36d4bf script: Implement Sanitizer.get() method (#44452)
Implement the `Sanitizer.get()` method.

Same as the previous patches on Sanitizer API, the steps related to
processing instructions are marked as TODO. Support for process
instructions was recently added to the specification, and we will
implement it later when tests are ready.

Testing: Covered by WPT tests in
`sanitizer-api/sanitizer-get.tentative.html`
Fixes: Part of #43948

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-23 06:01:36 +00:00
Kingsley Yung
6934a65e5c script: Validate sanitizer configuration (#44421)
Implement sanitizer configuration validation algorithm, and complete the
"set a configuration" algorithm.

The steps related to processing instructions are marked as TODO. Support
for process instructions was recently added to the specification, and we
will implement it later when tests are ready.

Specification:
- https://wicg.github.io/sanitizer-api/#sanitizerconfig-valid
- https://wicg.github.io/sanitizer-api/#sanitizer-set-a-configuration

Testing: Covered by WPT tests in
`sanitizer-api/sanitizer-config.tentative.html`
Fixes: Part of #43948

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-22 12:28:57 +00:00
Kingsley Yung
4a5fe14788 script: Canonicalization of sanitizer configuration (#44335)
Implement the canonicalization of sanitizer configuration, along with
the canonicalization of element with attributes, element, attribute and
name. They are implemented for the `SanitizerConfig`,
`SanitizerElementWithAttributes`, `SanitizerElement` and
`SanitizerAttribute`, through the `SantiizerConfigAlgorithm`,
`Canonicalization` and `NameCanonicalization` trait.

Note that, in the canonicalization of sanitizer configuration, the steps
related to processing instructions are marked as TODO. The feature of
supporting process instructions has just been added to the specification
recently, and the WPT tests are not yet in place. We will add this
support once the tests are ready.

`SanitizerElementWithAttributes`, `SanitizerElement` and
`SanitizerAttribute` are unions of string and dictionary. This makes
accessing its member fields cumbersome. So, the `NameMember` and
`AttributeMember` trait are added to provide helper function for them to
reduce boilerplate code.

Specification:
-
https://wicg.github.io/sanitizer-api/#sanitizer-canonicalize-the-configuration
-
https://wicg.github.io/sanitizer-api/#canonicalize-a-sanitizer-element-with-attributes
- https://wicg.github.io/sanitizer-api/#canonicalize-a-sanitizer-element
-
https://wicg.github.io/sanitizer-api/#canonicalize-a-sanitizer-attribute
- https://wicg.github.io/sanitizer-api/#canonicalize-a-sanitizer-name

Testing: Covered by WPT tests in `sanitizer-api/` subdirectory.
Fixes: Part of #43948

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-21 10:45:39 +00:00
Kingsley Yung
617c28f631 script: Default configuration of sanitizer (#44290)
This patch implements the built-in safe default configuration for
`Sanitizer` constructor.

Specification:
https://wicg.github.io/sanitizer-api/#sanitization-defaults

Testing: Covered by WPT test in
`sanitizer-api/sanitizer-default-config.tentative.html`.
Fixes: Part of #43948

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-17 07:34:38 +00:00
Kingsley Yung
b23ee51d00 script: Initialize Sanitizer API implementation (#44198)
Initialize Sanitizer API implementation with partially implemented
constructor and `get()` methods of the `Sanitizer` interface, which
allows the sub-sequential implementation to be tested by WPT.

The `Sanitizer` interface is hidden behind the feature flag
`dom_sanitizer_enabled`, which is disabled by default.

Specification: https://wicg.github.io/sanitizer-api/

Testing: Enable WPT tests for Sanitizer API.
Fixes: Part of #43948

---------

Signed-off-by: Kingsley Yung <kingsley@kkoyung.dev>
2026-04-16 10:31:53 +00:00
Tim van der Lippe
6656061fc3 script: Implement frame-ancestors CSP check (#43630)
Requires communication between the script thread and the constellation
to be able to retrieve the origin of a cross-origin document. However,
in the fast-path where the document resides in the same script-thread,
we use the `frame_element` instead.

If no CSP list is active, then we skip all this logic, to have a minimal
impact on document navigation.

Part of #4577
Fixes #36468

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-03-28 08:54:17 +00:00
Tim van der Lippe
f340042c1d script: Pass &mut JSContext to FetchResponseListener::process_response_chunk (#43657)
Fixes #42841

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-26 18:05:24 +00:00
Euclid Ye
2f5e3fdb5c cargo: Rename workspace-local library starting with c to servo_* (#43622)
- canvas 
- constellation_traits
- canvas_traits
- constellation

Testing: This should not change any behaviour.

---------

Signed-off-by: Euclid Ye <yezhizhenjiakang@gmail.com>
2026-03-25 06:04:57 +00:00
Tim van der Lippe
01a29209b2 script: Implement support for X-Frame-Options (#43539)
We now check for this header and corresponding logic. The WPT tests
mostly pass, but rely on the `contentDocument` of the iframe to be
`null`. This is not something we did before, which means that iframes
were able to access the contents of error pages.

Instead, we now mark the document as internal with an opaque origin
according to the spec [1]. We shouldn't do this post-fact, but is
required since we first need to construct the document and enter its
realm, before we determine that it is an invalid document.

Fixes #16103

[1]:
https://html.spec.whatwg.org/multipage/document-lifecycle.html#navigate-ua-inline

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-23 06:14:27 +00:00
Tim van der Lippe
7b9b75c545 script: Fix current URL for CSP requests (#43438)
The CSP crate was incorrectly using the request URL for both checking if
policies were matching, as well as reporting that URL. However, the CSP
specification uses the current URL to check for policies and the url for
reporting a violation.

Therefore, set the new current_url field for these requests, leaving the
ws scheme URLs as a special case. We also should take redirects into
account for navigations (which is only relevant for forms), but LoadData
currently has no notion of keeping track of that.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-22 11:12:22 +00:00
Tim van der Lippe
8f699b1f17 script: Pass &mut JSContext to submit_timing_data (#43479)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 15:31:46 +00:00
Tim van der Lippe
0336c8084b script: Set correct referrer for CSP violations (#43483)
The spec has explicit steps for it, where we were calling a different
algorithm before. This passes more assertions in
`content-security-policy/securitypolicyviolation/securitypolicyviolation-block-image.sub.html`
but since line numbers aren't correct, the test isn't fully passing yet.

Testing: WPT

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 15:05:58 +00:00
Tim van der Lippe
3d4cfa4718 net: Remove process_request_eof (#43477)
This is no longer present in the spec. Instead, the
`process_request_body` is the new way. These two
methods were called right after each other and there was only 1
implementation in `htmlvideoelement`. That implementation is now moved
to `process_request_body` and hence we can remove the unnecessary
method.

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-20 10:51:33 +00:00
Javier Olaechea
eea60b8eb1 script: Pass &mut JSContext to FetchResponseListener::process_response (#43259)
Add the cx parameter to `fn process_response` in the
`FetchResponseListener` trait and the traits that that interface change
requires. Chose to add it as the first parameter, following the same
order that `FetchResponseListener::process_response_eof` uses.

Testing: Checked that servo builds locally as well as `./mach fmt` and
`./mach test-tidy`. I don't think more tests are needed as we are not
introducing new functionality
Fixes: #42840

---------

Signed-off-by: Javier Olaechea <pirata@gmail.com>
2026-03-19 06:22:00 +00:00
Tim van der Lippe
6a788b1bf3 script: Strip blockedURI resource (#43367)
This was missed when implementing support for reporting CSP violations.

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-18 21:03:16 +00:00
Tim van der Lippe
48f1da9fe6 script: Pass &mut JSContext to TrustedScript::get_trusted_type_compliant_string (#43362)
Part of #40600

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-17 20:26:58 +00:00
Tim van der Lippe
f8b06d7291 script: Move reporting interfaces (#43270)
Also moves some relevant methods from GlobalScope that were only used
within ReportingObserver.

Part of #38901

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-15 09:01:23 +00:00
Tim van der Lippe
3c852261b9 script: Pass &mut JSContext in CSP code (#43184)
Part of #40600

Testing: it compiles

---------

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
Signed-off-by: Tim van der Lippe <TimvdLippe@users.noreply.github.com>
2026-03-14 21:42:02 +00:00
Tim van der Lippe
d0d84f40c7 script: Move CSPViolationReportTask (#43269)
This was the only struct leftover in security_manager. Therefore, this
both moves and renames the files.

Part of #38901

Testing: It compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-14 19:43:24 +00:00
Tim van der Lippe
aae5c4cd97 script: Move Trusted Types interfaces to script/dom/trustedtypes (#43181)
Part of #38901 

Testing: it compiles

Signed-off-by: Tim van der Lippe <tvanderlippe@gmail.com>
2026-03-11 16:26:56 +00:00
dyegoaurelio
453166752b Fix CSP nonce validation and violation reporting for external scripts (#40956)
This PR fixes two related issues with Content Security Policy (CSP)
nonce validation for external scripts:

1. Missing nonce validation for external scripts with malformed
attributes
2. Incorrect violation event reporting for blocked external resources


This makes servo closer to passing the `nonce-enforce-blocked` wpt test.

The remaining failures are blocked by required changes in the html
parser.

1. Svg script support (https://github.com/servo/html5ever/issues/118)
```html
<svg xmlns="http://www.w3.org/2000/svg">
<script attribute attribute nonce="abc">
    t.unreached_func("Duplicate attribute in SVG, no execution.")();
</script>
</svg>
```

2. Duplicate attrs check
the html parser needs to provide this flag, as mentioned on the original
commit message
(4821bc0ab0)

```html
<script attribute attribute nonce="abc">
    t.unreached_func("Duplicate attribute, no execution.")();
</script>
<script attribute attribute=<style nonce="abc">
    t.unreached_func("2# Duplicate attribute, no execution.")();
</script>

[...]

<script src="../support/nonce-should-be-blocked.js?5" attribute attribute nonce="abc"></script>
```

I've also created a PR to implement the duplicate attrs flag on
html5ever https://github.com/servo/html5ever/pull/695

Testing: doesn't fixes the aforementioned wpt test yet.
Fixes: part of #36437

---------

Signed-off-by: Dyego Aurélio <dyegoaurelio@gmail.com>
2026-02-27 13:17:33 +00:00
WaterWhisperer
f405ddeaf7 script: Implement base-uri CSP check (#42272)
Testing: `./mach test-wpt /content-security-policy/base-uri`
Fixes: #42261

Signed-off-by: WaterWhisperer <waterwhisperer24@qq.com>
2026-02-01 17:03:23 +00:00
Josh Matthews
a97a345d6e script: Check same-origin-domain when evaluating javscript: URLs. (#41969)
These changes introduce a new OriginSnapshot type, which is an immutable
version of MutableOrigin (ie. an origin that includes an optional domain
modifier). This is now propagated as part of LoadData's origin, allowing
us to perform the same-origin-domain check for javascript: URLs as
needed.

Testing: Newly-passing tests.

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
2026-01-18 02:32:51 +00:00
Anonmiraj
b207be05d9 change some allows to expects (#41040)
Changed some allow to expects and removed the unfulfilled expectations.

Testing: Refactor
Part of: #40383

Signed-off-by: anonmiraj <nabilmalek48@gmail.com>
2025-12-05 07:23:32 +00:00
dyegoaurelio
ab5fbad90c script: Move CSP DOM interfaces to script/dom/security (#40843)
*Describe the changes that this pull request makes here. This will be
the commit message.*
Move CSP DOM interfaces to `script/dom/security`


Testing: Just a refactor, it doesn't require tests
Fixes: part of #38901

Signed-off-by: Dyego Aurélio <dyegoaurelio@gmail.com>
2025-11-24 11:48:06 +00:00