mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Use the url crate without its query_encoding feature
This commit is contained in:
parent
43a4f01647
commit
a3ac21d23d
5 changed files with 44 additions and 39 deletions
|
@ -42,7 +42,7 @@ use dom::node::{document_from_node, window_from_node};
|
|||
use dom::validitystate::ValidationFlags;
|
||||
use dom::virtualmethods::VirtualMethods;
|
||||
use dom_struct::dom_struct;
|
||||
use encoding::EncodingRef;
|
||||
use encoding::{EncodingRef, EncoderTrap};
|
||||
use encoding::all::UTF_8;
|
||||
use encoding::label::encoding_from_whatwg_label;
|
||||
use html5ever::{LocalName, Prefix};
|
||||
|
@ -56,6 +56,8 @@ use std::cell::Cell;
|
|||
use style::attr::AttrValue;
|
||||
use style::str::split_html_space_chars;
|
||||
use task_source::TaskSource;
|
||||
use url::UrlQuery;
|
||||
use url::form_urlencoded::Serializer;
|
||||
|
||||
#[derive(Clone, Copy, JSTraceable, MallocSizeOf, PartialEq)]
|
||||
pub struct GenerationId(u32);
|
||||
|
@ -378,10 +380,8 @@ impl HTMLFormElement {
|
|||
fn mutate_action_url(&self, form_data: &mut Vec<FormDatum>, mut load_data: LoadData, encoding: EncodingRef) {
|
||||
let charset = &*encoding.whatwg_name().unwrap();
|
||||
|
||||
load_data.url
|
||||
.as_mut_url()
|
||||
.query_pairs_mut().clear()
|
||||
.encoding_override(Some(self.pick_encoding()))
|
||||
self.set_encoding_override(load_data.url.as_mut_url().query_pairs_mut())
|
||||
.clear()
|
||||
.extend_pairs(form_data.into_iter()
|
||||
.map(|field| (field.name.clone(), field.replace_value(charset))));
|
||||
|
||||
|
@ -397,10 +397,8 @@ impl HTMLFormElement {
|
|||
let charset = &*encoding.whatwg_name().unwrap();
|
||||
load_data.headers.set(ContentType::form_url_encoded());
|
||||
|
||||
load_data.url
|
||||
.as_mut_url()
|
||||
.query_pairs_mut().clear()
|
||||
.encoding_override(Some(self.pick_encoding()))
|
||||
self.set_encoding_override(load_data.url.as_mut_url().query_pairs_mut())
|
||||
.clear()
|
||||
.extend_pairs(form_data.into_iter()
|
||||
.map(|field| (field.name.clone(), field.replace_value(charset))));
|
||||
|
||||
|
@ -421,6 +419,17 @@ impl HTMLFormElement {
|
|||
self.plan_to_navigate(load_data);
|
||||
}
|
||||
|
||||
fn set_encoding_override<'a>(&self, mut serializer: Serializer<UrlQuery<'a>>)
|
||||
-> Serializer<UrlQuery<'a>> {
|
||||
let encoding = self.pick_encoding();
|
||||
if encoding.name() != "utf-8" {
|
||||
serializer.custom_encoding_override(move |s| {
|
||||
encoding.encode(s, EncoderTrap::NcrEscape).unwrap().into()
|
||||
});
|
||||
}
|
||||
serializer
|
||||
}
|
||||
|
||||
/// [Planned navigation](https://html.spec.whatwg.org/multipage/#planned-navigation)
|
||||
fn plan_to_navigate(&self, load_data: LoadData) {
|
||||
let window = window_from_node(self);
|
||||
|
|
|
@ -15,7 +15,6 @@ use dom::bindings::weakref::MutableWeakRef;
|
|||
use dom::globalscope::GlobalScope;
|
||||
use dom::url::URL;
|
||||
use dom_struct::dom_struct;
|
||||
use encoding::types::EncodingRef;
|
||||
use url::form_urlencoded;
|
||||
|
||||
// https://url.spec.whatwg.org/#interface-urlsearchparams
|
||||
|
@ -140,17 +139,16 @@ impl URLSearchParamsMethods for URLSearchParams {
|
|||
|
||||
// https://url.spec.whatwg.org/#stringification-behavior
|
||||
fn Stringifier(&self) -> DOMString {
|
||||
DOMString::from(self.serialize(None))
|
||||
DOMString::from(self.serialize_utf8())
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
impl URLSearchParams {
|
||||
// https://url.spec.whatwg.org/#concept-urlencoded-serializer
|
||||
pub fn serialize(&self, encoding: Option<EncodingRef>) -> String {
|
||||
pub fn serialize_utf8(&self) -> String {
|
||||
let list = self.list.borrow();
|
||||
form_urlencoded::Serializer::new(String::new())
|
||||
.encoding_override(encoding)
|
||||
.extend_pairs(&*list)
|
||||
.finish()
|
||||
}
|
||||
|
|
|
@ -1386,8 +1386,7 @@ impl Extractable for FormData {
|
|||
|
||||
impl Extractable for URLSearchParams {
|
||||
fn extract(&self) -> (Vec<u8>, Option<DOMString>) {
|
||||
// Default encoding is UTF-8.
|
||||
(self.serialize(None).into_bytes(),
|
||||
(self.serialize_utf8().into_bytes(),
|
||||
Some(DOMString::from("application/x-www-form-urlencoded;charset=UTF-8")))
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue