From f90c80fbf5a999ebb0e653c7dbe49a9711c78902 Mon Sep 17 00:00:00 2001 From: PotatoCP Date: Tue, 3 Jun 2025 17:49:01 +0800 Subject: [PATCH] Add spec comment on handle_will_send_keys Signed-off-by: PotatoCP --- components/script/webdriver_handlers.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/components/script/webdriver_handlers.rs b/components/script/webdriver_handlers.rs index 2e46e726ced..77cca135a79 100644 --- a/components/script/webdriver_handlers.rs +++ b/components/script/webdriver_handlers.rs @@ -846,10 +846,13 @@ pub(crate) fn handle_will_send_keys( reply .send( find_node_by_unique_id(documents, pipeline, element_id).and_then(|node| { + // Step 6: Let file be true if element is input element + // in the file upload state, or false otherwise let file_input = node .downcast::() .filter(|&input_element| input_element.input_type() == InputType::File); + // Step 7: If file is false or the session's strict file interactability if file_input.is_none() || strict_file_interactability { match node.downcast::() { Some(element) => { @@ -860,20 +863,35 @@ pub(crate) fn handle_will_send_keys( } } + // Step 8 (file input) if let Some(file_input) = file_input { + // Step 8.1: Let files be the result of splitting text + // on the newline (\n) character. let files: Vec = text.split("\n").map(|s| s.into()).collect(); + + // Step 8.2 if files.is_empty() { return Err(ErrorStatus::InvalidArgument); } + + // Step 8.3 - 8.4 if !file_input.Multiple() && files.len() > 1 { return Err(ErrorStatus::InvalidArgument); } + + // Step 8.5 // TODO: Should return invalid argument error if file doesn't exist + + // Step 8.6 - 8.7 + // Input and change event already fired in `htmlinputelement.rs`. file_input.SelectFiles(files, can_gc); + + // Step 8.8 return Ok(false); } // TODO: Check non-typeable form control + // TODO: Check content editable Ok(true) }),