Add pref reset support to the WebDriver API.

This commit is contained in:
James Graham 2015-09-17 00:51:57 +01:00
parent 8d9ab50a96
commit bd4e0a1439

View file

@ -49,7 +49,8 @@ use webdriver::server::{self, Session, WebDriverHandler};
fn extension_routes() -> Vec<(Method, &'static str, ServoExtensionRoute)> { fn extension_routes() -> Vec<(Method, &'static str, ServoExtensionRoute)> {
return vec![(Post, "/session/{sessionId}/servo/prefs/get", ServoExtensionRoute::GetPrefs), 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) { pub fn start_server(port: u16, constellation_chan: ConstellationChan) {
@ -77,6 +78,7 @@ struct Handler {
enum ServoExtensionRoute { enum ServoExtensionRoute {
GetPrefs, GetPrefs,
SetPrefs, SetPrefs,
ResetPrefs,
} }
impl WebDriverExtensionRoute for ServoExtensionRoute { impl WebDriverExtensionRoute for ServoExtensionRoute {
@ -94,6 +96,10 @@ impl WebDriverExtensionRoute for ServoExtensionRoute {
let parameters: SetPrefsParameters = try!(Parameters::from_json(&body_data)); let parameters: SetPrefsParameters = try!(Parameters::from_json(&body_data));
ServoExtensionCommand::SetPrefs(parameters) ServoExtensionCommand::SetPrefs(parameters)
} }
&ServoExtensionRoute::ResetPrefs => {
let parameters: GetPrefsParameters = try!(Parameters::from_json(&body_data));
ServoExtensionCommand::ResetPrefs(parameters)
}
}; };
Ok(WebDriverCommand::Extension(command)) Ok(WebDriverCommand::Extension(command))
} }
@ -102,14 +108,16 @@ impl WebDriverExtensionRoute for ServoExtensionRoute {
#[derive(Clone, PartialEq)] #[derive(Clone, PartialEq)]
enum ServoExtensionCommand { enum ServoExtensionCommand {
GetPrefs(GetPrefsParameters), GetPrefs(GetPrefsParameters),
SetPrefs(SetPrefsParameters) SetPrefs(SetPrefsParameters),
ResetPrefs(GetPrefsParameters),
} }
impl WebDriverExtensionCommand for ServoExtensionCommand { impl WebDriverExtensionCommand for ServoExtensionCommand {
fn parameters_json(&self) -> Option<Json> { fn parameters_json(&self) -> Option<Json> {
match self { match self {
&ServoExtensionCommand::GetPrefs(ref x) => Some(x.to_json()), &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"))); "prefs was not an array")));
let mut params = Vec::with_capacity(items.len()); let mut params = Vec::with_capacity(items.len());
for (name, val) in items.iter() { 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, Err(WebDriverError::new(ErrorStatus::InvalidArgument,
"Pref is not a boolean or string")))); "Pref is not a boolean or string"))));
let key = name.to_owned(); let key = name.to_owned();
@ -644,6 +652,20 @@ impl Handler {
} }
Ok(WebDriverResponse::Void) Ok(WebDriverResponse::Void)
} }
fn handle_reset_prefs(&self,
parameters: &GetPrefsParameters) -> WebDriverResult<WebDriverResponse> {
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::<BTreeMap<_, _>>()
};
Ok(WebDriverResponse::Generic(ValueResponse::new(prefs.to_json())))
}
} }
impl WebDriverHandler<ServoExtensionRoute> for Handler { impl WebDriverHandler<ServoExtensionRoute> for Handler {
@ -685,6 +707,7 @@ impl WebDriverHandler<ServoExtensionRoute> for Handler {
match extension { match extension {
&ServoExtensionCommand::GetPrefs(ref x) => self.handle_get_prefs(x), &ServoExtensionCommand::GetPrefs(ref x) => self.handle_get_prefs(x),
&ServoExtensionCommand::SetPrefs(ref x) => self.handle_set_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, _ => Err(WebDriverError::new(ErrorStatus::UnsupportedOperation,