diff options
-rw-r--r-- | Info.plist | 44 | ||||
-rw-r--r-- | components/gfx/font_cache_thread.rs | 9 | ||||
-rw-r--r-- | components/gfx/platform/macos/font.rs | 7 | ||||
-rw-r--r-- | components/net/storage_thread.rs | 11 | ||||
-rw-r--r-- | components/script/dom/bindings/callback.rs | 14 | ||||
-rw-r--r-- | components/script/dom/bindings/error.rs | 3 | ||||
-rw-r--r-- | components/script/dom/bluetoothremotegattcharacteristic.rs | 17 | ||||
-rw-r--r-- | components/script/dom/window.rs | 5 | ||||
-rw-r--r-- | components/script/lib.rs | 2 | ||||
-rw-r--r-- | components/util/lib.rs | 7 | ||||
-rw-r--r-- | components/util/prefs.rs | 20 | ||||
-rw-r--r-- | python/servo/bootstrap_commands.py | 2 | ||||
-rw-r--r-- | tests/wpt/harness/wptrunner/testharnessreport-servo.js | 2 | ||||
-rw-r--r-- | tests/wpt/metadata-css/css-transforms-1_dev/html/transform-table-007.htm.ini | 3 | ||||
-rw-r--r-- | tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/change_parentage.html.ini | 3 |
15 files changed, 88 insertions, 61 deletions
diff --git a/Info.plist b/Info.plist index 3b8a4248cba..a3136514d3a 100644 --- a/Info.plist +++ b/Info.plist @@ -1,26 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> -<key>CFBundleGetInfoString</key> -<string>Servo</string> -<key>CFBundleExecutable</key> -<string>run-servo</string> -<key>CFBundleIdentifier</key> -<string>org.servo.Servo22</string> -<key>CFBundleName</key> -<string>Servo</string> -<key>CFBundleIconFile</key> -<string>servo.icns</string> -<key>CFBundleShortVersionString</key> -<string>0.0.1</string> -<key>CFBundleInfoDictionaryVersion</key> -<string>6.0</string> -<key>CFBundlePackageType</key> -<string>APPL</string> -<key>NSHighResolutionCapable</key> -<true/> -<key>NSPrincipalClass</key> -<string>NSApplication</string> + <key>CFBundleExecutable</key> + <string>run-servo</string> + <key>CFBundleGetInfoString</key> + <string>Servo</string> + <key>CFBundleIconFile</key> + <string>servo.icns</string> + <key>CFBundleIdentifier</key> + <string>org.servo.Servo</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>Servo</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>0.0.1</string> + <key>NSHighResolutionCapable</key> + <true/> + <key>NSPrincipalClass</key> + <string>NSApplication</string> + <key>NSQuitAlwaysKeepsWindows</key> + <false/> </dict> </plist> diff --git a/components/gfx/font_cache_thread.rs b/components/gfx/font_cache_thread.rs index b7e68e9efb7..6e60e2b6dd2 100644 --- a/components/gfx/font_cache_thread.rs +++ b/components/gfx/font_cache_thread.rs @@ -268,10 +268,17 @@ impl FontCache { Source::Local(ref font) => { let font_face_name = LowercaseString::new(font.name()); let templates = &mut self.web_families.get_mut(&family_name).unwrap(); + let mut found = false; for_each_variation(&font_face_name, |path| { + found = true; templates.add_template(Atom::from(&*path), None); }); - sender.send(()).unwrap(); + if found { + sender.send(()).unwrap(); + } else { + let msg = Command::AddWebFont(family_name, sources, sender); + self.channel_to_self.send(msg).unwrap(); + } } } } diff --git a/components/gfx/platform/macos/font.rs b/components/gfx/platform/macos/font.rs index 4e4ae77213b..35f6e903103 100644 --- a/components/gfx/platform/macos/font.rs +++ b/components/gfx/platform/macos/font.rs @@ -113,11 +113,14 @@ impl FontHandle { let pair_data_start = subtable_start + FORMAT_0_HEADER_LEN; result.pair_data_range = pair_data_start..end; + if result.pair_data_range.len() != n_pairs * KERN_PAIR_LEN { + debug!("Bad data in kern header. Disable fast path."); + return None; + } + let pt_per_font_unit = self.ctfont.pt_size() as f64 / self.ctfont.units_per_em() as f64; result.px_per_font_unit = pt_to_px(pt_per_font_unit); - - debug_assert_eq!(n_pairs * KERN_PAIR_LEN, result.pair_data_range.len()); } start = end; } diff --git a/components/net/storage_thread.rs b/components/net/storage_thread.rs index c314dbdd8cd..cc329f08922 100644 --- a/components/net/storage_thread.rs +++ b/components/net/storage_thread.rs @@ -144,12 +144,15 @@ impl StorageManager { value: String) { let origin = self.origin_as_string(url); - let current_total_size = { + let (this_storage_size, other_storage_size) = { let local_data = self.select_data(StorageType::Local); let session_data = self.select_data(StorageType::Session); let local_data_size = local_data.get(&origin).map_or(0, |&(total, _)| total); let session_data_size = session_data.get(&origin).map_or(0, |&(total, _)| total); - local_data_size + session_data_size + match storage_type { + StorageType::Local => (local_data_size, session_data_size), + StorageType::Session => (session_data_size, local_data_size), + } }; let data = self.select_data_mut(storage_type); @@ -158,14 +161,14 @@ impl StorageManager { } let message = data.get_mut(&origin).map(|&mut (ref mut total, ref mut entry)| { - let mut new_total_size = current_total_size + value.as_bytes().len(); + let mut new_total_size = this_storage_size + value.as_bytes().len(); if let Some(old_value) = entry.get(&name) { new_total_size -= old_value.as_bytes().len(); } else { new_total_size += name.as_bytes().len(); } - if new_total_size > QUOTA_SIZE_LIMIT { + if (new_total_size + other_storage_size) > QUOTA_SIZE_LIMIT { return Err(()); } diff --git a/components/script/dom/bindings/callback.rs b/components/script/dom/bindings/callback.rs index cc1266d27ab..c34598a26be 100644 --- a/components/script/dom/bindings/callback.rs +++ b/components/script/dom/bindings/callback.rs @@ -4,15 +4,14 @@ //! Base classes to work with IDL callbacks. -use dom::bindings::error::{Error, Fallible}; +use dom::bindings::error::{Error, Fallible, report_pending_exception}; use dom::bindings::global::global_root_from_object; use dom::bindings::reflector::Reflectable; use js::jsapi::GetGlobalForObjectCrossCompartment; -use js::jsapi::JSAutoCompartment; +use js::jsapi::JS_GetProperty; use js::jsapi::{Heap, MutableHandleObject, RootedObject}; use js::jsapi::{IsCallable, JSContext, JSObject, JS_WrapObject}; use js::jsapi::{JSCompartment, JS_EnterCompartment, JS_LeaveCompartment}; -use js::jsapi::{JS_GetProperty, JS_IsExceptionPending, JS_ReportPendingException}; use js::jsval::{JSVal, UndefinedValue}; use js::rust::RootedGuard; use std::default::Default; @@ -189,13 +188,8 @@ impl<'a> Drop for CallSetup<'a> { fn drop(&mut self) { unsafe { JS_LeaveCompartment(self.cx, self.old_compartment); - } - let need_to_deal_with_exception = self.handling == ExceptionHandling::Report && - unsafe { JS_IsExceptionPending(self.cx) }; - if need_to_deal_with_exception { - unsafe { - let _ac = JSAutoCompartment::new(self.cx, *self.exception_compartment); - JS_ReportPendingException(self.cx); + if self.handling == ExceptionHandling::Report { + report_pending_exception(self.cx, *self.exception_compartment); } } } diff --git a/components/script/dom/bindings/error.rs b/components/script/dom/bindings/error.rs index 161e477a85a..d0074335c23 100644 --- a/components/script/dom/bindings/error.rs +++ b/components/script/dom/bindings/error.rs @@ -57,6 +57,8 @@ pub enum Error { QuotaExceeded, /// TypeMismatchError DOMException TypeMismatch, + /// InvalidModificationError DOMException + InvalidModification, /// TypeError JavaScript Error Type(String), @@ -97,6 +99,7 @@ pub unsafe fn throw_dom_exception(cx: *mut JSContext, global: GlobalRef, result: Error::NoModificationAllowed => DOMErrorName::NoModificationAllowedError, Error::QuotaExceeded => DOMErrorName::QuotaExceededError, Error::TypeMismatch => DOMErrorName::TypeMismatchError, + Error::InvalidModification => DOMErrorName::InvalidModificationError, Error::Type(message) => { assert!(!JS_IsExceptionPending(cx)); throw_type_error(cx, &message); diff --git a/components/script/dom/bluetoothremotegattcharacteristic.rs b/components/script/dom/bluetoothremotegattcharacteristic.rs index 2b3443f8a40..ebdd59ca689 100644 --- a/components/script/dom/bluetoothremotegattcharacteristic.rs +++ b/components/script/dom/bluetoothremotegattcharacteristic.rs @@ -4,13 +4,15 @@ use bluetooth_blacklist::{Blacklist, uuid_is_blacklisted}; use dom::bindings::cell::DOMRefCell; +use dom::bindings::codegen::Bindings::BluetoothCharacteristicPropertiesBinding:: + BluetoothCharacteristicPropertiesMethods; use dom::bindings::codegen::Bindings::BluetoothDeviceBinding::BluetoothDeviceMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTCharacteristicBinding; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTCharacteristicBinding:: BluetoothRemoteGATTCharacteristicMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServerBinding::BluetoothRemoteGATTServerMethods; use dom::bindings::codegen::Bindings::BluetoothRemoteGATTServiceBinding::BluetoothRemoteGATTServiceMethods; -use dom::bindings::error::Error::{Network, Security, Type}; +use dom::bindings::error::Error::{InvalidModification, Network, NotSupported, Security, Type}; use dom::bindings::error::{Fallible, ErrorResult}; use dom::bindings::global::GlobalRef; use dom::bindings::js::{JS, MutHeap, Root}; @@ -23,6 +25,10 @@ use dom::bluetoothuuid::{BluetoothDescriptorUUID, BluetoothUUID}; use ipc_channel::ipc::{self, IpcSender}; use net_traits::bluetooth_thread::BluetoothMethodMsg; +// Maximum length of an attribute value. +// https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=286439 (Vol. 3, page 2169) +const MAXIMUM_ATTRIBUTE_LENGTH: usize = 512; + // https://webbluetoothcg.github.io/web-bluetooth/#bluetoothremotegattcharacteristic #[dom_struct] pub struct BluetoothRemoteGATTCharacteristic { @@ -160,6 +166,9 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris if !self.Service().Device().Gatt().Connected() { return Err(Network) } + if !self.Properties().Read() { + return Err(NotSupported) + } self.get_bluetooth_thread().send( BluetoothMethodMsg::ReadValue(self.get_instance_id(), sender)).unwrap(); let result = receiver.recv().unwrap(); @@ -180,6 +189,12 @@ impl BluetoothRemoteGATTCharacteristicMethods for BluetoothRemoteGATTCharacteris if uuid_is_blacklisted(self.uuid.as_ref(), Blacklist::Writes) { return Err(Security) } + if value.len() > MAXIMUM_ATTRIBUTE_LENGTH { + return Err(InvalidModification) + } + if !self.Service().Device().Gatt().Connected() { + return Err(Network) + } let (sender, receiver) = ipc::channel().unwrap(); self.get_bluetooth_thread().send( BluetoothMethodMsg::WriteValue(self.get_instance_id(), value, sender)).unwrap(); diff --git a/components/script/dom/window.rs b/components/script/dom/window.rs index a098edcb43c..34ac683e233 100644 --- a/components/script/dom/window.rs +++ b/components/script/dom/window.rs @@ -96,8 +96,8 @@ use timers::{IsInterval, OneshotTimerCallback, OneshotTimerHandle, OneshotTimers use tinyfiledialogs::{self, MessageBoxIcon}; use url::Url; use util::geometry::{self, MAX_RECT}; +use util::opts; use util::prefs::PREFS; -use util::{breakpoint, opts}; use webdriver_handlers::jsval_to_webdriver; /// Current state of the window object @@ -669,8 +669,9 @@ impl WindowMethods for Window { } } + #[allow(unsafe_code)] fn Trap(&self) { - breakpoint(); + unsafe { ::std::intrinsics::breakpoint() } } #[allow(unsafe_code)] diff --git a/components/script/lib.rs b/components/script/lib.rs index 4f66095e1ff..ebc5b4a1686 100644 --- a/components/script/lib.rs +++ b/components/script/lib.rs @@ -6,7 +6,7 @@ #![feature(borrow_state)] #![feature(box_syntax)] #![feature(const_fn)] -#![cfg_attr(debug_assertions, feature(core_intrinsics))] +#![feature(core_intrinsics)] #![feature(custom_attribute)] #![feature(custom_derive)] #![feature(fnbox)] diff --git a/components/util/lib.rs b/components/util/lib.rs index 15fdaa5f332..6ffa4a4a2b5 100644 --- a/components/util/lib.rs +++ b/components/util/lib.rs @@ -2,7 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#![cfg_attr(feature = "servo", feature(core_intrinsics))] #![cfg_attr(feature = "servo", feature(custom_derive))] #![cfg_attr(feature = "servo", feature(fnbox))] #![cfg_attr(feature = "servo", feature(plugin))] @@ -41,12 +40,6 @@ pub mod resource_files; pub mod thread; pub mod thread_state; -#[cfg(feature = "servo")] -#[allow(unsafe_code)] -pub fn breakpoint() { - unsafe { ::std::intrinsics::breakpoint() }; -} - // Workaround for lack of `ptr_eq` on Arcs... #[inline] pub fn arc_ptr_eq<T: 'static>(a: &Arc<T>, b: &Arc<T>) -> bool { diff --git a/components/util/prefs.rs b/components/util/prefs.rs index d0d96a93035..eeb32a9a507 100644 --- a/components/util/prefs.rs +++ b/components/util/prefs.rs @@ -11,12 +11,12 @@ use std::collections::HashMap; use std::fs::File; use std::io::{Read, Write, stderr}; use std::path::PathBuf; -use std::sync::{Arc, Mutex}; +use std::sync::{Arc, RwLock}; lazy_static! { pub static ref PREFS: Preferences = { - let prefs = read_prefs().unwrap_or_else(|_| HashMap::new()); - Preferences(Arc::new(Mutex::new(prefs))) + let prefs = read_prefs().ok().unwrap_or_else(HashMap::new); + Preferences(Arc::new(RwLock::new(prefs))) }; } @@ -207,15 +207,15 @@ fn read_prefs() -> Result<HashMap<String, Pref>, ()> { read_prefs_from_file(file) } -pub struct Preferences(Arc<Mutex<HashMap<String, Pref>>>); +pub struct Preferences(Arc<RwLock<HashMap<String, Pref>>>); impl Preferences { pub fn get(&self, name: &str) -> Arc<PrefValue> { - self.0.lock().unwrap().get(name).map_or(Arc::new(PrefValue::Missing), |x| x.value().clone()) + self.0.read().unwrap().get(name).map_or(Arc::new(PrefValue::Missing), |x| x.value().clone()) } pub fn cloned(&self) -> HashMap<String, Pref> { - self.0.lock().unwrap().clone() + self.0.read().unwrap().clone() } pub fn is_mozbrowser_enabled(&self) -> bool { @@ -223,7 +223,7 @@ impl Preferences { } pub fn set(&self, name: &str, value: PrefValue) { - let mut prefs = self.0.lock().unwrap(); + let mut prefs = self.0.write().unwrap(); if let Some(pref) = prefs.get_mut(name) { pref.set(value); return; @@ -232,7 +232,7 @@ impl Preferences { } pub fn reset(&self, name: &str) -> Arc<PrefValue> { - let mut prefs = self.0.lock().unwrap(); + let mut prefs = self.0.write().unwrap(); let result = match prefs.get_mut(name) { None => return Arc::new(PrefValue::Missing), Some(&mut Pref::NoDefault(_)) => Arc::new(PrefValue::Missing), @@ -249,7 +249,7 @@ impl Preferences { pub fn reset_all(&self) { let names = { - self.0.lock().unwrap().keys().cloned().collect::<Vec<String>>() + self.0.read().unwrap().keys().cloned().collect::<Vec<String>>() }; for name in names.iter() { self.reset(name); @@ -257,6 +257,6 @@ impl Preferences { } pub fn extend(&self, extension: HashMap<String, Pref>) { - self.0.lock().unwrap().extend(extension); + self.0.write().unwrap().extend(extension); } } diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py index 27ac96ff97d..a4cf509f113 100644 --- a/python/servo/bootstrap_commands.py +++ b/python/servo/bootstrap_commands.py @@ -211,7 +211,7 @@ class MachCommands(CommandBase): "rust-std%s%s-%s" % (nightly_suffix, stable_version, target_triple), "rust-std-%s" % target_triple, "lib", "rustlib", target_triple), path.join(install_dir, - "rustc%s%s-%s" % (nightly_suffix, stable_version, host_triple), + "rustc%s%s-%s" % (nightly_suffix, stable_version, host_triple()), "rustc", "lib", "rustlib", target_triple)) shutil.rmtree(path.join(install_dir, "rust-std%s%s-%s" % (nightly_suffix, stable_version, target_triple))) diff --git a/tests/wpt/harness/wptrunner/testharnessreport-servo.js b/tests/wpt/harness/wptrunner/testharnessreport-servo.js index d1b31676170..6464436c339 100644 --- a/tests/wpt/harness/wptrunner/testharnessreport-servo.js +++ b/tests/wpt/harness/wptrunner/testharnessreport-servo.js @@ -8,7 +8,7 @@ setup(props); add_completion_callback(function (tests, harness_status) { var id = location.pathname + location.search + location.hash; - alert("RESULT: " + JSON.stringify([ + console.log("ALERT: RESULT: " + JSON.stringify([ id, harness_status.status, harness_status.message, diff --git a/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-table-007.htm.ini b/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-table-007.htm.ini new file mode 100644 index 00000000000..839df62416d --- /dev/null +++ b/tests/wpt/metadata-css/css-transforms-1_dev/html/transform-table-007.htm.ini @@ -0,0 +1,3 @@ +[transform-table-007.htm] + type: reftest + disabled: https://github.com/servo/servo/issues/11574 diff --git a/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/change_parentage.html.ini b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/change_parentage.html.ini new file mode 100644 index 00000000000..5c3ee2555e4 --- /dev/null +++ b/tests/wpt/metadata/html/semantics/embedded-content/the-iframe-element/change_parentage.html.ini @@ -0,0 +1,3 @@ +[change_parentage.html] + type: testharness + disabled: https://github.com/servo/servo/issues/11703 |