Bug 1396824 - Treat HEAD requests as GET requests when decoding and return 200 before executing draft
authorGreg Fraley <gsfraley@gmail.com>
Thu, 08 Mar 2018 11:44:10 -0500
changeset 764930 fc6860a8a94c985203f39d602d9982b4caabd4ab
parent 764769 65275829cf8e0f7b4f3c2a9c54dc149aaad18c30
push id101897
push userbmo:gsfraley@gmail.com
push dateThu, 08 Mar 2018 16:45:19 +0000
bugs1396824
milestone60.0a1
Bug 1396824 - Treat HEAD requests as GET requests when decoding and return 200 before executing MozReview-Commit-ID: 6r7FdBwHq0u
testing/webdriver/src/server.rs
--- a/testing/webdriver/src/server.rs
+++ b/testing/webdriver/src/server.rs
@@ -177,49 +177,59 @@ impl<U: WebDriverExtensionRoute> Handler
         debug!("-> {} {} {}", req.method, req.uri, body);
 
         match req.uri {
             AbsolutePath(path) => {
                 let msg_result = {
                     // The fact that this locks for basically the whole request doesn't
                     // matter as long as we are only handling one request at a time.
                     match self.api.lock() {
-                        Ok(ref api) => api.decode_request(req.method, &path[..], &body[..]),
+                        Ok(ref api) => api.decode_request(if let Method::Head = req.method {
+                                                              Method::Get
+                                                          } else {
+                                                              req.method.clone()
+                                                          },
+                                                          &path[..],
+                                                          &body[..]),
                         Err(_) => return,
                     }
                 };
                 let (status, resp_body) = match msg_result {
                     Ok(message) => {
-                        let (send_res, recv_res) = channel();
-                        match self.chan.lock() {
-                            Ok(ref c) => {
-                                let res =
-                                    c.send(DispatchMessage::HandleWebDriver(message, send_res));
-                                match res {
-                                    Ok(x) => x,
-                                    Err(_) => {
-                                        error!("Something terrible happened");
-                                        return;
+                        if let Method::Head = req.method {
+                            (StatusCode::Ok, String::new())
+                        } else {
+                            let (send_res, recv_res) = channel();
+                            match self.chan.lock() {
+                                Ok(ref c) => {
+                                    let res =
+                                        c.send(DispatchMessage::HandleWebDriver(message, send_res));
+                                    match res {
+                                        Ok(x) => x,
+                                        Err(_) => {
+                                            error!("Something terrible happened");
+                                            return;
+                                        }
                                     }
                                 }
+                                Err(_) => {
+                                    error!("Something terrible happened");
+                                    return;
+                                }
                             }
-                            Err(_) => {
-                                error!("Something terrible happened");
-                                return;
+                            match recv_res.recv() {
+                                Ok(data) => {
+                                    match data {
+                                        Ok(response) => (StatusCode::Ok, response.to_json_string()),
+                                        Err(err) => (err.http_status(), err.to_json_string()),
+                                    }
+                                }
+                                Err(e) => panic!("Error reading response: {:?}", e),
                             }
                         }
-                        match recv_res.recv() {
-                            Ok(data) => {
-                                match data {
-                                    Ok(response) => (StatusCode::Ok, response.to_json_string()),
-                                    Err(err) => (err.http_status(), err.to_json_string()),
-                                }
-                            }
-                            Err(e) => panic!("Error reading response: {:?}", e),
-                        }
                     }
                     Err(err) => (err.http_status(), err.to_json_string()),
                 };
 
                 debug!("<- {} {}", status, resp_body);
 
                 {
                     let resp_status = res.status_mut();