aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/webdriver_server/lib.rs31
1 files 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<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()),
}
}
}
@@ -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<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 {
@@ -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,