| Index: chrome/test/webdriver/commands/create_session.cc | 
| diff --git a/chrome/test/webdriver/commands/create_session.cc b/chrome/test/webdriver/commands/create_session.cc | 
| index 9e73e3060db61ee88502d03b8b2f0cb53f7b9e56..60b7809e0541436085df9d7abe49f5890bbc5035 100644 | 
| --- a/chrome/test/webdriver/commands/create_session.cc | 
| +++ b/chrome/test/webdriver/commands/create_session.cc | 
| @@ -25,6 +25,8 @@ | 
| #include "chrome/test/webdriver/session_manager.h" | 
| #include "chrome/test/webdriver/webdriver_error.h" | 
|  | 
| +namespace webdriver { | 
| + | 
| namespace { | 
|  | 
| bool WriteBase64DataToFile(const FilePath& filename, | 
| @@ -42,9 +44,18 @@ bool WriteBase64DataToFile(const FilePath& filename, | 
| return true; | 
| } | 
|  | 
| -}  // namespace | 
| +Error* GetBooleanCapability( | 
| +    const base::DictionaryValue* dict, const std::string& key, bool* option) { | 
| +  Value* value = NULL; | 
| +  if (dict->GetWithoutPathExpansion(key, &value)) { | 
| +    if (!value->GetAsBoolean(option)) { | 
| +      return new Error(kUnknownError, key + " must be a boolean"); | 
| +    } | 
| +  } | 
| +  return NULL; | 
| +} | 
|  | 
| -namespace webdriver { | 
| +}  // namespace | 
|  | 
| CreateSession::CreateSession(const std::vector<std::string>& path_segments, | 
| const DictionaryValue* const parameters) | 
| @@ -175,11 +186,24 @@ void CreateSession::ExecutePost(Response* const response) { | 
| return; | 
| } | 
|  | 
| +  Session::Options options; | 
| +  Error* error = NULL; | 
| +  error = GetBooleanCapability(capabilities, "chrome.nativeEvents", | 
| +                               &options.use_native_events); | 
| +  if (!error) { | 
| +    error = GetBooleanCapability(capabilities, "chrome.loadAsync", | 
| +                                 &options.load_async); | 
| +  } | 
| +  if (error) { | 
| +    response->SetError(error); | 
| +    return; | 
| +  } | 
| + | 
| // Session manages its own liftime, so do not call delete. | 
| -  Session* session = new Session(); | 
| -  Error* error = session->Init(browser_exe, | 
| -                               temp_user_data_dir, | 
| -                               command_line_options); | 
| +  Session* session = new Session(options); | 
| +  error = session->Init(browser_exe, | 
| +                        temp_user_data_dir, | 
| +                        command_line_options); | 
| if (error) { | 
| response->SetError(error); | 
| return; | 
| @@ -194,20 +218,6 @@ void CreateSession::ExecutePost(Response* const response) { | 
| } | 
| } | 
|  | 
| -  bool native_events_required = false; | 
| -  Value* native_events_value = NULL; | 
| -  if (capabilities->GetWithoutPathExpansion( | 
| -          "chrome.nativeEvents", &native_events_value)) { | 
| -    if (native_events_value->GetAsBoolean(&native_events_required)) { | 
| -      session->set_use_native_events(native_events_required); | 
| -    } | 
| -  } | 
| -  bool screenshot_on_error = false; | 
| -  if (capabilities->GetBoolean( | 
| -          "takeScreenshotOnError", &screenshot_on_error)) { | 
| -    session->set_screenshot_on_error(screenshot_on_error); | 
| -  } | 
| - | 
| LOG(INFO) << "Created session " << session->id(); | 
| // Redirect to a relative URI. Although prohibited by the HTTP standard, | 
| // this is what the IEDriver does. Finding the actual IP address is | 
|  |