diff --git a/components/gfx/font_cache_thread.rs b/components/gfx/font_cache_thread.rs index 7af1e0889f0..315702902b9 100644 --- a/components/gfx/font_cache_thread.rs +++ b/components/gfx/font_cache_thread.rs @@ -423,7 +423,7 @@ impl FontCacheThread { // derived from http://stackoverflow.com/a/10864297/3830 fn is_supported_font_type(toplevel: &TopLevel, sublevel: &SubLevel) -> bool { - if !prefs::get_pref("net.mime.sniff").as_boolean().unwrap_or(false) { + if !prefs::get_pref("network.mime.sniff").as_boolean().unwrap_or(false) { return true; } diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index 94e455df9d6..5aca88e19eb 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -44,6 +44,7 @@ use time::Tm; #[cfg(any(target_os = "macos", target_os = "linux"))] use tinyfiledialogs; use url::Url; +use util::prefs; use util::resource_files::resources_dir_path; use util::thread::spawn_named; use uuid; @@ -165,7 +166,7 @@ fn load_for_consumer(load_data: LoadData, Err(LoadError::Connection(url, e)) => { send_error(url, e, start_chan) } - Err(LoadError::MaxRedirects(url)) => { + Err(LoadError::MaxRedirects(url, _)) => { send_error(url, "too many redirects".to_owned(), start_chan) } Err(LoadError::Cors(url, msg)) | @@ -335,7 +336,7 @@ pub enum LoadError { Ssl(Url, String), InvalidRedirect(Url, String), Decoding(Url, String), - MaxRedirects(Url), + MaxRedirects(Url, u32), // u32 indicates number of redirects that occurred ConnectionAborted(String), Cancelled(Url, String), } @@ -726,10 +727,7 @@ pub fn load(load_data: LoadData, user_agent: String, cancel_listener: &CancellationListener) -> Result, LoadError> where A: HttpRequest + 'static, B: UIProvider { - // FIXME: At the time of writing this FIXME, servo didn't have any central - // location for configuration. If you're reading this and such a - // repository DOES exist, please update this constant to use it. - let max_redirects = 50; + let max_redirects = prefs::get_pref("network.http.redirection-limit").as_i64().unwrap() as u32; let mut iters = 0; // URL of the document being loaded, as seen by all the higher-level code. let mut doc_url = load_data.url.clone(); @@ -761,7 +759,7 @@ pub fn load(load_data: LoadData, } if iters > max_redirects { - return Err(LoadError::MaxRedirects(doc_url)); + return Err(LoadError::MaxRedirects(doc_url, iters - 1)); } if &*doc_url.scheme != "http" && &*doc_url.scheme != "https" { diff --git a/components/net/resource_thread.rs b/components/net/resource_thread.rs index e5cf4669bae..bb839176b14 100644 --- a/components/net/resource_thread.rs +++ b/components/net/resource_thread.rs @@ -77,7 +77,7 @@ pub fn start_sending_sniffed_opt(start_chan: LoadConsumer, mut metadata: Metadat classifier: Arc, partial_body: &[u8], context: LoadContext) -> Result { - if prefs::get_pref("net.mime.sniff").as_boolean().unwrap_or(false) { + if prefs::get_pref("network.mime.sniff").as_boolean().unwrap_or(false) { // TODO: should be calculated in the resource loader, from pull requeset #4094 let mut no_sniff = NoSniffFlag::OFF; let mut check_for_apache_bug = ApacheBugFlag::OFF; diff --git a/resources/prefs.json b/resources/prefs.json index cf7cf17ee06..dd945bfb2ec 100644 --- a/resources/prefs.json +++ b/resources/prefs.json @@ -49,7 +49,8 @@ "layout.text-orientation.enabled": false, "layout.viewport.enabled": false, "layout.writing-mode.enabled": false, - "net.mime.sniff": false, + "network.http.redirection-limit": 20, + "network.mime.sniff": false, "shell.native-titlebar.enabled": true, "shell.homepage": "http://servo.org" } diff --git a/tests/unit/net/http_loader.rs b/tests/unit/net/http_loader.rs index 7d7b8768c3b..1a035c075e7 100644 --- a/tests/unit/net/http_loader.rs +++ b/tests/unit/net/http_loader.rs @@ -28,6 +28,7 @@ use std::io::{self, Write, Read, Cursor}; use std::sync::mpsc::Receiver; use std::sync::{Arc, mpsc, RwLock}; use url::Url; +use util::prefs; const DEFAULT_USER_AGENT: &'static str = "Test-agent"; @@ -1103,13 +1104,20 @@ fn test_load_errors_when_there_is_too_many_redirects() { let http_state = HttpState::new(); let ui_provider = TestProvider::new(); + let redirect_limit = 13.; + prefs::set_pref("network.http.redirection-limit", + prefs::PrefValue::Number(redirect_limit)); + match load(load_data, &ui_provider, &http_state, None, &Factory, DEFAULT_USER_AGENT.to_owned(), &CancellationListener::new(None)) { - Err(LoadError::MaxRedirects(url)) => { + Err(LoadError::MaxRedirects(url, num_redirects)) => { + assert_eq!(num_redirects, redirect_limit as u32); assert_eq!(url.domain().unwrap(), "mozilla.com") }, _ => panic!("expected max redirects to fail") } + + prefs::reset_pref("network.http.redirection-limit"); } #[test] diff --git a/tests/unit/util/prefs.rs b/tests/unit/util/prefs.rs index 98bc35b4dc3..d6c5b5b98bd 100644 --- a/tests/unit/util/prefs.rs +++ b/tests/unit/util/prefs.rs @@ -8,7 +8,7 @@ use util::prefs::{PrefValue, extend_prefs, read_prefs_from_file, get_pref, set_p fn test_create_pref() { let json_str = "{\ \"layout.writing-mode.enabled\": true,\ - \"net.mime.sniff\": false,\ + \"network.mime.sniff\": false,\ \"shell.homepage\": \"http://servo.org\"\ }"; diff --git a/tests/wpt/mozilla/meta/mozilla/mime_sniffing_font_context.html.ini b/tests/wpt/mozilla/meta/mozilla/mime_sniffing_font_context.html.ini index fe0f9621635..567ecfaa9cf 100644 --- a/tests/wpt/mozilla/meta/mozilla/mime_sniffing_font_context.html.ini +++ b/tests/wpt/mozilla/meta/mozilla/mime_sniffing_font_context.html.ini @@ -1,3 +1,3 @@ [mime_sniffing_font_context.html] type: testharness - prefs: [net.mime.sniff:true] + prefs: [network.mime.sniff:true]