mirror of
https://github.com/servo/servo.git
synced 2025-08-04 05:00:08 +01:00
Don’t prompt user for credentials for non-Navigate request (#35664)
Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>
This commit is contained in:
parent
67275b0a73
commit
88c8db2f8b
2 changed files with 57 additions and 1 deletions
|
@ -115,6 +115,11 @@ impl HttpState {
|
||||||
let webview_id = request.target_webview_id?;
|
let webview_id = request.target_webview_id?;
|
||||||
let for_proxy = response.status == StatusCode::PROXY_AUTHENTICATION_REQUIRED;
|
let for_proxy = response.status == StatusCode::PROXY_AUTHENTICATION_REQUIRED;
|
||||||
|
|
||||||
|
// If this is not actually a navigation request return None.
|
||||||
|
if request.mode != RequestMode::Navigate {
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
|
||||||
let embedder_proxy = self.embedder_proxy.lock().unwrap();
|
let embedder_proxy = self.embedder_proxy.lock().unwrap();
|
||||||
let (ipc_sender, ipc_receiver) = ipc::channel().unwrap();
|
let (ipc_sender, ipc_receiver) = ipc::channel().unwrap();
|
||||||
embedder_proxy.send(EmbedderMsg::RequestAuthentication(
|
embedder_proxy.send(EmbedderMsg::RequestAuthentication(
|
||||||
|
|
|
@ -41,7 +41,7 @@ use net::test::{replace_host_table, DECODER_BUFFER_SIZE};
|
||||||
use net_traits::http_status::HttpStatus;
|
use net_traits::http_status::HttpStatus;
|
||||||
use net_traits::request::{
|
use net_traits::request::{
|
||||||
BodyChunkRequest, BodyChunkResponse, BodySource, CredentialsMode, Destination, Referrer,
|
BodyChunkRequest, BodyChunkResponse, BodySource, CredentialsMode, Destination, Referrer,
|
||||||
Request, RequestBody, RequestBuilder,
|
Request, RequestBody, RequestBuilder, RequestMode,
|
||||||
};
|
};
|
||||||
use net_traits::response::{Response, ResponseBody};
|
use net_traits::response::{Response, ResponseBody};
|
||||||
use net_traits::{CookieSource, FetchTaskTarget, NetworkError, ReferrerPolicy};
|
use net_traits::{CookieSource, FetchTaskTarget, NetworkError, ReferrerPolicy};
|
||||||
|
@ -1372,6 +1372,7 @@ fn test_if_auth_creds_not_in_url_but_in_cache_it_sets_it() {
|
||||||
.method(Method::GET)
|
.method(Method::GET)
|
||||||
.body(None)
|
.body(None)
|
||||||
.destination(Destination::Document)
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::Navigate)
|
||||||
.origin(mock_origin())
|
.origin(mock_origin())
|
||||||
.pipeline_id(Some(TEST_PIPELINE_ID))
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
.credentials_mode(CredentialsMode::Include)
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
@ -1417,6 +1418,7 @@ fn test_auth_ui_needs_www_auth() {
|
||||||
.method(Method::GET)
|
.method(Method::GET)
|
||||||
.body(None)
|
.body(None)
|
||||||
.destination(Destination::Document)
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::Navigate)
|
||||||
.origin(mock_origin())
|
.origin(mock_origin())
|
||||||
.pipeline_id(Some(TEST_PIPELINE_ID))
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
.credentials_mode(CredentialsMode::Include)
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
@ -1570,6 +1572,7 @@ fn test_user_credentials_prompt_when_proxy_authentication_is_required() {
|
||||||
.method(Method::GET)
|
.method(Method::GET)
|
||||||
.body(None)
|
.body(None)
|
||||||
.destination(Destination::Document)
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::Navigate)
|
||||||
.origin(mock_origin())
|
.origin(mock_origin())
|
||||||
.pipeline_id(Some(TEST_PIPELINE_ID))
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
.credentials_mode(CredentialsMode::Include)
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
@ -1620,6 +1623,7 @@ fn test_prompt_credentials_when_client_receives_unauthorized_response() {
|
||||||
.method(Method::GET)
|
.method(Method::GET)
|
||||||
.body(None)
|
.body(None)
|
||||||
.destination(Destination::Document)
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::Navigate)
|
||||||
.origin(mock_origin())
|
.origin(mock_origin())
|
||||||
.pipeline_id(Some(TEST_PIPELINE_ID))
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
.credentials_mode(CredentialsMode::Include)
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
@ -1669,6 +1673,7 @@ fn test_prompt_credentials_user_cancels_dialog_input() {
|
||||||
.method(Method::GET)
|
.method(Method::GET)
|
||||||
.body(None)
|
.body(None)
|
||||||
.destination(Destination::Document)
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::Navigate)
|
||||||
.origin(mock_origin())
|
.origin(mock_origin())
|
||||||
.pipeline_id(Some(TEST_PIPELINE_ID))
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
.credentials_mode(CredentialsMode::Include)
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
@ -1712,6 +1717,7 @@ fn test_prompt_credentials_user_input_incorrect_credentials() {
|
||||||
.method(Method::GET)
|
.method(Method::GET)
|
||||||
.body(None)
|
.body(None)
|
||||||
.destination(Destination::Document)
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::Navigate)
|
||||||
.origin(mock_origin())
|
.origin(mock_origin())
|
||||||
.pipeline_id(Some(TEST_PIPELINE_ID))
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
.credentials_mode(CredentialsMode::Include)
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
@ -1738,3 +1744,48 @@ fn test_prompt_credentials_user_input_incorrect_credentials() {
|
||||||
.code()
|
.code()
|
||||||
.is_client_error());
|
.is_client_error());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_prompt_credentials_user_input_incorrect_mode() {
|
||||||
|
let handler =
|
||||||
|
move |request: HyperRequest<Incoming>,
|
||||||
|
response: &mut HyperResponse<BoxBody<Bytes, hyper::Error>>| {
|
||||||
|
let expected = Authorization::basic("test", "test");
|
||||||
|
if let Some(credentials) = request.headers().typed_get::<Authorization<Basic>>() {
|
||||||
|
if credentials == expected {
|
||||||
|
*response.status_mut() = StatusCode::OK;
|
||||||
|
} else {
|
||||||
|
*response.status_mut() = StatusCode::UNAUTHORIZED;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
*response.status_mut() = StatusCode::UNAUTHORIZED;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
let (server, url) = make_server(handler);
|
||||||
|
|
||||||
|
let request = RequestBuilder::new(Some(TEST_WEBVIEW_ID), url.clone(), Referrer::NoReferrer)
|
||||||
|
.method(Method::GET)
|
||||||
|
.body(None)
|
||||||
|
.destination(Destination::Document)
|
||||||
|
.mode(RequestMode::SameOrigin)
|
||||||
|
.origin(mock_origin())
|
||||||
|
.pipeline_id(Some(TEST_PIPELINE_ID))
|
||||||
|
.credentials_mode(CredentialsMode::Include)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let (embedder_proxy, embedder_receiver) = create_embedder_proxy_and_receiver();
|
||||||
|
let _ = receive_credential_prompt_msgs(
|
||||||
|
embedder_receiver,
|
||||||
|
Some(AuthenticationResponse {
|
||||||
|
username: "test".into(),
|
||||||
|
password: "test".into(),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
let mut context = new_fetch_context(None, Some(embedder_proxy), None);
|
||||||
|
|
||||||
|
let response = fetch_with_context(request, &mut context);
|
||||||
|
|
||||||
|
server.close();
|
||||||
|
|
||||||
|
assert!(response.internal_response.is_none());
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue