Auto merge of #27266 - jdm:hubs-stubs3, r=Manishearth

Hide Window extension methods by default and add helper Window.js_backtrace method

Fixes #26858.
This commit is contained in:
bors-servo 2020-07-14 22:40:20 -04:00 committed by GitHub
commit 1e182cd185
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
16 changed files with 40 additions and 8 deletions

View file

@ -187,6 +187,9 @@ mod gen {
enabled: bool, enabled: bool,
timeout_seconds: i64, timeout_seconds: i64,
}, },
servo_helpers: {
enabled: bool,
},
servoparser: { servoparser: {
async_html_tokenizer: { async_html_tokenizer: {
enabled: bool, enabled: bool,

View file

@ -18,8 +18,8 @@ jitspew = ['js/jitspew']
profilemozjs = ['js/profilemozjs'] profilemozjs = ['js/profilemozjs']
unrooted_must_root_lint = ["script_plugins/unrooted_must_root_lint"] unrooted_must_root_lint = ["script_plugins/unrooted_must_root_lint"]
default = ["unrooted_must_root_lint"] default = ["unrooted_must_root_lint"]
webgl_backtrace = ["backtrace", "canvas_traits/webgl_backtrace"] webgl_backtrace = ["canvas_traits/webgl_backtrace"]
js_backtrace = ["backtrace"] js_backtrace = []
refcell_backtrace = ["accountable-refcell"] refcell_backtrace = ["accountable-refcell"]
uwp = ["js/uwp"] uwp = ["js/uwp"]
xr-profile = ["webxr-api/profile"] xr-profile = ["webxr-api/profile"]
@ -33,7 +33,7 @@ serde_json = "1.0"
accountable-refcell = { version = "0.2.0", optional = true } accountable-refcell = { version = "0.2.0", optional = true }
app_units = "0.7" app_units = "0.7"
arrayvec = "0.5.1" arrayvec = "0.5.1"
backtrace = { version = "0.3", optional = true } backtrace = "0.3"
base64 = "0.10.1" base64 = "0.10.1"
bitflags = "1.0" bitflags = "1.0"
bluetooth_traits = { path = "../bluetooth_traits" } bluetooth_traits = { path = "../bluetooth_traits" }

View file

@ -136,9 +136,14 @@ partial interface Window {
// Proprietary extensions. // Proprietary extensions.
partial interface Window { partial interface Window {
[Pref="dom.servo_helpers.enabled"]
void debug(DOMString arg); void debug(DOMString arg);
[Pref="dom.servo_helpers.enabled"]
void gc(); void gc();
[Pref="dom.servo_helpers.enabled"]
void trap(); void trap();
[Pref="dom.servo_helpers.enabled"]
void js_backtrace();
}; };
// WebDriver extensions // WebDriver extensions

View file

@ -72,6 +72,7 @@ use crate::task_source::{TaskSource, TaskSourceName};
use crate::timers::{IsInterval, TimerCallback}; use crate::timers::{IsInterval, TimerCallback};
use crate::webdriver_handlers::jsval_to_webdriver; use crate::webdriver_handlers::jsval_to_webdriver;
use app_units::Au; use app_units::Au;
use backtrace::Backtrace;
use base64; use base64;
use bluetooth_traits::BluetoothRequest; use bluetooth_traits::BluetoothRequest;
use canvas_traits::webgl::WebGLChan; use canvas_traits::webgl::WebGLChan;
@ -89,7 +90,7 @@ use js::jsapi::Heap;
use js::jsapi::JSAutoRealm; use js::jsapi::JSAutoRealm;
use js::jsapi::JSObject; use js::jsapi::JSObject;
use js::jsapi::JSPROP_ENUMERATE; use js::jsapi::JSPROP_ENUMERATE;
use js::jsapi::{GCReason, JS_GC}; use js::jsapi::{GCReason, StackFormat, JS_GC};
use js::jsval::UndefinedValue; use js::jsval::UndefinedValue;
use js::jsval::{JSVal, NullValue}; use js::jsval::{JSVal, NullValue};
use js::rust::wrappers::JS_DefineProperty; use js::rust::wrappers::JS_DefineProperty;
@ -1081,6 +1082,20 @@ impl WindowMethods for Window {
unsafe { ::std::intrinsics::breakpoint() } unsafe { ::std::intrinsics::breakpoint() }
} }
#[allow(unsafe_code)]
fn Js_backtrace(&self) {
unsafe {
capture_stack!(in(*self.get_cx()) let stack);
let js_stack = stack.and_then(|s| s.as_string(None, StackFormat::SpiderMonkey));
let rust_stack = Backtrace::new();
println!(
"Current JS stack:\n{}\nCurrent Rust stack:\n{:?}",
js_stack.unwrap_or(String::new()),
rust_stack
);
}
}
#[allow(unsafe_code)] #[allow(unsafe_code)]
fn WebdriverCallback(&self, cx: JSContext, val: HandleValue) { fn WebdriverCallback(&self, cx: JSContext, val: HandleValue) {
let rv = unsafe { jsval_to_webdriver(*cx, &self.globalscope, val) }; let rv = unsafe { jsval_to_webdriver(*cx, &self.globalscope, val) };

View file

@ -19,6 +19,7 @@
"dom.permissions.testing.allowed_in_nonsecure_contexts": false, "dom.permissions.testing.allowed_in_nonsecure_contexts": false,
"dom.serviceworker.enabled": false, "dom.serviceworker.enabled": false,
"dom.serviceworker.timeout_seconds": 60, "dom.serviceworker.timeout_seconds": 60,
"dom.servo_helpers.enabled": false,
"dom.servoparser.async_html_tokenizer.enabled": false, "dom.servoparser.async_html_tokenizer.enabled": false,
"dom.shadowdom.enabled": false, "dom.shadowdom.enabled": false,
"dom.svg.enabled": false, "dom.svg.enabled": false,

View file

@ -3,3 +3,4 @@
// Files are sorted alphabetically. When committing polyfills // Files are sorted alphabetically. When committing polyfills
// order them with numbers, e.g. `01.innerhtml.js` will be executed before // order them with numbers, e.g. `01.innerhtml.js` will be executed before
// `05.jquery.js` // `05.jquery.js`
onunhandledrejection = (e) => console.error("xxxjdm error: " + JSON.stringify(e.reason));

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -1,4 +1,3 @@
[weakref.html] [weakref.html]
[Weak references work] type: testharness
expected: FAIL prefs: ["dom.testbinding.enabled:true", "dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -0,0 +1 @@
prefs: ["dom.servo_helpers.enabled:true"]

View file

@ -1,3 +1,3 @@
[weakref.html] [weakref.html]
type: testharness type: testharness
prefs: [dom.testbinding.enabled:true] prefs: ["dom.testbinding.enabled:true", "dom.servo_helpers.enabled:true"]