diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2020-03-26 09:15:00 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-26 09:15:00 -0400 |
commit | 0ed0c0d9f01ac5ae906d5b7842aa79c70b119adc (patch) | |
tree | 19f87d6806b246482db97c78c7d6b57ed6d367a3 /components/script/dom/promise.rs | |
parent | 1c7fba31ed2b4c4ad054cd8e91f2d3ddb6c839c6 (diff) | |
parent | 5621c887fd5b387c7cab80c182fe579889822212 (diff) | |
download | servo-0ed0c0d9f01ac5ae906d5b7842aa79c70b119adc.tar.gz servo-0ed0c0d9f01ac5ae906d5b7842aa79c70b119adc.zip |
Auto merge of #26029 - paulrouget:uitask, r=jdm
Set user interactions for tasks
fix #26026
I need help here. Retrieving the interaction flag from the promise handle crashes.
```rust
let interaction = GetPromiseUserInputEventHandlingState(promise);
```
```
Stack trace for thread "ScriptThread PipelineId { namespace_id: PipelineNamespaceId(1), index: PipelineIndex(1) }"
stack backtrace:
0: backtrace::backtrace::libunwind::trace
at /Users/paul/.cargo/git/checkouts/backtrace-rs-96ebaf1bcb788384/91a0aa4/src/backtrace/libunwind.rs:86
backtrace::backtrace::trace_unsynchronized
at /Users/paul/.cargo/git/checkouts/backtrace-rs-96ebaf1bcb788384/91a0aa4/src/backtrace/mod.rs:66
1: <servo::backtrace::Print as core::fmt::Debug>::fmt
at ports/glutin/backtrace.rs:49
2: <&mut W as core::fmt::Write>::write_fmt
3: std::io::Write::write_fmt
at /rustc/45ebd5808afd3df7ba842797c0fcd4447ddf30fb/src/libstd/io/mod.rs:1427
4: servo::backtrace::print
at ports/glutin/backtrace.rs:17
5: servo::install_crash_handler::handler
at ports/glutin/main2.rs:68
6: <unknown>
7: _ZN2JS37GetPromiseUserInputEventHandlingStateENS_6HandleIP8JSObjectEE
at /Users/paul/.cargo/git/checkouts/mozjs-fa11ffc7d4f1cc2d/2392ebc/mozjs/js/src/vm/JSObject.h:106
```
Diffstat (limited to 'components/script/dom/promise.rs')
-rw-r--r-- | components/script/dom/promise.rs | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/components/script/dom/promise.rs b/components/script/dom/promise.rs index 5e60507f8fc..fae6421f622 100644 --- a/components/script/dom/promise.rs +++ b/components/script/dom/promise.rs @@ -19,19 +19,21 @@ use crate::dom::globalscope::GlobalScope; use crate::dom::promisenativehandler::PromiseNativeHandler; use crate::realms::{enter_realm, InRealm}; use crate::script_runtime::JSContext as SafeJSContext; +use crate::script_thread::ScriptThread; use dom_struct::dom_struct; use js::conversions::ToJSValConvertible; use js::jsapi::{AddRawValueRoot, CallArgs, GetFunctionNativeReserved}; use js::jsapi::{Heap, JS_ClearPendingException}; use js::jsapi::{JSAutoRealm, JSContext, JSObject, JS_GetFunctionObject}; -use js::jsapi::{JS_NewFunction, NewFunctionWithReserved, PromiseState}; +use js::jsapi::{JS_NewFunction, NewFunctionWithReserved}; +use js::jsapi::{PromiseState, PromiseUserInputEventHandlingState}; use js::jsapi::{RemoveRawValueRoot, SetFunctionNativeReserved}; use js::jsval::{Int32Value, JSVal, ObjectValue, UndefinedValue}; use js::rust::wrappers::{ AddPromiseReactions, CallOriginalPromiseReject, CallOriginalPromiseResolve, }; -use js::rust::wrappers::{GetPromiseState, IsPromiseObject}; -use js::rust::wrappers::{NewPromiseObject, RejectPromise, ResolvePromise}; +use js::rust::wrappers::{GetPromiseState, IsPromiseObject, NewPromiseObject, RejectPromise}; +use js::rust::wrappers::{ResolvePromise, SetPromiseUserInputEventHandlingState}; use js::rust::{HandleObject, HandleValue, MutableHandleObject, Runtime}; use std::ptr; use std::rc::Rc; @@ -131,6 +133,12 @@ impl Promise { assert!(!do_nothing_obj.is_null()); obj.set(NewPromiseObject(*cx, do_nothing_obj.handle())); assert!(!obj.is_null()); + let is_user_interacting = if ScriptThread::is_user_interacting() { + PromiseUserInputEventHandlingState::HadUserInteractionAtCreation + } else { + PromiseUserInputEventHandlingState::DidntHaveUserInteractionAtCreation + }; + SetPromiseUserInputEventHandlingState(obj.handle(), is_user_interacting); } } |