Skip to content

Commit

Permalink
Add pref reset support to the WebDriver API.
Browse files Browse the repository at this point in the history
  • Loading branch information
jgraham committed Sep 24, 2015
1 parent 8d9ab50 commit bd4e0a1
Showing 1 changed file with 27 additions and 4 deletions.
31 changes: 27 additions & 4 deletions components/webdriver_server/lib.rs
Expand Up @@ -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) {
Expand Down Expand Up @@ -77,6 +78,7 @@ struct Handler {
enum ServoExtensionRoute {
GetPrefs,
SetPrefs,
ResetPrefs,
}

impl WebDriverExtensionRoute for ServoExtensionRoute {
Expand All @@ -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))
}
Expand All @@ -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<Json> {
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()),
}
}
}
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -644,6 +652,20 @@ impl Handler {
}
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 {
Expand Down Expand Up @@ -685,6 +707,7 @@ impl WebDriverHandler<ServoExtensionRoute> 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,
Expand Down

0 comments on commit bd4e0a1

Please sign in to comment.