diff options
30 files changed, 454 insertions, 1321 deletions
diff --git a/.github/workflows/ohos.yml b/.github/workflows/ohos.yml index 0fe92dcf5c7..404e305f61b 100644 --- a/.github/workflows/ohos.yml +++ b/.github/workflows/ohos.yml @@ -243,6 +243,9 @@ jobs: run: hitrace-bench --bencher -b "org.servo.servo" -p "https://www.servo.org" -n 5 - name: Getting bencher uses: bencherdev/bencher@main + - name: Getting model name + run: | + echo "MODEL_NAME=$(hdc bugreport | head -n 20 | grep MarketName | awk '{for (i=2; i<NF; i++) printf $i " "; print $NF}' -)" >> $GITHUB_ENV - name: Uploading to bencher.dev run: | - bencher run --adapter json --file bench.json --project '${{ env.BENCHER_PROJECT }}' --token '${{ secrets.BENCHER_API_TOKEN }}' --github-actions '${{ secrets.GITHUB_TOKEN }}' + bencher run --adapter json --file bench.json --project '${{ env.BENCHER_PROJECT }}' --token '${{ secrets.BENCHER_API_TOKEN }}' --github-actions '${{ secrets.GITHUB_TOKEN }}' --testbed="$MODEL_NAME" diff --git a/Cargo.lock b/Cargo.lock index a8d3f512d61..8e56aa33ed9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1065,7 +1065,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "117725a109d387c937a1533ce01b450cbde6b88abceea8473c4d7a85853cda3c" dependencies = [ "lazy_static", - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] @@ -1224,7 +1224,7 @@ dependencies = [ [[package]] name = "content-security-policy" version = "0.5.4" -source = "git+https://github.com/servo/rust-content-security-policy/?branch=servo-csp#334bfcbf0a3f503b21c90aee6aee30d4b8c9558a" +source = "git+https://github.com/servo/rust-content-security-policy/?branch=servo-csp#58a09ee320fd6fbb828748ae04255e4c8d3f9c9e" dependencies = [ "base64 0.22.1", "bitflags 2.9.1", @@ -2033,7 +2033,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cea14ef9355e3beab063703aa9dab15afd25f0667c341310c1e5274bb1d0da18" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -2560,7 +2560,7 @@ dependencies = [ "gobject-sys", "libc", "system-deps", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -4002,7 +4002,7 @@ checksum = "e04d7f318608d35d4b61ddd75cbdaee86b023ebe2bd5a66ee0915f0bf93095a9" dependencies = [ "hermit-abi 0.5.0", "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -4255,7 +4255,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6a793df0d7afeac54f95b471d3af7f0d4fb975699f972341a4b76988d49cdf0c" dependencies = [ "cfg-if", - "windows-targets 0.52.6", + "windows-targets 0.48.5", ] [[package]] @@ -4864,6 +4864,7 @@ dependencies = [ "content-security-policy", "cookie 0.18.1", "crossbeam-channel", + "data-url", "embedder_traits", "headers 0.4.0", "http 1.3.1", @@ -6177,7 +6178,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -6509,7 +6510,7 @@ dependencies = [ [[package]] name = "selectors" version = "0.28.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "bitflags 2.9.1", "cssparser", @@ -6804,7 +6805,7 @@ dependencies = [ [[package]] name = "servo_arc" version = "0.4.1" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "serde", "stable_deref_trait", @@ -7265,7 +7266,7 @@ dependencies = [ [[package]] name = "stylo" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "app_units", "arrayvec", @@ -7323,7 +7324,7 @@ dependencies = [ [[package]] name = "stylo_atoms" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "string_cache", "string_cache_codegen", @@ -7332,12 +7333,12 @@ dependencies = [ [[package]] name = "stylo_config" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" [[package]] name = "stylo_derive" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "darling", "proc-macro2", @@ -7349,7 +7350,7 @@ dependencies = [ [[package]] name = "stylo_dom" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "bitflags 2.9.1", "stylo_malloc_size_of", @@ -7358,7 +7359,7 @@ dependencies = [ [[package]] name = "stylo_malloc_size_of" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "app_units", "cssparser", @@ -7375,12 +7376,12 @@ dependencies = [ [[package]] name = "stylo_static_prefs" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" [[package]] name = "stylo_traits" version = "0.3.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "app_units", "bitflags 2.9.1", @@ -7544,7 +7545,7 @@ dependencies = [ "getrandom", "once_cell", "rustix", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -7763,7 +7764,7 @@ dependencies = [ [[package]] name = "to_shmem" version = "0.2.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "cssparser", "servo_arc", @@ -7776,7 +7777,7 @@ dependencies = [ [[package]] name = "to_shmem_derive" version = "0.1.0" -source = "git+https://github.com/servo/stylo?branch=2025-05-01#bc815af4b5ae01768eaef64d21cebe6d66be06ea" +source = "git+https://github.com/servo/stylo?branch=2025-05-01#fb74b958cc7bb93a9335766130d6711ad3e071ce" dependencies = [ "darling", "proc-macro2", @@ -8901,7 +8902,7 @@ version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.48.0", ] [[package]] diff --git a/components/layout/dom.rs b/components/layout/dom.rs index e3a22eb5197..88176ffbbb0 100644 --- a/components/layout/dom.rs +++ b/components/layout/dom.rs @@ -126,15 +126,15 @@ impl LayoutBox { .repair_style(context, node, new_style); } }, - LayoutBox::FlexLevel(flex_level_box) => { - flex_level_box.borrow_mut().repair_style(context, new_style) - }, + LayoutBox::FlexLevel(flex_level_box) => flex_level_box + .borrow_mut() + .repair_style(context, node, new_style), LayoutBox::TableLevelBox(table_level_box) => { - table_level_box.repair_style(context, new_style) - }, - LayoutBox::TaffyItemBox(taffy_item_box) => { - taffy_item_box.borrow_mut().repair_style(context, new_style) + table_level_box.repair_style(context, node, new_style) }, + LayoutBox::TaffyItemBox(taffy_item_box) => taffy_item_box + .borrow_mut() + .repair_style(context, node, new_style), } } } diff --git a/components/layout/flexbox/mod.rs b/components/layout/flexbox/mod.rs index 91a12b31812..96a311ee2b5 100644 --- a/components/layout/flexbox/mod.rs +++ b/components/layout/flexbox/mod.rs @@ -4,6 +4,7 @@ use geom::{FlexAxis, MainStartCrossStart}; use malloc_size_of_derive::MallocSizeOf; +use script::layout_dom::ServoLayoutNode; use servo_arc::Arc as ServoArc; use style::context::SharedStyleContext; use style::logical_geometry::WritingMode; @@ -154,16 +155,17 @@ impl FlexLevelBox { pub(crate) fn repair_style( &mut self, context: &SharedStyleContext, + node: &ServoLayoutNode, new_style: &ServoArc<ComputedValues>, ) { match self { FlexLevelBox::FlexItem(flex_item_box) => flex_item_box .independent_formatting_context - .repair_style(context, new_style), + .repair_style(context, node, new_style), FlexLevelBox::OutOfFlowAbsolutelyPositionedBox(positioned_box) => positioned_box .borrow_mut() .context - .repair_style(context, new_style), + .repair_style(context, node, new_style), } } diff --git a/components/layout/flow/inline/construct.rs b/components/layout/flow/inline/construct.rs index a99de1679a4..600da9b721a 100644 --- a/components/layout/flow/inline/construct.rs +++ b/components/layout/flow/inline/construct.rs @@ -31,7 +31,7 @@ pub(crate) struct InlineFormattingContextBuilder { /// inline box stack, and importantly, one for every `display: contents` element that we are /// currently processing. Normally `display: contents` elements don't affect the structure of /// the [`InlineFormattingContext`], but the styles they provide do style their children. - shared_inline_styles_stack: Vec<SharedInlineStyles>, + pub shared_inline_styles_stack: Vec<SharedInlineStyles>, /// The collection of text strings that make up this [`InlineFormattingContext`] under /// construction. diff --git a/components/layout/flow/inline/mod.rs b/components/layout/flow/inline/mod.rs index 7e69aa1aaae..74d42ca6fb4 100644 --- a/components/layout/flow/inline/mod.rs +++ b/components/layout/flow/inline/mod.rs @@ -91,6 +91,7 @@ use line_breaker::LineBreaker; use malloc_size_of_derive::MallocSizeOf; use range::Range; use script::layout_dom::ServoLayoutNode; +use script_layout_interface::wrapper_traits::{LayoutNode, ThreadSafeLayoutNode}; use servo_arc::Arc; use style::Zero; use style::computed_values::text_wrap_mode::T as TextWrapMode; @@ -158,6 +159,10 @@ pub(crate) struct InlineFormattingContext { /// context in order to avoid duplicating this information. pub font_metrics: Vec<FontKeyAndMetrics>, + /// The [`SharedInlineStyles`] for the root of this [`InlineFormattingContext`] that are used to + /// share styles with all [`TextRun`] children. + pub(super) shared_inline_styles: SharedInlineStyles, + pub(super) text_decoration_line: TextDecorationLine, /// Whether this IFC contains the 1st formatted line of an element: @@ -237,12 +242,14 @@ impl InlineItem { InlineItem::OutOfFlowAbsolutelyPositionedBox(positioned_box, ..) => positioned_box .borrow_mut() .context - .repair_style(context, new_style), + .repair_style(context, node, new_style), InlineItem::OutOfFlowFloatBox(float_box) => float_box .borrow_mut() .contents - .repair_style(context, new_style), - InlineItem::Atomic(atomic, ..) => atomic.borrow_mut().repair_style(context, new_style), + .repair_style(context, node, new_style), + InlineItem::Atomic(atomic, ..) => { + atomic.borrow_mut().repair_style(context, node, new_style) + }, } } @@ -1699,6 +1706,11 @@ impl InlineFormattingContext { inline_items: builder.inline_items, inline_boxes: builder.inline_boxes, font_metrics, + shared_inline_styles: builder + .shared_inline_styles_stack + .last() + .expect("Should have at least one SharedInlineStyle for the root of an IFC") + .clone(), text_decoration_line: propagated_data.text_decoration, has_first_formatted_line, contains_floats: builder.contains_floats, @@ -1707,6 +1719,11 @@ impl InlineFormattingContext { } } + pub(crate) fn repair_style(&self, node: &ServoLayoutNode, new_style: &Arc<ComputedValues>) { + *self.shared_inline_styles.style.borrow_mut() = new_style.clone(); + *self.shared_inline_styles.selected.borrow_mut() = node.to_threadsafe().selected_style(); + } + pub(super) fn layout( &self, layout_context: &LayoutContext, diff --git a/components/layout/flow/mod.rs b/components/layout/flow/mod.rs index 99b84d088e5..4776b65771c 100644 --- a/components/layout/flow/mod.rs +++ b/components/layout/flow/mod.rs @@ -78,6 +78,15 @@ impl BlockContainer { BlockContainer::InlineFormattingContext(context) => context.contains_floats, } } + + pub(crate) fn repair_style(&mut self, node: &ServoLayoutNode, new_style: &Arc<ComputedValues>) { + match self { + BlockContainer::BlockLevelBoxes(..) => {}, + BlockContainer::InlineFormattingContext(inline_formatting_context) => { + inline_formatting_context.repair_style(node, new_style) + }, + } + } } #[derive(Debug, MallocSizeOf)] @@ -106,20 +115,21 @@ impl BlockLevelBox { match self { BlockLevelBox::Independent(independent_formatting_context) => { - independent_formatting_context.repair_style(context, new_style) + independent_formatting_context.repair_style(context, node, new_style) }, BlockLevelBox::OutOfFlowAbsolutelyPositionedBox(positioned_box) => positioned_box .borrow_mut() .context - .repair_style(context, new_style), + .repair_style(context, node, new_style), BlockLevelBox::OutOfFlowFloatBox(float_box) => { - float_box.contents.repair_style(context, new_style) + float_box.contents.repair_style(context, node, new_style) }, BlockLevelBox::OutsideMarker(outside_marker) => { outside_marker.repair_style(context, node, new_style) }, - BlockLevelBox::SameFormattingContextBlock { base, .. } => { + BlockLevelBox::SameFormattingContextBlock { base, contents, .. } => { base.repair_style(new_style); + contents.repair_style(node, new_style); }, } } @@ -477,6 +487,10 @@ impl BlockFormattingContext { pub(crate) fn layout_style<'a>(&self, base: &'a LayoutBoxBase) -> LayoutStyle<'a> { LayoutStyle::Default(&base.style) } + + pub(crate) fn repair_style(&mut self, node: &ServoLayoutNode, new_style: &Arc<ComputedValues>) { + self.contents.repair_style(node, new_style); + } } /// Finds the min/max-content inline size of the block-level children of a block container. diff --git a/components/layout/formatting_contexts.rs b/components/layout/formatting_contexts.rs index a489df2b663..2b242c00361 100644 --- a/components/layout/formatting_contexts.rs +++ b/components/layout/formatting_contexts.rs @@ -4,7 +4,7 @@ use app_units::Au; use malloc_size_of_derive::MallocSizeOf; -use script::layout_dom::ServoLayoutElement; +use script::layout_dom::{ServoLayoutElement, ServoLayoutNode}; use servo_arc::Arc; use style::context::SharedStyleContext; use style::properties::ComputedValues; @@ -223,12 +223,13 @@ impl IndependentFormattingContext { pub(crate) fn repair_style( &mut self, context: &SharedStyleContext, + node: &ServoLayoutNode, new_style: &Arc<ComputedValues>, ) { self.base.repair_style(new_style); match &mut self.contents { IndependentFormattingContextContents::NonReplaced(content) => { - content.repair_style(context, new_style); + content.repair_style(context, node, new_style); }, IndependentFormattingContextContents::Replaced(..) => {}, } @@ -356,9 +357,16 @@ impl IndependentNonReplacedContents { matches!(self, Self::Table(_)) } - fn repair_style(&mut self, context: &SharedStyleContext, new_style: &Arc<ComputedValues>) { + fn repair_style( + &mut self, + context: &SharedStyleContext, + node: &ServoLayoutNode, + new_style: &Arc<ComputedValues>, + ) { match self { - IndependentNonReplacedContents::Flow(..) => {}, + IndependentNonReplacedContents::Flow(block_formatting_context) => { + block_formatting_context.repair_style(node, new_style); + }, IndependentNonReplacedContents::Flex(flex_container) => { flex_container.repair_style(new_style) }, diff --git a/components/layout/table/mod.rs b/components/layout/table/mod.rs index 72b67863e7d..78884c377e9 100644 --- a/components/layout/table/mod.rs +++ b/components/layout/table/mod.rs @@ -76,7 +76,7 @@ pub(crate) use construct::AnonymousTableContent; pub use construct::TableBuilder; use euclid::{Point2D, Size2D, UnknownUnit, Vector2D}; use malloc_size_of_derive::MallocSizeOf; -use script::layout_dom::ServoLayoutElement; +use script::layout_dom::{ServoLayoutElement, ServoLayoutNode}; use servo_arc::Arc; use style::context::SharedStyleContext; use style::properties::ComputedValues; @@ -425,13 +425,14 @@ impl TableLevelBox { pub(crate) fn repair_style( &self, context: &SharedStyleContext<'_>, + node: &ServoLayoutNode, new_style: &Arc<ComputedValues>, ) { match self { TableLevelBox::Caption(caption) => caption .borrow_mut() .context - .repair_style(context, new_style), + .repair_style(context, node, new_style), TableLevelBox::Cell(cell) => cell.borrow_mut().repair_style(new_style), TableLevelBox::TrackGroup(track_group) => { track_group.borrow_mut().repair_style(new_style); diff --git a/components/layout/taffy/mod.rs b/components/layout/taffy/mod.rs index ba80824fa99..2bc7a598d08 100644 --- a/components/layout/taffy/mod.rs +++ b/components/layout/taffy/mod.rs @@ -7,6 +7,7 @@ use std::fmt; use app_units::Au; use malloc_size_of_derive::MallocSizeOf; +use script::layout_dom::ServoLayoutNode; use servo_arc::Arc; use style::context::SharedStyleContext; use style::properties::ComputedValues; @@ -152,17 +153,18 @@ impl TaffyItemBox { pub(crate) fn repair_style( &mut self, context: &SharedStyleContext, + node: &ServoLayoutNode, new_style: &Arc<ComputedValues>, ) { self.style = new_style.clone(); match &mut self.taffy_level_box { TaffyItemBoxInner::InFlowBox(independent_formatting_context) => { - independent_formatting_context.repair_style(context, new_style) + independent_formatting_context.repair_style(context, node, new_style) }, TaffyItemBoxInner::OutOfFlowAbsolutelyPositionedBox(positioned_box) => positioned_box .borrow_mut() .context - .repair_style(context, new_style), + .repair_style(context, node, new_style), } } } diff --git a/components/layout/traversal.rs b/components/layout/traversal.rs index 17c3d0b1c20..d05deb24bfa 100644 --- a/components/layout/traversal.rs +++ b/components/layout/traversal.rs @@ -112,15 +112,14 @@ pub(crate) fn compute_damage_and_repair_style_inner( .element_data .borrow_mut(); + original_damage = std::mem::take(&mut element_data.damage); if let Some(ref style) = element_data.styles.primary { if style.get_box().display == Display::None { return parent_restyle_damage; } } - original_damage = std::mem::take(&mut element_data.damage); - element_data.damage |= parent_restyle_damage; - element_data.damage + original_damage | parent_restyle_damage }; let mut propagated_damage = damage; diff --git a/components/net/fetch/methods.rs b/components/net/fetch/methods.rs index 65c173fce3b..33d0da952fb 100644 --- a/components/net/fetch/methods.rs +++ b/components/net/fetch/methods.rs @@ -18,6 +18,7 @@ use http::{HeaderValue, Method, StatusCode}; use ipc_channel::ipc; use log::{debug, trace, warn}; use mime::{self, Mime}; +use net_traits::fetch::headers::extract_mime_type_as_mime; use net_traits::filemanager_thread::{FileTokenCheck, RelativePos}; use net_traits::http_status::HttpStatus; use net_traits::policy_container::{PolicyContainer, RequestPolicyContainer}; @@ -886,7 +887,7 @@ pub fn should_be_blocked_due_to_nosniff( // Step 2 // Note: an invalid MIME type will produce a `None`. - let content_type_header = response_headers.typed_get::<ContentType>(); + let mime_type = extract_mime_type_as_mime(response_headers); /// <https://html.spec.whatwg.org/multipage/#scriptingLanguages> #[inline] @@ -915,16 +916,12 @@ pub fn should_be_blocked_due_to_nosniff( .any(|mime| mime.type_() == mime_type.type_() && mime.subtype() == mime_type.subtype()) } - match content_type_header { + match mime_type { // Step 4 - Some(ref ct) if destination.is_script_like() => { - !is_javascript_mime_type(&ct.clone().into()) - }, - + Some(ref mime_type) if destination.is_script_like() => !is_javascript_mime_type(mime_type), // Step 5 - Some(ref ct) if destination == Destination::Style => { - let m: mime::Mime = ct.clone().into(); - m.type_() != mime::TEXT && m.subtype() != mime::CSS + Some(ref mime_type) if destination == Destination::Style => { + mime_type.type_() != mime::TEXT && mime_type.subtype() != mime::CSS }, None if destination == Destination::Style || destination.is_script_like() => true, @@ -938,18 +935,22 @@ fn should_be_blocked_due_to_mime_type( destination: Destination, response_headers: &HeaderMap, ) -> bool { - // Step 1 - let mime_type: mime::Mime = match response_headers.typed_get::<ContentType>() { - Some(header) => header.into(), + // Step 1: Let mimeType be the result of extracting a MIME type from response’s header list. + let mime_type: mime::Mime = match extract_mime_type_as_mime(response_headers) { + Some(mime_type) => mime_type, + // Step 2: If mimeType is failure, then return allowed. None => return false, }; - // Step 2-3 + // Step 3: Let destination be request’s destination. + // Step 4: If destination is script-like and one of the following is true, then return blocked: + // - mimeType’s essence starts with "audio/", "image/", or "video/". + // - mimeType’s essence is "text/csv". + // Step 5: Return allowed. destination.is_script_like() && match mime_type.type_() { mime::AUDIO | mime::VIDEO | mime::IMAGE => true, mime::TEXT if mime_type.subtype() == mime::CSV => true, - // Step 4 _ => false, } } diff --git a/components/script/dom/blob.rs b/components/script/dom/blob.rs index c5c5c480707..18e968aaa70 100644 --- a/components/script/dom/blob.rs +++ b/components/script/dom/blob.rs @@ -12,11 +12,10 @@ use dom_struct::dom_struct; use encoding_rs::UTF_8; use js::jsapi::JSObject; use js::rust::HandleObject; -use js::typedarray::Uint8; +use js::typedarray::{ArrayBufferU8, Uint8}; use net_traits::filemanager_thread::RelativePos; use uuid::Uuid; -use crate::body::{FetchedData, run_array_buffer_data_algorithm}; use crate::dom::bindings::buffer_source::create_buffer_source; use crate::dom::bindings::codegen::Bindings::BlobBinding; use crate::dom::bindings::codegen::Bindings::BlobBinding::BlobMethods; @@ -226,7 +225,7 @@ impl BlobMethods<crate::DomTypeHolder> for Blob { Blob::new(&global, blob_impl, can_gc) } - // https://w3c.github.io/FileAPI/#text-method-algo + /// <https://w3c.github.io/FileAPI/#text-method-algo> fn Text(&self, can_gc: CanGc) -> Rc<Promise> { let global = self.global(); let in_realm_proof = AlreadyInRealm::assert::<crate::DomTypeHolder>(); @@ -250,35 +249,51 @@ impl BlobMethods<crate::DomTypeHolder> for Blob { } // https://w3c.github.io/FileAPI/#arraybuffer-method-algo - fn ArrayBuffer(&self, can_gc: CanGc) -> Rc<Promise> { - let global = self.global(); - let in_realm_proof = AlreadyInRealm::assert::<crate::DomTypeHolder>(); - let p = Promise::new_in_current_realm(InRealm::Already(&in_realm_proof), can_gc); + fn ArrayBuffer(&self, in_realm: InRealm, can_gc: CanGc) -> Rc<Promise> { + let cx = GlobalScope::get_cx(); + let global = GlobalScope::from_safe_context(cx, in_realm); + let promise = Promise::new_in_current_realm(in_realm, can_gc); - let id = self.get_blob_url_id(); + // 1. Let stream be the result of calling get stream on this. + let stream = self.get_stream(can_gc); - global.read_file_async( - id, - p.clone(), - Box::new(|promise, bytes| { - match bytes { - Ok(b) => { - let cx = GlobalScope::get_cx(); - let result = run_array_buffer_data_algorithm(cx, b, CanGc::note()); - - match result { - Ok(FetchedData::ArrayBuffer(a)) => { - promise.resolve_native(&a, CanGc::note()) - }, - Err(e) => promise.reject_error(e, CanGc::note()), - _ => panic!("Unexpected result from run_array_buffer_data_algorithm"), - } - }, - Err(e) => promise.reject_error(e, CanGc::note()), - }; + // 2. Let reader be the result of getting a reader from stream. + // If that threw an exception, return a new promise rejected with that exception. + let reader = match stream.and_then(|s| s.acquire_default_reader(can_gc)) { + Ok(reader) => reader, + Err(error) => { + promise.reject_error(error, can_gc); + return promise; + }, + }; + + // 3. Let promise be the result of reading all bytes from stream with reader. + let success_promise = promise.clone(); + let failure_promise = promise.clone(); + reader.read_all_bytes( + cx, + &global, + Rc::new(move |bytes| { + rooted!(in(*cx) let mut js_object = ptr::null_mut::<JSObject>()); + // 4. Return the result of transforming promise by a fulfillment handler that returns a new + // [ArrayBuffer] + let array_buffer = create_buffer_source::<ArrayBufferU8>( + cx, + bytes, + js_object.handle_mut(), + can_gc, + ) + .expect("Converting input to ArrayBufferU8 should never fail"); + success_promise.resolve_native(&array_buffer, can_gc); }), + Rc::new(move |cx, value| { + failure_promise.reject(cx, value, can_gc); + }), + in_realm, + can_gc, ); - p + + promise } /// <https://w3c.github.io/FileAPI/#dom-blob-bytes> diff --git a/components/script/dom/headers.rs b/components/script/dom/headers.rs index 10a8be731bf..0e8dcf92ccd 100644 --- a/components/script/dom/headers.rs +++ b/components/script/dom/headers.rs @@ -5,12 +5,12 @@ use std::cell::Cell; use std::str::{self, FromStr}; -use data_url::mime::Mime as DataUrlMime; use dom_struct::dom_struct; use http::header::{HeaderMap as HyperHeaders, HeaderName, HeaderValue}; use js::rust::HandleObject; use net_traits::fetch::headers::{ - get_decode_and_split_header_value, get_value_from_header_list, is_forbidden_method, + extract_mime_type, get_decode_and_split_header_value, get_value_from_header_list, + is_forbidden_method, }; use net_traits::request::is_cors_safelisted_request_header; @@ -564,72 +564,3 @@ pub(crate) fn is_vchar(x: u8) -> bool { pub(crate) fn is_obs_text(x: u8) -> bool { matches!(x, 0x80..=0xFF) } - -// https://fetch.spec.whatwg.org/#concept-header-extract-mime-type -// This function uses data_url::Mime to parse the MIME Type because -// mime::Mime does not provide a parser following the Fetch spec -// see https://github.com/hyperium/mime/issues/106 -pub(crate) fn extract_mime_type(headers: &HyperHeaders) -> Option<Vec<u8>> { - let mut charset: Option<String> = None; - let mut essence: String = "".to_string(); - let mut mime_type: Option<DataUrlMime> = None; - - // Step 4 - let headers_values = headers.get_all(http::header::CONTENT_TYPE).iter(); - - // Step 5 - if headers_values.size_hint() == (0, Some(0)) { - return None; - } - - // Step 6 - for header_value in headers_values { - // Step 6.1 - match DataUrlMime::from_str(header_value.to_str().unwrap_or("")) { - // Step 6.2 - Err(_) => continue, - Ok(temp_mime) => { - let temp_essence = format!("{}/{}", temp_mime.type_, temp_mime.subtype); - - // Step 6.2 - if temp_essence == "*/*" { - continue; - } - - let temp_charset = &temp_mime.get_parameter("charset"); - - // Step 6.3 - mime_type = Some(DataUrlMime { - type_: temp_mime.type_.to_string(), - subtype: temp_mime.subtype.to_string(), - parameters: temp_mime.parameters.clone(), - }); - - // Step 6.4 - if temp_essence != essence { - charset = temp_charset.map(|c| c.to_string()); - temp_essence.clone_into(&mut essence); - } else { - // Step 6.5 - if temp_charset.is_none() && charset.is_some() { - let DataUrlMime { - type_: t, - subtype: st, - parameters: p, - } = mime_type.unwrap(); - let mut params = p; - params.push(("charset".to_string(), charset.clone().unwrap())); - mime_type = Some(DataUrlMime { - type_: t.to_string(), - subtype: st.to_string(), - parameters: params, - }) - } - } - }, - } - } - - // Step 7, 8 - mime_type.map(|m| format!("{}", m).into_bytes()) -} diff --git a/components/script/dom/xmlhttprequest.rs b/components/script/dom/xmlhttprequest.rs index ca5bb72a1dc..4e7c136f42b 100644 --- a/components/script/dom/xmlhttprequest.rs +++ b/components/script/dom/xmlhttprequest.rs @@ -26,6 +26,7 @@ use js::jsval::{JSVal, NullValue}; use js::rust::wrappers::JS_ParseJSON; use js::rust::{HandleObject, MutableHandleValue}; use js::typedarray::{ArrayBuffer, ArrayBufferU8}; +use net_traits::fetch::headers::extract_mime_type_as_dataurl_mime; use net_traits::http_status::HttpStatus; use net_traits::request::{CredentialsMode, Referrer, RequestBuilder, RequestId, RequestMode}; use net_traits::{ @@ -59,7 +60,7 @@ use crate::dom::document::{Document, DocumentSource, HasBrowsingContext, IsHTMLD use crate::dom::event::{Event, EventBubbles, EventCancelable}; use crate::dom::eventtarget::EventTarget; use crate::dom::globalscope::GlobalScope; -use crate::dom::headers::{extract_mime_type, is_forbidden_request_header}; +use crate::dom::headers::is_forbidden_request_header; use crate::dom::node::Node; use crate::dom::performanceresourcetiming::InitiatorType; use crate::dom::progressevent::ProgressEvent; @@ -1324,11 +1325,7 @@ impl XMLHttpRequest { return response; } // Step 2 - let mime = self - .final_mime_type() - .as_ref() - .map(|m| normalize_type_string(&m.to_string())) - .unwrap_or("".to_owned()); + let mime = normalize_type_string(&self.final_mime_type().to_string()); // Step 3, 4 let bytes = self.response.borrow().to_vec(); @@ -1366,64 +1363,77 @@ impl XMLHttpRequest { return response; } - // Step 1 + // Step 1: If xhr’s response’s body is null, then return. if self.response_status.get().is_err() { return None; } - // Step 2 - let mime_type = self.final_mime_type(); - // Step 5.3, 7 - let charset = self.final_charset().unwrap_or(UTF_8); - let temp_doc: DomRoot<Document>; - match mime_type { - Some(ref mime) if mime.matches(TEXT, HTML) => { - // Step 4 - if self.response_type.get() == XMLHttpRequestResponseType::_empty { - return None; - } else { - // TODO Step 5.2 "If charset is null, prescan the first 1024 bytes of xhr’s received bytes" - // Step 5 - temp_doc = self.document_text_html(can_gc); - } - }, - // Step 7 - None => { - temp_doc = self.handle_xml(can_gc); - // Not sure it the parser should throw an error for this case - // The specification does not indicates this test, - // but for now we check the document has no child nodes - let has_no_child_nodes = temp_doc.upcast::<Node>().children().next().is_none(); - if has_no_child_nodes { - return None; - } - }, - Some(ref mime) - if mime.matches(TEXT, XML) || - mime.matches(APPLICATION, XML) || - mime.has_suffix(XML) => - { - temp_doc = self.handle_xml(can_gc); - // Not sure it the parser should throw an error for this case - // The specification does not indicates this test, - // but for now we check the document has no child nodes - let has_no_child_nodes = temp_doc.upcast::<Node>().children().next().is_none(); - if has_no_child_nodes { - return None; - } - }, - // Step 3 - _ => { + // Step 2: Let finalMIME be the result of get a final MIME type for xhr. + let final_mime = self.final_mime_type(); + + // Step 3: If finalMIME is not an HTML MIME type or an XML MIME type, then return. + let is_xml_mime_type = final_mime.matches(TEXT, XML) || + final_mime.matches(APPLICATION, XML) || + final_mime.has_suffix(XML); + if !final_mime.matches(TEXT, HTML) && !is_xml_mime_type { + return None; + } + + // Step 4: If xhr’s response type is the empty string and finalMIME is an HTML MIME + // type, then return. + let charset; + let temp_doc; + if final_mime.matches(TEXT, HTML) { + if self.response_type.get() == XMLHttpRequestResponseType::_empty { return None; - }, + } + + // Step 5: If finalMIME is an HTML MIME type, then: + // Step 5.1: Let charset be the result of get a final encoding for xhr. + // Step 5.2: If charset is null, prescan the first 1024 bytes of xhr’s received bytes + // and if that does not terminate unsuccessfully then let charset be the return value. + // TODO: This isn't happening right now. + // Step 5.3. If charset is null, then set charset to UTF-8. + charset = Some(self.final_charset().unwrap_or(UTF_8)); + + // Step 5.4: Let document be a document that represents the result parsing xhr’s + // received bytes following the rules set forth in the HTML Standard for an HTML parser + // with scripting disabled and a known definite encoding charset. [HTML] + temp_doc = self.document_text_html(can_gc); + } else { + assert!(is_xml_mime_type); + + // Step 6: Otherwise, let document be a document that represents the result of running + // the XML parser with XML scripting support disabled on xhr’s received bytes. If that + // fails (unsupported character encoding, namespace well-formedness error, etc.), then + // return null. [HTML] + // + // TODO: The spec seems to suggest the charset should come from the XML parser here. + temp_doc = self.handle_xml(can_gc); + charset = self.final_charset(); + + // Not sure it the parser should throw an error for this case + // The specification does not indicates this test, + // but for now we check the document has no child nodes + let has_no_child_nodes = temp_doc.upcast::<Node>().children().next().is_none(); + if has_no_child_nodes { + return None; + } } - // Step 8 + + // Step 7: If charset is null, then set charset to UTF-8. + let charset = charset.unwrap_or(UTF_8); + + // Step 8: Set document’s encoding to charset. temp_doc.set_encoding(charset); - // Step 9 to 11 - // Done by handle_text_html and handle_xml + // Step 9: Set document’s content type to finalMIME. + // Step 10: Set document’s URL to xhr’s response’s URL. + // Step 11: Set document’s origin to xhr’s relevant settings object’s origin. + // + // Done by `handle_text_html()` and `handle_xml()`. - // Step 12 + // Step 12: Set xhr’s response object to document. self.response_xml.set(Some(&temp_doc)); self.response_xml.get() } @@ -1507,7 +1517,7 @@ impl XMLHttpRequest { Ok(parsed) => Some(parsed), Err(_) => None, // Step 7 }; - let content_type = self.final_mime_type(); + let content_type = Some(self.final_mime_type()); Document::new( win, HasBrowsingContext::No, @@ -1598,14 +1608,16 @@ impl XMLHttpRequest { // 3. If responseMIME’s parameters["charset"] exists, then set label to it. let response_charset = self .response_mime_type() - .and_then(|mime| mime.get_parameter(CHARSET).map(|c| c.to_string())); + .get_parameter(CHARSET) + .map(ToString::to_string); // 4. If xhr’s override MIME type’s parameters["charset"] exists, then set label to it. let override_charset = self .override_mime_type .borrow() .as_ref() - .and_then(|mime| mime.get_parameter(CHARSET).map(|c| c.to_string())); + .and_then(|mime| mime.get_parameter(CHARSET)) + .map(ToString::to_string); // 5. If label is null, then return null. // 6. Let encoding be the result of getting an encoding from label. @@ -1617,23 +1629,22 @@ impl XMLHttpRequest { } /// <https://xhr.spec.whatwg.org/#response-mime-type> - fn response_mime_type(&self) -> Option<Mime> { - return extract_mime_type(&self.response_headers.borrow()) - .and_then(|mime_as_bytes| { - String::from_utf8(mime_as_bytes) - .unwrap_or_default() - .parse() - .ok() - }) - .or(Some(Mime::new(TEXT, XML))); + fn response_mime_type(&self) -> Mime { + // 1. Let mimeType be the result of extracting a MIME type from xhr’s response’s + // header list. + // 2. If mimeType is failure, then set mimeType to text/xml. + // 3. Return mimeType. + extract_mime_type_as_dataurl_mime(&self.response_headers.borrow()) + .unwrap_or_else(|| Mime::new(TEXT, XML)) } /// <https://xhr.spec.whatwg.org/#final-mime-type> - fn final_mime_type(&self) -> Option<Mime> { - match *self.override_mime_type.borrow() { - Some(ref override_mime) => Some(override_mime.clone()), - None => self.response_mime_type(), - } + fn final_mime_type(&self) -> Mime { + self.override_mime_type + .borrow() + .as_ref() + .map(MimeExt::clone) + .unwrap_or_else(|| self.response_mime_type()) } } diff --git a/components/script/stylesheet_loader.rs b/components/script/stylesheet_loader.rs index a18d63e323b..5efaf78e542 100644 --- a/components/script/stylesheet_loader.rs +++ b/components/script/stylesheet_loader.rs @@ -163,7 +163,8 @@ impl FetchResponseListener for StylesheetContext { Some(meta) => meta, None => return, }; - let is_css = metadata.content_type.is_some_and(|ct| { + + let mut is_css = metadata.content_type.is_some_and(|ct| { let mime: Mime = ct.into_inner().into(); mime.type_() == mime::TEXT && mime.subtype() == mime::CSS }) || ( @@ -177,6 +178,17 @@ impl FetchResponseListener for StylesheetContext { document.origin().immutable().clone() == metadata.final_url.origin() ); + // From <https://html.spec.whatwg.org/multipage/#link-type-stylesheet>: + // > Quirk: If the document has been set to quirks mode, has the same origin as + // > the URL of the external resource, and the Content-Type metadata of the + // > external resource is not a supported style sheet type, the user agent must + // > instead assume it to be text/css. + if document.quirks_mode() == QuirksMode::Quirks && + document.url().origin() == self.url.origin() + { + is_css = true; + } + let data = if is_css { let data = std::mem::take(&mut self.data); self.unminify_css(data, metadata.final_url.clone()) diff --git a/components/script_bindings/codegen/Bindings.conf b/components/script_bindings/codegen/Bindings.conf index 92871bc54aa..d89b65c646d 100644 --- a/components/script_bindings/codegen/Bindings.conf +++ b/components/script_bindings/codegen/Bindings.conf @@ -39,7 +39,7 @@ DOMInterfaces = { 'Blob': { 'weakReferenceable': True, 'canGc': ['Slice', 'Text', 'ArrayBuffer', 'Stream', 'Bytes'], - 'inRealms': ['Bytes'], + 'inRealms': ['Bytes', 'ArrayBuffer'], }, 'Bluetooth': { diff --git a/components/shared/net/Cargo.toml b/components/shared/net/Cargo.toml index 79ea936a688..0dfad486455 100644 --- a/components/shared/net/Cargo.toml +++ b/components/shared/net/Cargo.toml @@ -19,6 +19,7 @@ compositing_traits = { workspace = true } content-security-policy = { workspace = true } cookie = { workspace = true } crossbeam-channel = { workspace = true } +data-url = { workspace = true } embedder_traits = { workspace = true } headers = { workspace = true } http = { workspace = true } diff --git a/components/shared/net/fetch/headers.rs b/components/shared/net/fetch/headers.rs index 11bb68d5d0a..5ffd537adf8 100644 --- a/components/shared/net/fetch/headers.rs +++ b/components/shared/net/fetch/headers.rs @@ -3,8 +3,9 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ use std::iter::Peekable; -use std::str::Chars; +use std::str::{Chars, FromStr}; +use data_url::mime::Mime as DataUrlMime; use headers::HeaderMap; /// <https://fetch.spec.whatwg.org/#http-tab-or-space> @@ -184,3 +185,93 @@ fn collect_http_quoted_string(position: &mut Peekable<Chars>, extract_value: boo // Step 6, 7 value } + +/// <https://fetch.spec.whatwg.org/#concept-header-extract-mime-type> +/// This function uses data_url::Mime to parse the MIME Type because +/// mime::Mime does not provide a parser following the Fetch spec +/// see <https://github.com/hyperium/mime/issues/106> +pub fn extract_mime_type_as_dataurl_mime(headers: &HeaderMap) -> Option<DataUrlMime> { + // > 1: Let charset be null. + let mut charset = None; + // > 2: Let essence be null. + let mut essence = String::new(); + // > 3: Let mimeType be null. + let mut mime_type = None; + + // > 4: Let values be the result of getting, decoding, and splitting `Content-Type` + // from headers. + // > 5: If values is null, then return failure. + let headers_values = get_decode_and_split_header_name("content-type", headers)?; + + // > 6: For each value of values: + for header_value in headers_values.iter() { + // > 6.1: Let temporaryMimeType be the result of parsing value. + match DataUrlMime::from_str(header_value) { + // > 6.2: If temporaryMimeType is failure or its essence is "*/*", then continue. + Err(_) => continue, + Ok(temp_mime) => { + let temp_essence = format!("{}/{}", temp_mime.type_, temp_mime.subtype); + + // > 6.2: If temporaryMimeType is failure or its essence is "*/*", then + // continue. + if temp_essence == "*/*" { + continue; + } + + // > 6.3: Set mimeType to temporaryMimeType. + mime_type = Some(DataUrlMime { + type_: temp_mime.type_.to_string(), + subtype: temp_mime.subtype.to_string(), + parameters: temp_mime.parameters.clone(), + }); + + // > 6.4: If mimeType’s essence is not essence, then: + let temp_charset = &temp_mime.get_parameter("charset"); + if temp_essence != essence { + // > 6.4.1: Set charset to null. + // > 6.4.2: If mimeType’s parameters["charset"] exists, then set + // charset to mimeType’s parameters["charset"]. + charset = temp_charset.map(|c| c.to_string()); + // > 6.4.3: Set essence to mimeType’s essence. + essence = temp_essence.to_owned(); + } else { + // > 6.5: Otherwise, if mimeType’s parameters["charset"] does not exist, + // and charset is non-null, set mimeType’s parameters["charset"] to charset. + if temp_charset.is_none() && charset.is_some() { + let DataUrlMime { + type_: t, + subtype: st, + parameters: p, + } = mime_type.unwrap(); + let mut params = p; + params.push(("charset".to_string(), charset.clone().unwrap())); + mime_type = Some(DataUrlMime { + type_: t.to_string(), + subtype: st.to_string(), + parameters: params, + }) + } + } + }, + } + } + + // > 7: If mimeType is null, then return failure. + // > 8: Return mimeType. + mime_type +} + +pub fn extract_mime_type(headers: &HeaderMap) -> Option<Vec<u8>> { + extract_mime_type_as_dataurl_mime(headers).map(|m| format!("{}", m).into_bytes()) +} + +pub fn extract_mime_type_as_mime(headers: &HeaderMap) -> Option<mime::Mime> { + extract_mime_type_as_dataurl_mime(headers).and_then(|mime: DataUrlMime| { + // Try to transform a data-url::mime::Mime into a mime::Mime + let mut mime_as_str = format!("{}/{}", mime.type_, mime.subtype); + for p in mime.parameters { + mime_as_str.push_str(format!("; {}={}", p.0, p.1).as_str()); + } + mime_as_str.parse().ok() + }) +} diff --git a/components/shared/net/response.rs b/components/shared/net/response.rs index f91993ddccb..9a01fbbf965 100644 --- a/components/shared/net/response.rs +++ b/components/shared/net/response.rs @@ -7,7 +7,6 @@ use std::sync::Mutex; use std::sync::atomic::AtomicBool; -use headers::{ContentType, HeaderMapExt}; use http::HeaderMap; use hyper_serde::Serde; use malloc_size_of_derive::MallocSizeOf; @@ -15,6 +14,7 @@ use serde::{Deserialize, Serialize}; use servo_arc::Arc; use servo_url::ServoUrl; +use crate::fetch::headers::extract_mime_type_as_mime; use crate::http_status::HttpStatus; use crate::{ FetchMetadata, FilteredMetadata, Metadata, NetworkError, ReferrerPolicy, ResourceFetchTiming, @@ -300,13 +300,7 @@ impl Response { pub fn metadata(&self) -> Result<FetchMetadata, NetworkError> { fn init_metadata(response: &Response, url: &ServoUrl) -> Metadata { let mut metadata = Metadata::default(url.clone()); - metadata.set_content_type( - response - .headers - .typed_get::<ContentType>() - .map(|v| v.into()) - .as_ref(), - ); + metadata.set_content_type(extract_mime_type_as_mime(&response.headers).as_ref()); metadata.location_url.clone_from(&response.location_url); metadata.headers = Some(Serde(response.headers.clone())); metadata.status.clone_from(&response.status); diff --git a/components/webdriver_server/actions.rs b/components/webdriver_server/actions.rs index 43dd0e183dc..7965120b0fd 100644 --- a/components/webdriver_server/actions.rs +++ b/components/webdriver_server/actions.rs @@ -33,6 +33,9 @@ pub(crate) enum InputSourceState { } // https://w3c.github.io/webdriver/#dfn-pointer-input-source +// TODO: subtype is used for https://w3c.github.io/webdriver/#dfn-get-a-pointer-id +// Need to add pointer-id to the following struct +#[allow(dead_code)] pub(crate) struct PointerInputState { subtype: PointerType, pressed: HashSet<u64>, @@ -142,7 +145,22 @@ impl Handler { .or_insert(InputSourceState::Key(KeyInputState::new())); match action { KeyAction::Down(action) => { - self.dispatch_keydown_action(source_id, action) + self.dispatch_keydown_action(source_id, action); + // Step 9. If subtype is "keyDown", append a copy of action + // object with the subtype property changed to "keyUp" to + // input state's input cancel list. + self.session_mut().unwrap().input_cancel_list.push( + ActionSequence { + id: source_id.into(), + actions: ActionsType::Key { + actions: vec![KeyActionItem::Key(KeyAction::Up( + KeyUpAction { + value: action.value.clone(), + }, + ))], + }, + }, + ); }, KeyAction::Up(action) => { self.dispatch_keyup_action(source_id, action) @@ -172,7 +190,27 @@ impl Handler { match action { PointerAction::Cancel => (), PointerAction::Down(action) => { - self.dispatch_pointerdown_action(source_id, action) + self.dispatch_pointerdown_action(source_id, action); + + // Step 10. If subtype is "pointerDown", append a copy of action + // object with the subtype property changed to "pointerUp" to + // input state's input cancel list. + self.session_mut().unwrap().input_cancel_list.push( + ActionSequence { + id: source_id.into(), + actions: ActionsType::Pointer { + parameters: PointerActionParameters { + pointer_type: parameters.pointer_type, + }, + actions: vec![PointerActionItem::Pointer( + PointerAction::Up(PointerUpAction { + button: action.button, + ..Default::default() + }), + )], + }, + }, + ); }, PointerAction::Move(action) => self.dispatch_pointermove_action( source_id, @@ -215,26 +253,18 @@ impl Handler { // https://w3c.github.io/webdriver/#dfn-dispatch-a-keydown-action fn dispatch_keydown_action(&mut self, source_id: &str, action: &KeyDownAction) { - let session = self.session.as_mut().unwrap(); - + // Step 1 let raw_key = action.value.chars().next().unwrap(); - let key_input_state = match session.input_state_table.get_mut(source_id).unwrap() { - InputSourceState::Key(key_input_state) => key_input_state, - _ => unreachable!(), - }; - - session.input_cancel_list.push(ActionSequence { - id: source_id.into(), - actions: ActionsType::Key { - actions: vec![KeyActionItem::Key(KeyAction::Up(KeyUpAction { - value: action.value.clone(), - }))], - }, - }); + let key_input_state = self.get_key_input_state_mut(source_id); + // Step 2 - 11. Done by `keyboard-types` crate. let keyboard_event = key_input_state.dispatch_keydown(raw_key); - let cmd_msg = - WebDriverCommandMsg::KeyboardAction(session.browsing_context_id, keyboard_event); + + // Step 12 + let cmd_msg = WebDriverCommandMsg::KeyboardAction( + self.session().unwrap().browsing_context_id, + keyboard_event, + ); self.constellation_chan .send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg)) .unwrap(); @@ -242,71 +272,57 @@ impl Handler { // https://w3c.github.io/webdriver/#dfn-dispatch-a-keyup-action fn dispatch_keyup_action(&mut self, source_id: &str, action: &KeyUpAction) { - let session = self.session.as_mut().unwrap(); - + // Step 1 let raw_key = action.value.chars().next().unwrap(); - let key_input_state = match session.input_state_table.get_mut(source_id).unwrap() { - InputSourceState::Key(key_input_state) => key_input_state, - _ => unreachable!(), - }; - - session.input_cancel_list.push(ActionSequence { - id: source_id.into(), - actions: ActionsType::Key { - actions: vec![KeyActionItem::Key(KeyAction::Up(KeyUpAction { - value: action.value.clone(), - }))], - }, - }); + let key_input_state = self.get_key_input_state_mut(source_id); + // Step 2 - 11. Done by `keyboard-types` crate. if let Some(keyboard_event) = key_input_state.dispatch_keyup(raw_key) { - let cmd_msg = - WebDriverCommandMsg::KeyboardAction(session.browsing_context_id, keyboard_event); + // Step 12 + let cmd_msg = WebDriverCommandMsg::KeyboardAction( + self.session().unwrap().browsing_context_id, + keyboard_event, + ); self.constellation_chan .send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg)) .unwrap(); } } + fn get_pointer_input_state_mut(&mut self, source_id: &str) -> &mut PointerInputState { + let session = self.session_mut().unwrap(); + let pointer_input_state = match session.input_state_table.get_mut(source_id).unwrap() { + InputSourceState::Pointer(pointer_input_state) => pointer_input_state, + _ => unreachable!(), + }; + pointer_input_state + } + + fn get_key_input_state_mut(&mut self, source_id: &str) -> &mut KeyInputState { + let session = self.session_mut().unwrap(); + let key_input_state = match session.input_state_table.get_mut(source_id).unwrap() { + InputSourceState::Key(key_input_state) => key_input_state, + _ => unreachable!(), + }; + key_input_state + } + // https://w3c.github.io/webdriver/#dfn-dispatch-a-pointerdown-action pub(crate) fn dispatch_pointerdown_action( &mut self, source_id: &str, action: &PointerDownAction, ) { - let session = self.session.as_mut().unwrap(); - - let pointer_input_state = match session.input_state_table.get_mut(source_id).unwrap() { - InputSourceState::Pointer(pointer_input_state) => pointer_input_state, - _ => unreachable!(), - }; + let webview_id = self.session().unwrap().webview_id; + let pointer_input_state = self.get_pointer_input_state_mut(source_id); if pointer_input_state.pressed.contains(&action.button) { return; } pointer_input_state.pressed.insert(action.button); - session.input_cancel_list.push(ActionSequence { - id: source_id.into(), - actions: ActionsType::Pointer { - parameters: PointerActionParameters { - pointer_type: match pointer_input_state.subtype { - PointerType::Mouse => PointerType::Mouse, - PointerType::Pen => PointerType::Pen, - PointerType::Touch => PointerType::Touch, - }, - }, - actions: vec![PointerActionItem::Pointer(PointerAction::Up( - PointerUpAction { - button: action.button, - ..Default::default() - }, - ))], - }, - }); - let cmd_msg = WebDriverCommandMsg::MouseButtonAction( - session.webview_id, + webview_id, MouseButtonAction::Down, action.button.into(), pointer_input_state.x as f32, @@ -319,39 +335,16 @@ impl Handler { // https://w3c.github.io/webdriver/#dfn-dispatch-a-pointerup-action pub(crate) fn dispatch_pointerup_action(&mut self, source_id: &str, action: &PointerUpAction) { - let session = self.session.as_mut().unwrap(); - - let pointer_input_state = match session.input_state_table.get_mut(source_id).unwrap() { - InputSourceState::Pointer(pointer_input_state) => pointer_input_state, - _ => unreachable!(), - }; + let webview_id = self.session().unwrap().webview_id; + let pointer_input_state = self.get_pointer_input_state_mut(source_id); if !pointer_input_state.pressed.contains(&action.button) { return; } pointer_input_state.pressed.remove(&action.button); - session.input_cancel_list.push(ActionSequence { - id: source_id.into(), - actions: ActionsType::Pointer { - parameters: PointerActionParameters { - pointer_type: match pointer_input_state.subtype { - PointerType::Mouse => PointerType::Mouse, - PointerType::Pen => PointerType::Pen, - PointerType::Touch => PointerType::Touch, - }, - }, - actions: vec![PointerActionItem::Pointer(PointerAction::Down( - PointerDownAction { - button: action.button, - ..Default::default() - }, - ))], - }, - }); - let cmd_msg = WebDriverCommandMsg::MouseButtonAction( - session.webview_id, + webview_id, MouseButtonAction::Up, action.button.into(), pointer_input_state.x as f32, @@ -432,12 +425,9 @@ impl Handler { target_y: f64, tick_start: Instant, ) { - let session = self.session.as_mut().unwrap(); - let pointer_input_state = match session.input_state_table.get_mut(source_id).unwrap() { - InputSourceState::Pointer(pointer_input_state) => pointer_input_state, - _ => unreachable!(), - }; - + let webview_id = self.session().unwrap().webview_id; + let constellation_chan = self.constellation_chan.clone(); + let pointer_input_state = self.get_pointer_input_state_mut(source_id); loop { // Step 1 let time_delta = tick_start.elapsed().as_millis(); @@ -469,10 +459,9 @@ impl Handler { // Step 7 if x != current_x || y != current_y { // Step 7.2 - let cmd_msg = - WebDriverCommandMsg::MouseMoveAction(session.webview_id, x as f32, y as f32); + let cmd_msg = WebDriverCommandMsg::MouseMoveAction(webview_id, x as f32, y as f32); //TODO: Need Synchronization here before updating `pointer_input_state` - self.constellation_chan + constellation_chan .send(EmbedderToConstellationMessage::WebDriverCommand(cmd_msg)) .unwrap(); // Step 7.3 @@ -567,7 +556,7 @@ impl Handler { mut curr_delta_y: i64, tick_start: Instant, ) { - let session = self.session.as_mut().unwrap(); + let session = self.session_mut().unwrap(); // Step 1 let time_delta = tick_start.elapsed().as_millis(); diff --git a/tests/wpt/meta/encoding/single-byte-decoder.window.js.ini b/tests/wpt/meta/encoding/single-byte-decoder.window.js.ini index d71939b82b5..2ee12a08ed4 100644 --- a/tests/wpt/meta/encoding/single-byte-decoder.window.js.ini +++ b/tests/wpt/meta/encoding/single-byte-decoder.window.js.ini @@ -1,7 +1,5 @@ [single-byte-decoder.window.html?XMLHttpRequest] -[single-byte-decoder.window.html?TextDecoder] - [single-byte-decoder.window.html?document] [ISO-8859-2: iso_8859-2:1987 (document.characterSet and document.inputEncoding)] expected: FAIL diff --git a/tests/wpt/meta/fetch/content-type/response.window.js.ini b/tests/wpt/meta/fetch/content-type/response.window.js.ini index fb99623b59d..07b9bbfe08e 100644 --- a/tests/wpt/meta/fetch/content-type/response.window.js.ini +++ b/tests/wpt/meta/fetch/content-type/response.window.js.ini @@ -1,49 +1,10 @@ [response.window.html] - [fetch(): combined response Content-Type: text/plain ] - expected: FAIL - - [fetch(): separate response Content-Type: text/html;" \\" text/plain] - expected: FAIL - - [fetch(): separate response Content-Type: text/html;" text/plain] - expected: FAIL - - [<iframe>: combined response Content-Type: text/plain */*;charset=gbk] - expected: FAIL - - [fetch(): separate response Content-Type: text/html;x=" text/plain] - expected: FAIL - - [fetch(): combined response Content-Type: text/plain;charset=gbk text/html;charset=windows-1254] - expected: FAIL - [Request: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: FAIL - [<iframe>: separate response Content-Type: text/plain] - expected: FAIL - [fetch(): combined response Content-Type: text/html;x=" text/plain] expected: FAIL - [fetch(): combined response Content-Type: text/plain;charset=gbk;x=foo text/plain] - expected: FAIL - - [fetch(): combined response Content-Type: text/html;charset=gbk text/plain text/html] - expected: FAIL - - [fetch(): combined response Content-Type: text/html text/plain] - expected: FAIL - - [fetch(): combined response Content-Type: */* text/html] - expected: FAIL - - [fetch(): combined response Content-Type: text/html */*;charset=gbk] - expected: FAIL - - [fetch(): combined response Content-Type: text/plain;charset=gbk text/plain] - expected: FAIL - [<iframe>: combined response Content-Type: text/plain;charset=gbk text/html;charset=windows-1254] expected: FAIL @@ -53,110 +14,38 @@ [<iframe>: separate response Content-Type: text/plain;charset=gbk text/html;charset=windows-1254] expected: FAIL - [fetch(): combined response Content-Type: text/plain;charset=gbk text/html] - expected: FAIL - [fetch(): separate response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: FAIL [<iframe>: combined response Content-Type: text/plain;charset=gbk text/plain] expected: FAIL - [Request: combined response Content-Type: text/html;x=" text/plain] - expected: FAIL - [<iframe>: separate response Content-Type: text/plain;charset=gbk text/plain] expected: FAIL [<iframe>: combined response Content-Type: text/plain;charset=gbk text/plain;charset=windows-1252] expected: FAIL - [fetch(): combined response Content-Type: text/html */*] - expected: FAIL - - [Request: combined response Content-Type: text/html;" \\" text/plain] - expected: FAIL - - [Response: combined response Content-Type: text/html;" text/plain] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html;" " text/plain] - expected: FAIL - [<iframe>: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: FAIL - [Response: combined response Content-Type: text/html;x=" text/plain] - expected: FAIL - [<iframe>: combined response Content-Type: text/html;charset=gbk text/html;x=",text/plain] expected: FAIL - [<iframe>: combined response Content-Type: text/plain ] - expected: FAIL - - [<iframe>: combined response Content-Type: text/html text/plain] - expected: FAIL - - [<iframe>: combined response Content-Type: text/plain] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html;" " text/plain] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html text/plain] - expected: FAIL - - [Response: combined response Content-Type: text/html;" \\" text/plain] - expected: FAIL - [<iframe>: combined response Content-Type: text/plain;charset=gbk;x=foo text/plain] expected: FAIL - [fetch(): combined response Content-Type: text/plain] - expected: FAIL - [<iframe>: separate response Content-Type: text/plain;charset=gbk;x=foo text/plain] expected: FAIL - [fetch(): combined response Content-Type: text/plain */*] - expected: FAIL - [<iframe>: separate response Content-Type: text/html;charset=gbk text/html;x=",text/plain] expected: FAIL - [fetch(): combined response Content-Type: text/plain */*;charset=gbk] - expected: FAIL - - [fetch(): combined response Content-Type: text/plain;charset=gbk text/plain;charset=windows-1252] - expected: FAIL - - [<iframe>: combined response Content-Type: text/plain */*] - expected: FAIL - - [Request: combined response Content-Type: text/html;" text/plain] - expected: FAIL - [<iframe>: separate response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: FAIL - [fetch(): combined response Content-Type: text/html;" " text/plain] - expected: FAIL - [<iframe>: separate response Content-Type: text/plain;charset=gbk text/plain;charset=windows-1252] expected: FAIL - [fetch(): combined response Content-Type: text/html;charset=gbk text/html;x=",text/plain] - expected: FAIL - [Response: combined response Content-Type: text/html;" \\" text/plain ";charset=GBK] expected: FAIL - - [<iframe>: separate response Content-Type: text/plain;charset=gbk text/html] - expected: FAIL - - [<iframe>: separate response Content-Type: text/html;charset=gbk text/plain text/html] - expected: FAIL - - [<iframe>: separate response Content-Type: */* text/html] - expected: FAIL diff --git a/tests/wpt/meta/fetch/content-type/script.window.js.ini b/tests/wpt/meta/fetch/content-type/script.window.js.ini deleted file mode 100644 index be7494e9c52..00000000000 --- a/tests/wpt/meta/fetch/content-type/script.window.js.ini +++ /dev/null @@ -1,57 +0,0 @@ -[script.window.html] - [separate text/javascript;charset=windows-1252 x/x text/javascript] - expected: FAIL - - [combined text/javascript;" x/x] - expected: FAIL - - [combined x/x;charset=windows-1252 text/javascript] - expected: FAIL - - [combined text/javascript;charset=windows-1252;" \\" x/x] - expected: FAIL - - [separate x/x text/javascript] - expected: FAIL - - [combined x/x;" x/y;\\" text/javascript;charset=windows-1252;" text/javascript] - expected: FAIL - - [combined x/x text/javascript] - expected: FAIL - - [separate text/javascript;charset=windows-1252;" \\" x/x] - expected: FAIL - - [combined text/javascript error] - expected: FAIL - - [combined text/javascript;charset=windows-1252 error text/javascript] - expected: FAIL - - [combined text/javascript;charset=windows-1252 text/javascript] - expected: FAIL - - [separate x/x;charset=windows-1252 text/javascript] - expected: FAIL - - [combined text/javascript;charset=windows-1252 x/x text/javascript] - expected: FAIL - - [separate x/x;" x/y;\\" text/javascript;charset=windows-1252;" text/javascript] - expected: FAIL - - [separate text/javascript;";charset=windows-1252] - expected: FAIL - - [combined text/javascript; charset=windows-1252 text/javascript] - expected: FAIL - - [separate text/javascript;" x/x] - expected: FAIL - - [combined text/javascript ] - expected: FAIL - - [separate text/javascript x/x] - expected: FAIL diff --git a/tests/wpt/meta/fetch/nosniff/script.html.ini b/tests/wpt/meta/fetch/nosniff/script.html.ini deleted file mode 100644 index a7c14e36ada..00000000000 --- a/tests/wpt/meta/fetch/nosniff/script.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[script.html] - [URL query: text/ecmascript;blah] - expected: FAIL diff --git a/tests/wpt/meta/fetch/nosniff/stylesheet.html.ini b/tests/wpt/meta/fetch/nosniff/stylesheet.html.ini index e7469064e26..3b01619aeca 100644 --- a/tests/wpt/meta/fetch/nosniff/stylesheet.html.ini +++ b/tests/wpt/meta/fetch/nosniff/stylesheet.html.ini @@ -10,9 +10,3 @@ [Revalidated URL query: text/json] expected: FAIL - - [URL query: text/css;blah] - expected: FAIL - - [Revalidated URL query: text/css;blah] - expected: FAIL diff --git a/tests/wpt/meta/fetch/nosniff/worker.html.ini b/tests/wpt/meta/fetch/nosniff/worker.html.ini deleted file mode 100644 index a2f0564a334..00000000000 --- a/tests/wpt/meta/fetch/nosniff/worker.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[worker.html] - [URL query: ?type=text/ecmascript;yay] - expected: FAIL diff --git a/tests/wpt/meta/mimesniff/mime-types/charset-parameter.window.js.ini b/tests/wpt/meta/mimesniff/mime-types/charset-parameter.window.js.ini index 82cfd1dfe2d..4e653d68af1 100644 --- a/tests/wpt/meta/mimesniff/mime-types/charset-parameter.window.js.ini +++ b/tests/wpt/meta/mimesniff/mime-types/charset-parameter.window.js.ini @@ -2,41 +2,23 @@ [text/html;x=(;charset=gbk] expected: FAIL - [text/html ;charset=gbk] - expected: FAIL - [text/html;charset= gbk] expected: FAIL - [text/html;test;charset=gbk] - expected: FAIL - - [text/html;test=;charset=gbk] - expected: FAIL - - [text/html;';charset=gbk] - expected: FAIL - - [text/html;";charset=gbk] - expected: FAIL - - [text/html ; ; charset=gbk] - expected: FAIL - - [text/html;;;;charset=gbk] - expected: FAIL - [text/html;charset= ";charset=GBK] expected: FAIL [text/html;charset=";charset=foo";charset=GBK] expected: FAIL - [text/html;charset="gbk] + [text/html;test=ÿ;charset=gbk] expected: FAIL - [text/html;charset="gbk"x] + [text/html;charset=" gbk"] expected: FAIL - [text/html;test=ÿ;charset=gbk] + [text/html;charset="gbk "] + expected: FAIL + + [text/html;charset="\\ gbk"] expected: FAIL diff --git a/tests/wpt/meta/mimesniff/mime-types/parsing.any.js.ini b/tests/wpt/meta/mimesniff/mime-types/parsing.any.js.ini index 38798229d89..f89d4952468 100644 --- a/tests/wpt/meta/mimesniff/mime-types/parsing.any.js.ini +++ b/tests/wpt/meta/mimesniff/mime-types/parsing.any.js.ini @@ -950,9 +950,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -968,9 +965,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -986,9 +980,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1004,9 +995,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1022,9 +1010,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1040,9 +1025,6 @@ [x/x;
=x;bonus=x (Blob/File)] expected: FAIL - [x/x;
=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=
;bonus=x (Blob/File)] expected: FAIL @@ -1058,9 +1040,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1076,9 +1055,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1094,9 +1070,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1112,9 +1085,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1130,9 +1100,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1148,9 +1115,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1166,9 +1130,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1184,9 +1145,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1202,9 +1160,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1220,9 +1175,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1238,9 +1190,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1256,9 +1205,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1274,9 +1220,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1292,9 +1235,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1310,9 +1250,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1328,9 +1265,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1346,9 +1280,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1364,9 +1295,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1382,9 +1310,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1400,9 +1325,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1418,9 +1340,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1436,9 +1355,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1454,9 +1370,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1472,9 +1385,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1490,9 +1400,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1508,9 +1415,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1526,9 +1430,6 @@ [x/x; =x;bonus=x (Blob/File)] expected: FAIL - [x/x; =x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x= ;bonus=x (Blob/File)] expected: FAIL @@ -1544,9 +1445,6 @@ [x/x;¡=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¡=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¡;bonus=x (Blob/File)] expected: FAIL @@ -1562,9 +1460,6 @@ [x/x;¢=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¢=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¢;bonus=x (Blob/File)] expected: FAIL @@ -1580,9 +1475,6 @@ [x/x;£=x;bonus=x (Blob/File)] expected: FAIL - [x/x;£=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=£;bonus=x (Blob/File)] expected: FAIL @@ -1598,9 +1490,6 @@ [x/x;¤=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¤=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¤;bonus=x (Blob/File)] expected: FAIL @@ -1616,9 +1505,6 @@ [x/x;¥=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¥=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¥;bonus=x (Blob/File)] expected: FAIL @@ -1634,9 +1520,6 @@ [x/x;¦=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¦=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¦;bonus=x (Blob/File)] expected: FAIL @@ -1652,9 +1535,6 @@ [x/x;§=x;bonus=x (Blob/File)] expected: FAIL - [x/x;§=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=§;bonus=x (Blob/File)] expected: FAIL @@ -1670,9 +1550,6 @@ [x/x;¨=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¨=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¨;bonus=x (Blob/File)] expected: FAIL @@ -1688,9 +1565,6 @@ [x/x;©=x;bonus=x (Blob/File)] expected: FAIL - [x/x;©=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=©;bonus=x (Blob/File)] expected: FAIL @@ -1706,9 +1580,6 @@ [x/x;ª=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ª=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ª;bonus=x (Blob/File)] expected: FAIL @@ -1724,9 +1595,6 @@ [x/x;«=x;bonus=x (Blob/File)] expected: FAIL - [x/x;«=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=«;bonus=x (Blob/File)] expected: FAIL @@ -1742,9 +1610,6 @@ [x/x;¬=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¬=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¬;bonus=x (Blob/File)] expected: FAIL @@ -1760,9 +1625,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -1778,9 +1640,6 @@ [x/x;®=x;bonus=x (Blob/File)] expected: FAIL - [x/x;®=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=®;bonus=x (Blob/File)] expected: FAIL @@ -1796,9 +1655,6 @@ [x/x;¯=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¯=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¯;bonus=x (Blob/File)] expected: FAIL @@ -1814,9 +1670,6 @@ [x/x;°=x;bonus=x (Blob/File)] expected: FAIL - [x/x;°=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=°;bonus=x (Blob/File)] expected: FAIL @@ -1832,9 +1685,6 @@ [x/x;±=x;bonus=x (Blob/File)] expected: FAIL - [x/x;±=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=±;bonus=x (Blob/File)] expected: FAIL @@ -1850,9 +1700,6 @@ [x/x;²=x;bonus=x (Blob/File)] expected: FAIL - [x/x;²=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=²;bonus=x (Blob/File)] expected: FAIL @@ -1868,9 +1715,6 @@ [x/x;³=x;bonus=x (Blob/File)] expected: FAIL - [x/x;³=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=³;bonus=x (Blob/File)] expected: FAIL @@ -1886,9 +1730,6 @@ [x/x;´=x;bonus=x (Blob/File)] expected: FAIL - [x/x;´=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=´;bonus=x (Blob/File)] expected: FAIL @@ -1904,9 +1745,6 @@ [x/x;µ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;µ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=µ;bonus=x (Blob/File)] expected: FAIL @@ -1922,9 +1760,6 @@ [x/x;¶=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¶=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¶;bonus=x (Blob/File)] expected: FAIL @@ -1940,9 +1775,6 @@ [x/x;·=x;bonus=x (Blob/File)] expected: FAIL - [x/x;·=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=·;bonus=x (Blob/File)] expected: FAIL @@ -1958,9 +1790,6 @@ [x/x;¸=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¸=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¸;bonus=x (Blob/File)] expected: FAIL @@ -1976,9 +1805,6 @@ [x/x;¹=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¹=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¹;bonus=x (Blob/File)] expected: FAIL @@ -1994,9 +1820,6 @@ [x/x;º=x;bonus=x (Blob/File)] expected: FAIL - [x/x;º=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=º;bonus=x (Blob/File)] expected: FAIL @@ -2012,9 +1835,6 @@ [x/x;»=x;bonus=x (Blob/File)] expected: FAIL - [x/x;»=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=»;bonus=x (Blob/File)] expected: FAIL @@ -2030,9 +1850,6 @@ [x/x;¼=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¼=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¼;bonus=x (Blob/File)] expected: FAIL @@ -2048,9 +1865,6 @@ [x/x;½=x;bonus=x (Blob/File)] expected: FAIL - [x/x;½=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=½;bonus=x (Blob/File)] expected: FAIL @@ -2066,9 +1880,6 @@ [x/x;¾=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¾=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¾;bonus=x (Blob/File)] expected: FAIL @@ -2084,9 +1895,6 @@ [x/x;¿=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¿=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¿;bonus=x (Blob/File)] expected: FAIL @@ -2102,9 +1910,6 @@ [x/x;À=x;bonus=x (Blob/File)] expected: FAIL - [x/x;À=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=À;bonus=x (Blob/File)] expected: FAIL @@ -2120,9 +1925,6 @@ [x/x;Á=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Á=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Á;bonus=x (Blob/File)] expected: FAIL @@ -2138,9 +1940,6 @@ [x/x;Â=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Â=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Â;bonus=x (Blob/File)] expected: FAIL @@ -2156,9 +1955,6 @@ [x/x;Ã=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ã=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ã;bonus=x (Blob/File)] expected: FAIL @@ -2174,9 +1970,6 @@ [x/x;Ä=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ä=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ä;bonus=x (Blob/File)] expected: FAIL @@ -2192,9 +1985,6 @@ [x/x;Å=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Å=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Å;bonus=x (Blob/File)] expected: FAIL @@ -2210,9 +2000,6 @@ [x/x;Æ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Æ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Æ;bonus=x (Blob/File)] expected: FAIL @@ -2228,9 +2015,6 @@ [x/x;Ç=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ç=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ç;bonus=x (Blob/File)] expected: FAIL @@ -2246,9 +2030,6 @@ [x/x;È=x;bonus=x (Blob/File)] expected: FAIL - [x/x;È=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=È;bonus=x (Blob/File)] expected: FAIL @@ -2264,9 +2045,6 @@ [x/x;É=x;bonus=x (Blob/File)] expected: FAIL - [x/x;É=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=É;bonus=x (Blob/File)] expected: FAIL @@ -2282,9 +2060,6 @@ [x/x;Ê=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ê=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ê;bonus=x (Blob/File)] expected: FAIL @@ -2300,9 +2075,6 @@ [x/x;Ë=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ë=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ë;bonus=x (Blob/File)] expected: FAIL @@ -2318,9 +2090,6 @@ [x/x;Ì=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ì=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ì;bonus=x (Blob/File)] expected: FAIL @@ -2336,9 +2105,6 @@ [x/x;Í=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Í=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Í;bonus=x (Blob/File)] expected: FAIL @@ -2354,9 +2120,6 @@ [x/x;Î=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Î=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Î;bonus=x (Blob/File)] expected: FAIL @@ -2372,9 +2135,6 @@ [x/x;Ï=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ï=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ï;bonus=x (Blob/File)] expected: FAIL @@ -2390,9 +2150,6 @@ [x/x;Ð=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ð=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ð;bonus=x (Blob/File)] expected: FAIL @@ -2408,9 +2165,6 @@ [x/x;Ñ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ñ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ñ;bonus=x (Blob/File)] expected: FAIL @@ -2426,9 +2180,6 @@ [x/x;Ò=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ò=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ò;bonus=x (Blob/File)] expected: FAIL @@ -2444,9 +2195,6 @@ [x/x;Ó=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ó=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ó;bonus=x (Blob/File)] expected: FAIL @@ -2462,9 +2210,6 @@ [x/x;Ô=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ô=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ô;bonus=x (Blob/File)] expected: FAIL @@ -2480,9 +2225,6 @@ [x/x;Õ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Õ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Õ;bonus=x (Blob/File)] expected: FAIL @@ -2498,9 +2240,6 @@ [x/x;Ö=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ö=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ö;bonus=x (Blob/File)] expected: FAIL @@ -2516,9 +2255,6 @@ [x/x;×=x;bonus=x (Blob/File)] expected: FAIL - [x/x;×=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=×;bonus=x (Blob/File)] expected: FAIL @@ -2534,9 +2270,6 @@ [x/x;Ø=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ø=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ø;bonus=x (Blob/File)] expected: FAIL @@ -2552,9 +2285,6 @@ [x/x;Ù=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ù=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ù;bonus=x (Blob/File)] expected: FAIL @@ -2570,9 +2300,6 @@ [x/x;Ú=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ú=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ú;bonus=x (Blob/File)] expected: FAIL @@ -2588,9 +2315,6 @@ [x/x;Û=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Û=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Û;bonus=x (Blob/File)] expected: FAIL @@ -2606,9 +2330,6 @@ [x/x;Ü=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ü=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ü;bonus=x (Blob/File)] expected: FAIL @@ -2624,9 +2345,6 @@ [x/x;Ý=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ý=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ý;bonus=x (Blob/File)] expected: FAIL @@ -2642,9 +2360,6 @@ [x/x;Þ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Þ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Þ;bonus=x (Blob/File)] expected: FAIL @@ -2660,9 +2375,6 @@ [x/x;ß=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ß=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ß;bonus=x (Blob/File)] expected: FAIL @@ -2678,9 +2390,6 @@ [x/x;à=x;bonus=x (Blob/File)] expected: FAIL - [x/x;à=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=à;bonus=x (Blob/File)] expected: FAIL @@ -2696,9 +2405,6 @@ [x/x;á=x;bonus=x (Blob/File)] expected: FAIL - [x/x;á=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=á;bonus=x (Blob/File)] expected: FAIL @@ -2714,9 +2420,6 @@ [x/x;â=x;bonus=x (Blob/File)] expected: FAIL - [x/x;â=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=â;bonus=x (Blob/File)] expected: FAIL @@ -2732,9 +2435,6 @@ [x/x;ã=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ã=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ã;bonus=x (Blob/File)] expected: FAIL @@ -2750,9 +2450,6 @@ [x/x;ä=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ä=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ä;bonus=x (Blob/File)] expected: FAIL @@ -2768,9 +2465,6 @@ [x/x;å=x;bonus=x (Blob/File)] expected: FAIL - [x/x;å=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=å;bonus=x (Blob/File)] expected: FAIL @@ -2786,9 +2480,6 @@ [x/x;æ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;æ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=æ;bonus=x (Blob/File)] expected: FAIL @@ -2804,9 +2495,6 @@ [x/x;ç=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ç=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ç;bonus=x (Blob/File)] expected: FAIL @@ -2822,9 +2510,6 @@ [x/x;è=x;bonus=x (Blob/File)] expected: FAIL - [x/x;è=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=è;bonus=x (Blob/File)] expected: FAIL @@ -2840,9 +2525,6 @@ [x/x;é=x;bonus=x (Blob/File)] expected: FAIL - [x/x;é=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=é;bonus=x (Blob/File)] expected: FAIL @@ -2858,9 +2540,6 @@ [x/x;ê=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ê=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ê;bonus=x (Blob/File)] expected: FAIL @@ -2876,9 +2555,6 @@ [x/x;ë=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ë=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ë;bonus=x (Blob/File)] expected: FAIL @@ -2894,9 +2570,6 @@ [x/x;ì=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ì=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ì;bonus=x (Blob/File)] expected: FAIL @@ -2912,9 +2585,6 @@ [x/x;í=x;bonus=x (Blob/File)] expected: FAIL - [x/x;í=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=í;bonus=x (Blob/File)] expected: FAIL @@ -2930,9 +2600,6 @@ [x/x;î=x;bonus=x (Blob/File)] expected: FAIL - [x/x;î=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=î;bonus=x (Blob/File)] expected: FAIL @@ -2948,9 +2615,6 @@ [x/x;ï=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ï=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ï;bonus=x (Blob/File)] expected: FAIL @@ -2966,9 +2630,6 @@ [x/x;ð=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ð=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ð;bonus=x (Blob/File)] expected: FAIL @@ -2984,9 +2645,6 @@ [x/x;ñ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ñ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ñ;bonus=x (Blob/File)] expected: FAIL @@ -3002,9 +2660,6 @@ [x/x;ò=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ò=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ò;bonus=x (Blob/File)] expected: FAIL @@ -3020,9 +2675,6 @@ [x/x;ó=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ó=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ó;bonus=x (Blob/File)] expected: FAIL @@ -3038,9 +2690,6 @@ [x/x;ô=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ô=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ô;bonus=x (Blob/File)] expected: FAIL @@ -3056,9 +2705,6 @@ [x/x;õ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;õ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=õ;bonus=x (Blob/File)] expected: FAIL @@ -3074,9 +2720,6 @@ [x/x;ö=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ö=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ö;bonus=x (Blob/File)] expected: FAIL @@ -3092,9 +2735,6 @@ [x/x;÷=x;bonus=x (Blob/File)] expected: FAIL - [x/x;÷=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=÷;bonus=x (Blob/File)] expected: FAIL @@ -3110,9 +2750,6 @@ [x/x;ø=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ø=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ø;bonus=x (Blob/File)] expected: FAIL @@ -3128,9 +2765,6 @@ [x/x;ù=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ù=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ù;bonus=x (Blob/File)] expected: FAIL @@ -3146,9 +2780,6 @@ [x/x;ú=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ú=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ú;bonus=x (Blob/File)] expected: FAIL @@ -3164,9 +2795,6 @@ [x/x;û=x;bonus=x (Blob/File)] expected: FAIL - [x/x;û=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=û;bonus=x (Blob/File)] expected: FAIL @@ -3182,9 +2810,6 @@ [x/x;ü=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ü=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ü;bonus=x (Blob/File)] expected: FAIL @@ -3200,9 +2825,6 @@ [x/x;ý=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ý=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ý;bonus=x (Blob/File)] expected: FAIL @@ -3218,9 +2840,6 @@ [x/x;þ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;þ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=þ;bonus=x (Blob/File)] expected: FAIL @@ -3236,9 +2855,6 @@ [x/x;ÿ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ÿ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ÿ;bonus=x (Blob/File)] expected: FAIL @@ -3251,6 +2867,12 @@ [x/x;x="ÿ";bonus=x (Request/Response)] expected: FAIL + [x/x;,=x;bonus=x (Request/Response)] + expected: FAIL + + [x/x;x=,;bonus=x (Request/Response)] + expected: FAIL + [parsing.any.html] [TEXT/HTML;CHARSET=GBK (Blob/File)] @@ -4204,9 +3826,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4222,9 +3841,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4240,9 +3856,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4258,9 +3871,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4276,9 +3886,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4294,9 +3901,6 @@ [x/x;
=x;bonus=x (Blob/File)] expected: FAIL - [x/x;
=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=
;bonus=x (Blob/File)] expected: FAIL @@ -4312,9 +3916,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4330,9 +3931,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4348,9 +3946,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4366,9 +3961,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4384,9 +3976,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4402,9 +3991,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4420,9 +4006,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4438,9 +4021,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4456,9 +4036,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4474,9 +4051,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4492,9 +4066,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4510,9 +4081,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4528,9 +4096,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4546,9 +4111,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4564,9 +4126,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4582,9 +4141,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4600,9 +4156,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4618,9 +4171,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4636,9 +4186,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4654,9 +4201,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4672,9 +4216,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4690,9 +4231,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4708,9 +4246,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4726,9 +4261,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4744,9 +4276,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4762,9 +4291,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -4780,9 +4306,6 @@ [x/x; =x;bonus=x (Blob/File)] expected: FAIL - [x/x; =x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x= ;bonus=x (Blob/File)] expected: FAIL @@ -4798,9 +4321,6 @@ [x/x;¡=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¡=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¡;bonus=x (Blob/File)] expected: FAIL @@ -4816,9 +4336,6 @@ [x/x;¢=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¢=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¢;bonus=x (Blob/File)] expected: FAIL @@ -4834,9 +4351,6 @@ [x/x;£=x;bonus=x (Blob/File)] expected: FAIL - [x/x;£=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=£;bonus=x (Blob/File)] expected: FAIL @@ -4852,9 +4366,6 @@ [x/x;¤=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¤=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¤;bonus=x (Blob/File)] expected: FAIL @@ -4870,9 +4381,6 @@ [x/x;¥=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¥=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¥;bonus=x (Blob/File)] expected: FAIL @@ -4888,9 +4396,6 @@ [x/x;¦=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¦=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¦;bonus=x (Blob/File)] expected: FAIL @@ -4906,9 +4411,6 @@ [x/x;§=x;bonus=x (Blob/File)] expected: FAIL - [x/x;§=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=§;bonus=x (Blob/File)] expected: FAIL @@ -4924,9 +4426,6 @@ [x/x;¨=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¨=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¨;bonus=x (Blob/File)] expected: FAIL @@ -4942,9 +4441,6 @@ [x/x;©=x;bonus=x (Blob/File)] expected: FAIL - [x/x;©=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=©;bonus=x (Blob/File)] expected: FAIL @@ -4960,9 +4456,6 @@ [x/x;ª=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ª=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ª;bonus=x (Blob/File)] expected: FAIL @@ -4978,9 +4471,6 @@ [x/x;«=x;bonus=x (Blob/File)] expected: FAIL - [x/x;«=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=«;bonus=x (Blob/File)] expected: FAIL @@ -4996,9 +4486,6 @@ [x/x;¬=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¬=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¬;bonus=x (Blob/File)] expected: FAIL @@ -5014,9 +4501,6 @@ [x/x;=x;bonus=x (Blob/File)] expected: FAIL - [x/x;=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=;bonus=x (Blob/File)] expected: FAIL @@ -5032,9 +4516,6 @@ [x/x;®=x;bonus=x (Blob/File)] expected: FAIL - [x/x;®=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=®;bonus=x (Blob/File)] expected: FAIL @@ -5050,9 +4531,6 @@ [x/x;¯=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¯=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¯;bonus=x (Blob/File)] expected: FAIL @@ -5068,9 +4546,6 @@ [x/x;°=x;bonus=x (Blob/File)] expected: FAIL - [x/x;°=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=°;bonus=x (Blob/File)] expected: FAIL @@ -5086,9 +4561,6 @@ [x/x;±=x;bonus=x (Blob/File)] expected: FAIL - [x/x;±=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=±;bonus=x (Blob/File)] expected: FAIL @@ -5104,9 +4576,6 @@ [x/x;²=x;bonus=x (Blob/File)] expected: FAIL - [x/x;²=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=²;bonus=x (Blob/File)] expected: FAIL @@ -5122,9 +4591,6 @@ [x/x;³=x;bonus=x (Blob/File)] expected: FAIL - [x/x;³=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=³;bonus=x (Blob/File)] expected: FAIL @@ -5140,9 +4606,6 @@ [x/x;´=x;bonus=x (Blob/File)] expected: FAIL - [x/x;´=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=´;bonus=x (Blob/File)] expected: FAIL @@ -5158,9 +4621,6 @@ [x/x;µ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;µ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=µ;bonus=x (Blob/File)] expected: FAIL @@ -5176,9 +4636,6 @@ [x/x;¶=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¶=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¶;bonus=x (Blob/File)] expected: FAIL @@ -5194,9 +4651,6 @@ [x/x;·=x;bonus=x (Blob/File)] expected: FAIL - [x/x;·=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=·;bonus=x (Blob/File)] expected: FAIL @@ -5212,9 +4666,6 @@ [x/x;¸=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¸=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¸;bonus=x (Blob/File)] expected: FAIL @@ -5230,9 +4681,6 @@ [x/x;¹=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¹=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¹;bonus=x (Blob/File)] expected: FAIL @@ -5248,9 +4696,6 @@ [x/x;º=x;bonus=x (Blob/File)] expected: FAIL - [x/x;º=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=º;bonus=x (Blob/File)] expected: FAIL @@ -5266,9 +4711,6 @@ [x/x;»=x;bonus=x (Blob/File)] expected: FAIL - [x/x;»=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=»;bonus=x (Blob/File)] expected: FAIL @@ -5284,9 +4726,6 @@ [x/x;¼=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¼=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¼;bonus=x (Blob/File)] expected: FAIL @@ -5302,9 +4741,6 @@ [x/x;½=x;bonus=x (Blob/File)] expected: FAIL - [x/x;½=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=½;bonus=x (Blob/File)] expected: FAIL @@ -5320,9 +4756,6 @@ [x/x;¾=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¾=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¾;bonus=x (Blob/File)] expected: FAIL @@ -5338,9 +4771,6 @@ [x/x;¿=x;bonus=x (Blob/File)] expected: FAIL - [x/x;¿=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=¿;bonus=x (Blob/File)] expected: FAIL @@ -5356,9 +4786,6 @@ [x/x;À=x;bonus=x (Blob/File)] expected: FAIL - [x/x;À=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=À;bonus=x (Blob/File)] expected: FAIL @@ -5374,9 +4801,6 @@ [x/x;Á=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Á=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Á;bonus=x (Blob/File)] expected: FAIL @@ -5392,9 +4816,6 @@ [x/x;Â=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Â=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Â;bonus=x (Blob/File)] expected: FAIL @@ -5410,9 +4831,6 @@ [x/x;Ã=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ã=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ã;bonus=x (Blob/File)] expected: FAIL @@ -5428,9 +4846,6 @@ [x/x;Ä=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ä=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ä;bonus=x (Blob/File)] expected: FAIL @@ -5446,9 +4861,6 @@ [x/x;Å=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Å=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Å;bonus=x (Blob/File)] expected: FAIL @@ -5464,9 +4876,6 @@ [x/x;Æ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Æ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Æ;bonus=x (Blob/File)] expected: FAIL @@ -5482,9 +4891,6 @@ [x/x;Ç=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ç=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ç;bonus=x (Blob/File)] expected: FAIL @@ -5500,9 +4906,6 @@ [x/x;È=x;bonus=x (Blob/File)] expected: FAIL - [x/x;È=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=È;bonus=x (Blob/File)] expected: FAIL @@ -5518,9 +4921,6 @@ [x/x;É=x;bonus=x (Blob/File)] expected: FAIL - [x/x;É=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=É;bonus=x (Blob/File)] expected: FAIL @@ -5536,9 +4936,6 @@ [x/x;Ê=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ê=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ê;bonus=x (Blob/File)] expected: FAIL @@ -5554,9 +4951,6 @@ [x/x;Ë=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ë=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ë;bonus=x (Blob/File)] expected: FAIL @@ -5572,9 +4966,6 @@ [x/x;Ì=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ì=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ì;bonus=x (Blob/File)] expected: FAIL @@ -5590,9 +4981,6 @@ [x/x;Í=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Í=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Í;bonus=x (Blob/File)] expected: FAIL @@ -5608,9 +4996,6 @@ [x/x;Î=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Î=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Î;bonus=x (Blob/File)] expected: FAIL @@ -5626,9 +5011,6 @@ [x/x;Ï=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ï=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ï;bonus=x (Blob/File)] expected: FAIL @@ -5644,9 +5026,6 @@ [x/x;Ð=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ð=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ð;bonus=x (Blob/File)] expected: FAIL @@ -5662,9 +5041,6 @@ [x/x;Ñ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ñ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ñ;bonus=x (Blob/File)] expected: FAIL @@ -5680,9 +5056,6 @@ [x/x;Ò=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ò=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ò;bonus=x (Blob/File)] expected: FAIL @@ -5698,9 +5071,6 @@ [x/x;Ó=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ó=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ó;bonus=x (Blob/File)] expected: FAIL @@ -5716,9 +5086,6 @@ [x/x;Ô=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ô=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ô;bonus=x (Blob/File)] expected: FAIL @@ -5734,9 +5101,6 @@ [x/x;Õ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Õ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Õ;bonus=x (Blob/File)] expected: FAIL @@ -5752,9 +5116,6 @@ [x/x;Ö=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ö=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ö;bonus=x (Blob/File)] expected: FAIL @@ -5770,9 +5131,6 @@ [x/x;×=x;bonus=x (Blob/File)] expected: FAIL - [x/x;×=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=×;bonus=x (Blob/File)] expected: FAIL @@ -5788,9 +5146,6 @@ [x/x;Ø=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ø=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ø;bonus=x (Blob/File)] expected: FAIL @@ -5806,9 +5161,6 @@ [x/x;Ù=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ù=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ù;bonus=x (Blob/File)] expected: FAIL @@ -5824,9 +5176,6 @@ [x/x;Ú=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ú=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ú;bonus=x (Blob/File)] expected: FAIL @@ -5842,9 +5191,6 @@ [x/x;Û=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Û=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Û;bonus=x (Blob/File)] expected: FAIL @@ -5860,9 +5206,6 @@ [x/x;Ü=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ü=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ü;bonus=x (Blob/File)] expected: FAIL @@ -5878,9 +5221,6 @@ [x/x;Ý=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Ý=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Ý;bonus=x (Blob/File)] expected: FAIL @@ -5896,9 +5236,6 @@ [x/x;Þ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;Þ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=Þ;bonus=x (Blob/File)] expected: FAIL @@ -5914,9 +5251,6 @@ [x/x;ß=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ß=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ß;bonus=x (Blob/File)] expected: FAIL @@ -5932,9 +5266,6 @@ [x/x;à=x;bonus=x (Blob/File)] expected: FAIL - [x/x;à=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=à;bonus=x (Blob/File)] expected: FAIL @@ -5950,9 +5281,6 @@ [x/x;á=x;bonus=x (Blob/File)] expected: FAIL - [x/x;á=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=á;bonus=x (Blob/File)] expected: FAIL @@ -5968,9 +5296,6 @@ [x/x;â=x;bonus=x (Blob/File)] expected: FAIL - [x/x;â=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=â;bonus=x (Blob/File)] expected: FAIL @@ -5986,9 +5311,6 @@ [x/x;ã=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ã=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ã;bonus=x (Blob/File)] expected: FAIL @@ -6004,9 +5326,6 @@ [x/x;ä=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ä=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ä;bonus=x (Blob/File)] expected: FAIL @@ -6022,9 +5341,6 @@ [x/x;å=x;bonus=x (Blob/File)] expected: FAIL - [x/x;å=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=å;bonus=x (Blob/File)] expected: FAIL @@ -6040,9 +5356,6 @@ [x/x;æ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;æ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=æ;bonus=x (Blob/File)] expected: FAIL @@ -6058,9 +5371,6 @@ [x/x;ç=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ç=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ç;bonus=x (Blob/File)] expected: FAIL @@ -6076,9 +5386,6 @@ [x/x;è=x;bonus=x (Blob/File)] expected: FAIL - [x/x;è=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=è;bonus=x (Blob/File)] expected: FAIL @@ -6094,9 +5401,6 @@ [x/x;é=x;bonus=x (Blob/File)] expected: FAIL - [x/x;é=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=é;bonus=x (Blob/File)] expected: FAIL @@ -6112,9 +5416,6 @@ [x/x;ê=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ê=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ê;bonus=x (Blob/File)] expected: FAIL @@ -6130,9 +5431,6 @@ [x/x;ë=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ë=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ë;bonus=x (Blob/File)] expected: FAIL @@ -6148,9 +5446,6 @@ [x/x;ì=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ì=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ì;bonus=x (Blob/File)] expected: FAIL @@ -6166,9 +5461,6 @@ [x/x;í=x;bonus=x (Blob/File)] expected: FAIL - [x/x;í=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=í;bonus=x (Blob/File)] expected: FAIL @@ -6184,9 +5476,6 @@ [x/x;î=x;bonus=x (Blob/File)] expected: FAIL - [x/x;î=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=î;bonus=x (Blob/File)] expected: FAIL @@ -6202,9 +5491,6 @@ [x/x;ï=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ï=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ï;bonus=x (Blob/File)] expected: FAIL @@ -6220,9 +5506,6 @@ [x/x;ð=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ð=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ð;bonus=x (Blob/File)] expected: FAIL @@ -6238,9 +5521,6 @@ [x/x;ñ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ñ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ñ;bonus=x (Blob/File)] expected: FAIL @@ -6256,9 +5536,6 @@ [x/x;ò=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ò=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ò;bonus=x (Blob/File)] expected: FAIL @@ -6274,9 +5551,6 @@ [x/x;ó=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ó=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ó;bonus=x (Blob/File)] expected: FAIL @@ -6292,9 +5566,6 @@ [x/x;ô=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ô=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ô;bonus=x (Blob/File)] expected: FAIL @@ -6310,9 +5581,6 @@ [x/x;õ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;õ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=õ;bonus=x (Blob/File)] expected: FAIL @@ -6328,9 +5596,6 @@ [x/x;ö=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ö=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ö;bonus=x (Blob/File)] expected: FAIL @@ -6346,9 +5611,6 @@ [x/x;÷=x;bonus=x (Blob/File)] expected: FAIL - [x/x;÷=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=÷;bonus=x (Blob/File)] expected: FAIL @@ -6364,9 +5626,6 @@ [x/x;ø=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ø=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ø;bonus=x (Blob/File)] expected: FAIL @@ -6382,9 +5641,6 @@ [x/x;ù=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ù=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ù;bonus=x (Blob/File)] expected: FAIL @@ -6400,9 +5656,6 @@ [x/x;ú=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ú=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ú;bonus=x (Blob/File)] expected: FAIL @@ -6418,9 +5671,6 @@ [x/x;û=x;bonus=x (Blob/File)] expected: FAIL - [x/x;û=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=û;bonus=x (Blob/File)] expected: FAIL @@ -6436,9 +5686,6 @@ [x/x;ü=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ü=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ü;bonus=x (Blob/File)] expected: FAIL @@ -6454,9 +5701,6 @@ [x/x;ý=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ý=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ý;bonus=x (Blob/File)] expected: FAIL @@ -6472,9 +5716,6 @@ [x/x;þ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;þ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=þ;bonus=x (Blob/File)] expected: FAIL @@ -6490,9 +5731,6 @@ [x/x;ÿ=x;bonus=x (Blob/File)] expected: FAIL - [x/x;ÿ=x;bonus=x (Request/Response)] - expected: FAIL - [x/x;x=ÿ;bonus=x (Blob/File)] expected: FAIL @@ -6504,3 +5742,9 @@ [x/x;x="ÿ";bonus=x (Request/Response)] expected: FAIL + + [x/x;,=x;bonus=x (Request/Response)] + expected: FAIL + + [x/x;x=,;bonus=x (Request/Response)] + expected: FAIL diff --git a/tests/wpt/meta/workers/importscripts_mime.any.js.ini b/tests/wpt/meta/workers/importscripts_mime.any.js.ini index cb62c5c212b..88a88174237 100644 --- a/tests/wpt/meta/workers/importscripts_mime.any.js.ini +++ b/tests/wpt/meta/workers/importscripts_mime.any.js.ini @@ -23,9 +23,6 @@ [importScripts() requires scripty MIME types: zzz/zzz is blocked.] expected: FAIL - [importScripts() requires scripty MIME types: text/csv;bla;bla is blocked.] - expected: FAIL - [importScripts() requires scripty MIME types: Text/html is blocked.] expected: FAIL |