diff options
-rw-r--r-- | components/net/http_loader.rs | 6 | ||||
-rw-r--r-- | tests/unit/net/http_loader.rs | 10 |
2 files changed, 12 insertions, 4 deletions
diff --git a/components/net/http_loader.rs b/components/net/http_loader.rs index dc31dc3b2c7..5aca88e19eb 100644 --- a/components/net/http_loader.rs +++ b/components/net/http_loader.rs @@ -166,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)) | @@ -336,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), } @@ -759,7 +759,7 @@ pub fn load<A, B>(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/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] |