From bd4e0a143998d6e65aca6def986ed421790030da Mon Sep 17 00:00:00 2001 From: James Graham Date: Thu, 17 Sep 2015 00:51:57 +0100 Subject: [PATCH] Add pref reset support to the WebDriver API. --- components/webdriver_server/lib.rs | 31 ++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/components/webdriver_server/lib.rs b/components/webdriver_server/lib.rs index 29bac552568..22776126a94 100644 --- a/components/webdriver_server/lib.rs +++ b/components/webdriver_server/lib.rs @@ -49,7 +49,8 @@ use webdriver::server::{self, Session, WebDriverHandler}; fn extension_routes() -> Vec<(Method, &'static str, ServoExtensionRoute)> { return vec![(Post, "/session/{sessionId}/servo/prefs/get", ServoExtensionRoute::GetPrefs), - (Post, "/session/{sessionId}/servo/prefs/set", ServoExtensionRoute::SetPrefs)] + (Post, "/session/{sessionId}/servo/prefs/set", ServoExtensionRoute::SetPrefs), + (Post, "/session/{sessionId}/servo/prefs/reset", ServoExtensionRoute::ResetPrefs)] } pub fn start_server(port: u16, constellation_chan: ConstellationChan) { @@ -77,6 +78,7 @@ struct Handler { enum ServoExtensionRoute { GetPrefs, SetPrefs, + ResetPrefs, } impl WebDriverExtensionRoute for ServoExtensionRoute { @@ -94,6 +96,10 @@ impl WebDriverExtensionRoute for ServoExtensionRoute { let parameters: SetPrefsParameters = try!(Parameters::from_json(&body_data)); ServoExtensionCommand::SetPrefs(parameters) } + &ServoExtensionRoute::ResetPrefs => { + let parameters: GetPrefsParameters = try!(Parameters::from_json(&body_data)); + ServoExtensionCommand::ResetPrefs(parameters) + } }; Ok(WebDriverCommand::Extension(command)) } @@ -102,14 +108,16 @@ impl WebDriverExtensionRoute for ServoExtensionRoute { #[derive(Clone, PartialEq)] enum ServoExtensionCommand { GetPrefs(GetPrefsParameters), - SetPrefs(SetPrefsParameters) + SetPrefs(SetPrefsParameters), + ResetPrefs(GetPrefsParameters), } impl WebDriverExtensionCommand for ServoExtensionCommand { fn parameters_json(&self) -> Option { match self { &ServoExtensionCommand::GetPrefs(ref x) => Some(x.to_json()), - &ServoExtensionCommand::SetPrefs(ref x) => Some(x.to_json()) + &ServoExtensionCommand::SetPrefs(ref x) => Some(x.to_json()), + &ServoExtensionCommand::ResetPrefs(ref x) => Some(x.to_json()), } } } @@ -166,7 +174,7 @@ impl Parameters for SetPrefsParameters { "prefs was not an array"))); let mut params = Vec::with_capacity(items.len()); for (name, val) in items.iter() { - let value = try!(PrefValue::from_json(val).or( + let value = try!(PrefValue::from_json(val.clone()).or( Err(WebDriverError::new(ErrorStatus::InvalidArgument, "Pref is not a boolean or string")))); let key = name.to_owned(); @@ -644,6 +652,20 @@ impl Handler { } Ok(WebDriverResponse::Void) } + + fn handle_reset_prefs(&self, + parameters: &GetPrefsParameters) -> WebDriverResult { + let prefs = if parameters.prefs.len() == 0 { + reset_all_prefs(); + BTreeMap::new() + } else { + parameters.prefs + .iter() + .map(|item| (item.clone(), reset_pref(item).to_json())) + .collect::>() + }; + Ok(WebDriverResponse::Generic(ValueResponse::new(prefs.to_json()))) + } } impl WebDriverHandler for Handler { @@ -685,6 +707,7 @@ impl WebDriverHandler for Handler { match extension { &ServoExtensionCommand::GetPrefs(ref x) => self.handle_get_prefs(x), &ServoExtensionCommand::SetPrefs(ref x) => self.handle_set_prefs(x), + &ServoExtensionCommand::ResetPrefs(ref x) => self.handle_reset_prefs(x), } } _ => Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,