aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/script_runtime.rs
Commit message (Collapse)AuthorAgeFilesLines
* Use Foo_Binding instead of FooBinding for namespace modules (#30447)Samson2023-09-301-1/+1
| | | | | * Update Codegen.py to emit Foo_Binding instead of FooBinding * s/FooBinding/Foo_Binding/g
* Strict import formatting (grouping and granularity) (#30325)Samson2023-09-111-65/+52
| | | | | * strict imports formatting * Reformat all imports
* Use MozTools 4 and update mozjs (#30326)Samson2023-09-111-1/+2
| | | | | | | | | | | | | | | | | | | * Update mozjs * moztools4 in bootstrap * no autoconf * tidy * switch to servo-build-deps * update mozjs for real * glue mozjs * fmt * move to servo/mozjs
* remove `extern crate` (#30311)Samson2023-09-081-0/+2
| | | | | | | | | | | * remove extern crate * Update components/script_plugins/lib.rs Co-authored-by: Martin Robinson <mrobinson@igalia.com> --------- Co-authored-by: Martin Robinson <mrobinson@igalia.com>
* Use mozjs tracing infrastructure (#29918)Samson2023-08-101-2/+1
| | | | | | | * Update mozjs https://github.com/servo/mozjs/commit/64711ec2e6dc4595df691bffc7f1e5052ab86c8d also fixes https://github.com/servo/servo/issues/30043 * Move to mozjs Traceable and introduce CustomTraceable
* Fix race condition and other issues related to Worker destruction. (#30066)Mukilan Thiyagarajan2023-08-031-8/+18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * Fix race condition in Worker destruction During shutdown, the main script thread calls JS_RequestInterruptCallback(cx) for each worker thread it owns where cx is the JSContext* created for that worker. Although JS_RequestInterruptCallback is safe to call from threads other than the worker thread, it is possible the JSContext* has already been destroyed For example, as noted in #30022, since the main thread sets the worker's `closing` flag to true to signal termination before it calls JS_RequestInterruptCallback, we can have a race condition where the worker exits its event loop when `closing` flags is set and then it (worker thread) destroys its own JSContext and JSRuntime. When the main thread resumes, it will call JS_RequestInterruptCallback for the worker's context, leading to a use-after-free bug. This patch solves this issue by improving the existing `ContextForRequestInterrupt` abstraction used for sharing the Worker's associated JSContext* with the parent script thread. Instead of simply wrapping a plain `*mut JSContext`, we now wrap the `*mut JSContext` in a nullable mutex i.e Mutex<Option<*mut JSContext>> The mutex lock needs to be held by the parent thread when it calls JS_RequestInterruptCallback. Similary, before the worker destroys its JSContext, it locks and sets the Option to None, signaling that the JSContext can no longer be used for interrupting the worker. This patch also fixes the issue in #30052 by enforcing the use of ContextForRequestInterrupt abstraction which ensures the correct JSContext is used by the main thread when Worker.terminate is called. Fixes #30022, #30052 * Fix Worker.importScripts to handle termination Fixing #30052 uncovered this issue in the implementation of `importScripts` method. After the fix for #30052, the WPT test `/workers/Worker-terminate-forever-during-evaluation.html` started to crash because when evaluation doesn't succeed `importScripts` always returns Error::JSFailed code to the caller, which indicates that there is a Dom/JS exception to be thrown. However, this is not true when the script is terminated, which causes the generated binding layer for 'importScript` to fail the assertion that there is a pending exception. This patch makes `importScripts` work similar to the [logic that evaluates the top-level script][1] of the Worker - it simply prints `evaluate_script failed - (terminated)' if the worker is terminating [1]: https://github.com/servo/servo/blob/3fea90a231a94338d67712398fe3d2ba9d402211/components/script/dom/workerglobalscope.rs#L434
* Make GlobalScope.get_cx a static method.Josh Matthews2023-05-201-3/+3
|
* Clean up debug optionsMartin Robinson2023-05-011-1/+1
|
* Format.Josh Matthews2022-11-231-8/+5
|
* Changes for spidermomkey upgrade.Josh Matthews2022-11-231-7/+8
|
* refactor(script): move `crate::dom::bindings::{utils → ↵yvt2021-07-131-3/+4
| | | | principals)::ServoJSPrincipal`
* doc(script): prettify a commentyvt2021-07-121-1/+1
|
* chore(deps): update mozjsyvt2021-07-111-1/+3
| | | | - 798c5b6: Bring `RustJSPrincipals` back
* fix: accommodate to the modern ageyvt2021-07-101-1/+1
|
* Merge remote-tracking branch 'upstream/master' into feat-cow-infrayvt2021-07-101-248/+867
|\ | | | | | | | | `tests/wpt/web-platform-tests/html/browsers/origin/cross-origin-objects/cross-origin-objects.html` was reverted to the upstream version.
| * Formatingsagudev2021-03-121-2/+10
| |
| * Fix errorssagudev2021-03-121-9/+3
| |
| * Update mozjs.Josh Matthews2021-02-181-31/+29
| |
| * ensure clean shutdown of all threads running JSGregory Terzian2020-06-301-1/+32
| |
| * Auto merge of #26943 - jdm:promise-incumbent, r=Manishearthbors-servo2020-06-161-1/+6
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Fix panic on vimeo.com The only time we end up enqueuing a promise reaction job with a null incumbent global argument is when SpiderMonkey does some weird stuff behind the scenes for its JS Debugger support (based on https://searchfox.org/mozilla-central/rev/2c1092dc68c63f7bad6da6a03c5883a5ab5ff2ca/js/src/builtin/Promise.cpp#3168). This commit works around that case and adds a regression test so we don't forget about that in the future. --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes fix #26930 - [x] There are tests for these changes
| | * dom: Avoid panic when SpiderMonkey enqueues dummy promise jobs.Josh Matthews2020-06-161-1/+6
| | |
| * | Don't pretend we support SharedArrayBuffer.Josh Matthews2020-06-161-9/+0
| |/
| * integrate readablestream with fetch and blobGregory Terzian2020-06-041-2/+2
| |
| * Use dynamic dispatch in `mozjs::panic::wrap_panic`Simon Sapin2020-05-251-102/+95
| | | | | | | | | | | | | | | | Pick up https://github.com/servo/rust-mozjs/pull/512 Fixes https://github.com/servo/servo/issues/26585 This diff is best viewed with "ignore whitespace changes", because of indentation change.
| * Implement client-side logic for WebGPU id recyclingKunal Mohan2020-05-221-0/+1
| |
| * Remove WebVRAlan Jeffrey2020-04-081-1/+0
| |
| * Auto merge of #26056 - gterzian:enable_atomics_wait_on_dedicated_worker, r=jdmbors-servo2020-03-301-4/+15
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Enable Atomics.wait in a dedicated worker agent <!-- Please describe your changes on the following line: --> FIX #25191 --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: --> - [ ] `./mach build -d` does not report any errors - [ ] `./mach test-tidy` does not report any errors - [ ] These changes fix #___ (GitHub issue number if applicable) <!-- Either: --> - [ ] There are tests for these changes OR - [ ] These changes do not require tests because ___ <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
| | * enable Atomics.wait in a dedicated worker agentGregory Terzian2020-03-301-4/+15
| | |
| * | Propagate user interacting flag to timers and promisesPaul Rouget2020-03-261-1/+11
| |/
| * Update SpiderMonkeyAnthony Ramine2020-03-061-19/+20
| |
| * Always pass InRealm to GlobalScope::from_context to avoid getting null globalCYBAI2020-02-161-2/+5
| |
| * Modify `script` to prevent further violations of snake_caseKunal Mohan2020-01-181-1/+1
| |
| * Scaffold module scriptCYBAI2020-01-031-0/+3
| |
| * Now using eq_ignore_case on WASM mimetype, per #25317Patrick Shaughnessy2019-12-311-10/+7
| |
| * Add StreamConsumer wrapper and methods to responseRidhim Rastogi2019-12-031-4/+9
| |
| * Remove use of deprecated language construct.Josh Matthews2019-11-261-1/+1
| |
| * script: Ensure JS engine is initialized and deinitialized on the same thread.Josh Matthews2019-11-261-4/+26
| |
| * Bind runnable dispatching in script_runtimeAkash-Pateria2019-11-191-13/+52
| |
| * Add consume stream callbackRidhim Rastogi2019-11-111-1/+108
| |
| * Add StreamConsumer wrapper and ReportStreamErrorCallback fnRidhim Rastogi2019-11-031-0/+56
| |
| * begin messageport, transferable objects, implKeith Yeung2019-10-191-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Accept transfer argument for StructuredCloneData::write Allow structured clone reads to return a boolean Add Transferable trait Add basic skeletons to MessagePort Implement transfer and transfer-receiving steps on MessagePort Use transfer and transfer_receive in StructuredClone callbacks Implement MessageChannel Freeze the array object for the MessageEvent ports attribute Implement transfer argument on window.postMessage Use ReentrantMutex instead for MessagePortInternal Accept origin as a parameter in dispatch_jsval Fix BorrowMut crash with pending_port_message Detach port on closure and check for detached during transfer Enable webmessaging tests fix webidl fix
| * Work around crash on Windows when returning JS::Value by value.Josh Matthews2019-08-301-3/+6
| |
| * Auto merge of #23930 - CYBAI:incumbent-global-assertion, r=jdmbors-servo2019-08-091-1/+5
| |\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Assert incumbent global is always some in get_incumbent_global hook While working on module script, I'd like to use Promise with a custom callback with type `Box<dyn TaskBox>` which means we didn't use web API callbacks as native handlers. However, we'll get a panic from `enqueue_promise_job` and the panic says we have a `null` incumbent global. The main problem here is, the Promise API is strongly tied to JS engine and it always assumes there's a meaningful answer for "what specific global is this promise associated with". So, when I don't use the Promise for a specific web API, our engine cannot find a proper incumbent global for us so that we get the `null` incumbent global panic. To make us catch this case easier in the future, we should add the assertion inside `get_incumbent_global` hook so that we can know this quickly next time. Ref: https://mozilla.logbot.info/servo/20190807#c16525481 --- - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors - [x] These changes do not require tests because it should just add assertion inside the hook <!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.--> <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/23930) <!-- Reviewable:end -->
| | * Assert incumbent global is always some in get_incumbent_global hookCYBAI2019-08-081-1/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | While working on module script, I'd like to use Promise with a custom callback with type `Box<dyn TaskBox>` which means we didn't use web API callbacks as native handlers. However, we'll get a panic from `enqueue_promise_job` and the panic says we have a `null` incumbent global. The main problem here is, the Promise API is strongly tied to JS engine and it always assumes there's a meaningful answer for "what specific global is this promise associated with". So, when I don't use the Promise for a specific web API, our engine cannot find a proper incumbent global for us so that we get the `null` incumbent global panic. To make us catch this case easier in the future, we should add the assertion inside `get_incumbent_global` hook so that we can know this quickly next time. Ref: https://mozilla.logbot.info/servo/20190807#c16525481
| * | Use safe JSContext in MicrotaskQueuemarmeladema2019-08-091-1/+2
| | |
| * | Remove some usage of unsafe code in Promisemarmeladema2019-08-091-2/+3
| |/
| * Modify *::get_cx methods to return a safe JSContext instead of a raw onemarmeladema2019-07-241-5/+4
| |
| * Callbacks now uses safe JSContext instead of raw JSContextmarmeladema2019-07-241-1/+1
| |
| * Add safe JSontext wrapper around unsafe RawJSContextmarmeladema2019-07-241-0/+19
| |
| * Rename JSContext from js::jsapi to RawJSContextmarmeladema2019-07-241-10/+10
| |