Commit Graph
64 Commits
Author SHA1 Message Date
Moonchild 3a4dc8de41 Issue #3020 - Clear currentScript after running microtasks
Per HTML spec:

`document.currentScript` Returns null if the Document is not currently
executing a script or SVG script element (e.g., because the running
script is an event handler, or a timeout), or if the currently executing
script or SVG script element represents a module script.

---

It's ambiguous about whether, for micro tasks, it should return null.
(This section is labelled as "non-normative", as well.)
However, mainstream browsers handle this differently and don't return
null after running microtasks, so we need to clear this and not assume
null persistently, and run the auto-updater for it, regardless if
it's a module or not.
2026-03-24 20:44:13 +01:00
Moonchild f7215fc685 Issue #3020 - document.currentScript should be null in modules
This is done correctly in `EvaluateScript`, but `CreateModuleScript` was
still setting currentScript to an element.
2026-03-24 15:50:34 +01:00
Basilisk-Dev d0ec80aa86 Issue #2229 Followup - Handle re-entrant module instantiation/evaluation during async module loads 2026-02-11 09:46:46 -05:00
Moonchild 7d5bb477dd Issue #2736 - Part 6: Re-work <script> src attribute.
Use subject principal as triggering principal in <script> "src" attribute.
2025-04-29 09:47:42 +02:00
Moonchild ace69a4d32 Issue #2736 - Part 1: Provide more consistent principals to CSP.
We're currently fairly vague and inconsistent about the values we provide to
content policy implementations for requestOrigin and requestPrincipal. In some
cases they're the triggering principal, sometimes the loading principal,
sometimes the channel principal.

Our existing content policy implementations which require or expect a
loading principal currently retrieve it from the context node.
Since no current callers require the principal to be the loading
principal, and some already expect it to be the triggering principal
(which there's currently no other way to retrieve), a choice was made
to pass the triggering principal whenever possible, but use the loading
principal to determine the origin URL.
2025-04-26 20:07:16 +02:00
Moonchild 118bc5ff5d Issue #2692 - Part 6: Don't #include js/SourceBufferHolder.h in jsapi.h.
Instead, require users to do so. This is a minor translation-unit size
improvement for anyone who never has to use SourceBufferHolder other than
by reference.
2025-03-04 20:16:54 +01:00
Martok d3c9bff055 Issue #2686 - Don't rely on return value of ExecutionContext::Compile when the context may forbid running scripts
This is relevant if scripting is terminated due to execution timeout but there are setTimeout/Interval callbacks pending
or if scripting is disabled altogether.
2025-01-26 21:46:31 +01:00
Moonchild edf4210e12 Issue #2641 - Speculative load changes for referrerpolicy 2024-10-21 12:36:11 +02:00
Boris Zbarsky 15514da406 Bug 1493449 - Change the default credentials mode for module scripts from 'omit' to 'same-origin'
Resolves #2642
2024-10-01 00:03:06 +02:00
Moonchild 8fc5e4bd24 Issue #2466 - Part 2: Implement script-src-elem and script-src-attr 2024-02-04 20:15:14 +01:00
Moonchild 73e94dd628 Issue #2466 - Part 1: Reduce nsContentPolicy type usage.
Use CSPDirective instead, since it directly deals with CSP anyway.
This cleanup prepares for the following changes.
2024-02-04 13:33:32 +01:00
Brian Smith 3dd8bc0ddb Issue #2402 - CSP Violation events should have the correct sample for inline contexts.
https://bugzilla.mozilla.org/show_bug.cgi?id=1473587
Add preference to increase max length of CSP report source sample.
https://bugzilla.mozilla.org/show_bug.cgi?id=1415352
Return valid columnNumber value in CSP violation events.
https://bugzilla.mozilla.org/show_bug.cgi?id=1418246
2024-01-08 07:46:11 -06:00
Martok 980956063f Issue #2435 - Make CycleCollectedJSContext.h dependency explicit 2024-01-05 17:12:34 +01:00
Brian Smith 65d318f307 Issue #2387 - Collection of fixes related to a crash while canceling a dynamic import.
Add AddRef/Release hooks for embedding's script or module private value and set this script source object where appropriate.
https://bugzilla.mozilla.org/show_bug.cgi?id=1519140 Partial, no Value passing changes.
Clear the list of dynamic import requests after cancelling them in ScriptLoader::ParsingComplete as we do for other requests.
https://bugzilla.mozilla.org/show_bug.cgi?id=1291535
ScriptLoader::OnStreamComplete never returns a failure.
https://bugzilla.mozilla.org/show_bug.cgi?id=1627275
Also cancel the correct kind of parser for Modules.
2023-11-27 23:30:25 -06:00
Brian Smith beabbde706 Issue #2252 - Prevent crash when attempting to load a script with execution disallowed.
This issue is due to the ExecutionContext added in Issue #1691 not handling GetScript()
in a context where script execution is not allowed.  This expressed itself in crashes when
playing MP4s with the NoScript extension installed and enabled.
2023-05-21 07:55:37 -05:00
Brian Smith c29f841bdc Issue #1691 - Follow-up: Fix videojs and potentially other problems.
When rewriting the ExecutionContext code in ScriptLoader I accidentally removed some required code.
2023-05-02 10:44:02 -05:00
Brian Smith 1adf442e92 Issue #1691 - Part 12: Fix return value in ExecScript() and debug assert in ParseTask.
https://bugzilla.mozilla.org/show_bug.cgi?id=1331662
Replace nsJSUtils::EvaluateString calls by ExecutionContext scopes.
ExecutionContext: The mRetValue is not used even though it is checked in various asserts.
This is how it is in the Mozilla code even years later, only the passed in value is used.
ParseTask: JoinDecode() and JoinCompile() run the same code but the type is different
causing a debug assert when it checks the type Script vs ScriptDecode.

(cherry picked from commit 8f577428b7834b7d0f0d5afacbe060fbb1ff2136)
2023-04-27 13:35:21 -05:00
Brian Smith 22d254b479 Issue #1691 - Part 10: Add and use method to annotate CC crashes with a class name.
https://bugzilla.mozilla.org/show_bug.cgi?id=1277260
Make PtrInfo into a class and mark it final.
Also fix an erroneous debug assert because mBaseURL not set in one code path.

(cherry picked from commit a1890054011adf0cf87be0d56047418c9f201420)
2023-04-27 13:35:07 -05:00
Brian Smith 30a6828f47 Issue #1691 - Part 9: Make import() work when the active script is in another document.
https://bugzilla.mozilla.org/show_bug.cgi?id=1342012
Associate event handler with active script when they are compiled.

(cherry picked from commit 1a3cc5d6828a05a6309d959fad3c7e959ab9eb8d)
2023-04-27 13:35:01 -05:00
Brian Smith 914299b8ba Issue #1691 - Part 8: Fix --enable-debug builds and continue dynamic module import changes.
https://bugzilla.mozilla.org/show_bug.cgi?id=1342012
Support import from timeout handlers by associating the initiating script with the compiled JSScript.
Fix error message that covers all import() failures that don't throw a JS exception.
https://bugzilla.mozilla.org/show_bug.cgi?id=1331662
Partial - Replace nsJSUtils::EvaluateString calls by ExecutionContext scopes.
Left EvaluateString() in nsXBLProtoImplField.cpp until ExecutionContext errors can be fixed.

(cherry picked from commit 22fcfc77971a9bb204df664c474681f4dcf54211)
2023-04-27 13:34:55 -05:00
Brian Smith e29f4488b1 Issue #1691 - Part 7f: Split up compile and execute so we can use ClassicScript.
https://bugzilla.mozilla.org/show_bug.cgi?id=1342012
Refactor nsJSUtils::ExecutionContext to separate compilation and execution steps and allow extraction of compiled JSScript.
https://bugzilla.mozilla.org/show_bug.cgi?id=1366773
Move buffer argument from JS::StartIncrementalEncoding to JS::FinishIncrementalEncoding.

(cherry picked from commit d4b520b08b958e116dfeeffdc61f3425610d1ce9)
2023-04-27 13:34:48 -05:00
Brian Smith 8431e52405 Issue #1691 - Part 7e: Dependencies for required to finish part 7d.
https://bugzilla.mozilla.org/show_bug.cgi?id=1331662
Reimplement EvaluateString using the ExecutionContext class.
https://bugzilla.mozilla.org/show_bug.cgi?id=1316078
Extract redudant code into StartOffThreadParseTask.
Use an ExclusiveContext instead of a JSContext in XDR functions.
Add a script decoder as a valid off-main-thread parse-task.
https://bugzilla.mozilla.org/show_bug.cgi?id=900784
Add nsJSUtils functions for encoding and decoding the bytecode.
https://bugzilla.mozilla.org/show_bug.cgi?id=1316081
Add XDRIncrementalEncoder to replace delazified LazyScript in the encoded XDR buffer.
Add an XDRIncrementalEncoder instance on the ScriptSource.
Expose a new JSAPI to incrementally encode bytecode when it is generated.
https://bugzilla.mozilla.org/show_bug.cgi?id=1334091
XDR function use the sourceObject instead of the enclosingScript as argument.

(cherry picked from commit d6de9a669f4b2f5115670bd771cd53d7cfb3956a)
2023-04-27 13:34:41 -05:00
Brian Smith 3a59f91dee Issue #1691 - Part 7d: Allow dynamic import in cases where there's no referencing script or module.
Support dynamic import from classic scripts by creating ClassicScript objects and associating them with the compiled.
https://bugzilla.mozilla.org/show_bug.cgi?id=1342012
This patch is incomplete, some code in ScriptLoader::EvaluateScript() could not be applied for missing dependencies.
Part 7e will apply the missing dependencies and finish the patch.

(cherry picked from commit ce31a906e801b72f06385b0755710317ccf3658b)
2023-04-27 13:34:33 -05:00
Brian Smith 1ddeac519b Issue #1691 - Part 7b: Make load request element optional.
https://bugzilla.mozilla.org/show_bug.cgi?id=1342012

(cherry picked from commit 169bb5d2ada59026fb6407716a7b3862810c9b97)
2023-04-27 13:34:20 -05:00
Brian Smith 6b69dad2aa Issue #1691 - Part 6c: Fix a few issues with the earlier commits.
Need PNK_CALL_IMPORT and PNK_IMPORT_META in the node children list or it will abort.
When porting ScriptFetchOptions support, I had 2 constructors, I picked the wrong one.
Missed adding the preference javascript.options.dynamicImport to all.js.

(cherry picked from commit b95ccb711dc41b343d02ae69b3dc4747bbbe86fb)
2023-04-27 13:33:47 -05:00
Brian Smith e4c920f397 Issue #1691 - Part 6b: Initial browser support for dynamic import from module scripts.
https://bugzilla.mozilla.org/show_bug.cgi?id=1342012
Factor out script fetch options from script load request classes.
https://bugzilla.mozilla.org/show_bug.cgi?id=1480720
Remove support for version parameter from script loader.
https://bugzilla.mozilla.org/show_bug.cgi?id=1428745

(cherry picked from commit 3ec2529aa6303f6950622e3cb91a23580649c73b)
2023-04-27 13:33:36 -05:00
Brian Smith 6eecfad57c Issue #1691 - Part 3: Finish implementing import meta.
https://bugzilla.mozilla.org/show_bug.cgi?id=1427610

(cherry picked from commit a8625238ac846fb7eb103646ddb8634a5860f067)
2023-04-27 13:32:52 -05:00
Brian Smith 7223fb518d Issue #1691 - Part 1: Provide a way of associating a private value with a script
or module.

This is a prerequisite for dynamic import

(cherry picked from commit 2e2972647ee29340df51a804f05e40fc1da2c89b)
2023-04-27 13:28:56 -05:00
Moonchild 7d49b154e2 Issue #1840 - Try to deal with bad website scripting loading/unloading modules.
Apparently Bing does rapid-fire loading/unloading of module scripts that
causes our attempts at resolving and initializing them to end up with
null fetched modules.
Returning null is probably a better way to handle this than crashing
on ms->ModuleRecord() ;-)
2022-04-08 20:23:10 +02:00
Moonchild 7c90c0205c Issue #1822 - Part 4: Remove URL classifier and internal blocklist errors.
This removes NS_ERROR_{TRACKING|MALWARE|PHISHING|UNWANTED|BLOCKED}_URI
that are no longer in use.
2022-04-01 16:05:02 +02:00
Moonchild a95439db61 Issue #1822 - Part 3: Remove LOAD_CLASSIFIER_URI and various
helper functions.
2022-04-01 16:03:01 +02:00
Moonchild 060e3eb0c8 Revert "Issue #1691 - Part 1: Provide a way of associating a private value with a script"
This reverts commit 15914ec578.
2020-11-28 10:18:10 +00:00
Moonchild 15914ec578 Issue #1691 - Part 1: Provide a way of associating a private value with a script
or module.

This is a prerequisite for dynamic import
2020-11-27 15:47:49 +00:00
Moonchild a680bdc637 Issue #1656 - Part 1: Nuke most vim config lines in the tree.
Since these are just interpreted comments, there's 0 impact on actual code.
This removes all lines that match /* vim: set(.*)tw=80: */ with S&R -- there are
a few others scattered around which will be removed manually in a second part.
2020-09-23 13:55:00 +00:00
Moonchild df55ce9037 Issue #618 - Clear the module map when changing a Document's global and add
release build assertions for mismatching compartments.
2020-09-08 11:00:27 +00:00
Moonchild 8e5d9da5eb Issue #618 - Make ES6 modules work for resource: URIs 2020-09-08 08:22:28 +00:00
Moonchild 92ef206274 Issue #618 - Implement preloading of module scripts.
This hooks up module scripts to the existing preload mechanism.
2020-08-27 15:44:53 +00:00
Gaming4JC 38d13e2779 Issue #618 - Don't preload nomodule scripts when modules are enabled
Ref: BZ 1382020
2020-08-26 11:19:42 -04:00
Moonchild b78f53ffb0 Issue #618 - (async) Implement async attribute for inline module scripts.
This commit does several things:
- Moves the pref check from ScriptLoader to ns[I]Document so it can be called on
the document.
- Changes the atrribute freezing function to a better name that takes the
document as a parameter.
- Sets the proper async/defer attributes on HTML script elements based on
keywords and whether they are module scripts or not.
2020-08-25 07:06:43 +00:00
Moonchild 8b397a63af Issue #618 - (async) Keep track of script modes in a single mode state.
This simplifies handling of combinations of async/defer by assigning one and
only one state to scripts.
If async then always async > if defer or module then defer > otherwise blocking.
2020-08-25 05:52:40 +00:00
Moonchild 2ca1cbe2f5 Issue #618 - (async, preload) Correctly pass info about async/defer to parser.
This makes sure we don't block body-referred sub-resources by head-referenced
defer and async scripts. This is important for all script loads, not just
modules, but is added here because it was run into while implementing modules.
2020-08-24 11:13:16 +00:00
Moonchild 95e0f114e2 Issue #618 - (async) Split out function to add async request. 2020-08-24 10:15:00 +00:00
Moonchild a0ef1c07de Issue #618 - Rename some script load request flags to be more descriptive. 2020-08-24 09:56:03 +00:00
Moonchild c5ab177485 Issue #618 - Make document.currentScript null in modules.
Because the spec says so.
2020-08-23 14:08:32 +00:00
Jon Coppeard 76e5f863aa Issue #618 - Fix processing of non-parser-generated module scripts. 2020-08-22 18:35:57 +00:00
Jon Coppeard f0175ebc76 Issue #618 - Handle errors for inline module scripts and ensure we update the
module map after fetch errors.
2020-08-22 10:13:37 +00:00
Moonchild cbbfd0f2d7 Issue #618 - Split SRI verification out from OnStreamComplete. 2020-08-22 09:51:42 +00:00
Moonchild 090a487388 Issue #618 - Split handling of load errors out from OnStreamComplete. 2020-08-22 09:27:12 +00:00
Jon Coppeard 073e914eba Issue #618 - Don't mute errors for module scripts because they always use CORS 2020-08-22 07:08:10 +00:00
Moonchild 86f128d412 Issue #618: Pass down referrer and referrer policy when fetching modules.
Because the spec says so.
2020-08-13 17:13:23 +00:00