| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_TEST_WEBDRIVER_WEBDRIVER_CAPABILITIES_PARSER_H_ |
| #define CHROME_TEST_WEBDRIVER_WEBDRIVER_CAPABILITIES_PARSER_H_ |
| |
| #include <string> |
| #include <vector> |
| |
| #include "base/basictypes.h" |
| #include "base/command_line.h" |
| #include "base/file_path.h" |
| #include "base/memory/scoped_ptr.h" |
| #include "chrome/test/webdriver/webdriver_logging.h" |
| |
| namespace base { |
| class DictionaryValue; |
| class Value; |
| } |
| |
| namespace webdriver { |
| |
| class Error; |
| |
| // Contains all the capabilities that a user may request when starting a |
| // new session. |
| struct Capabilities { |
| Capabilities(); |
| ~Capabilities(); |
| |
| // Command line to use for starting Chrome. |
| CommandLine command; |
| |
| // Channel ID to use for connecting to an already running Chrome. |
| std::string channel; |
| |
| // Whether the lifetime of the started Chrome browser process should be |
| // bound to ChromeDriver's process. If true, Chrome will not quit if |
| // ChromeDriver dies. |
| bool detach; |
| |
| // List of paths for extensions to install on startup. |
| std::vector<FilePath> extensions; |
| |
| // Whether Chrome should not block when loading. |
| bool load_async; |
| |
| // Local state preferences to apply after Chrome starts but during session |
| // initialization. These preferences apply to all profiles in the user |
| // data directory that Chrome is running in. |
| scoped_ptr<base::DictionaryValue> local_state; |
| |
| // The minimum level to log for each log type. |
| LogLevel log_levels[LogType::kNum]; |
| |
| // Whether Chrome should simulate input events using OS APIs instead of |
| // WebKit APIs. |
| bool native_events; |
| |
| // By default, ChromeDriver configures Chrome in such a way as convenient |
| // for website testing. E.g., it configures Chrome so that sites are allowed |
| // to use the geolocation API without requesting the user's consent. |
| // If this is set to true, ChromeDriver will not modify Chrome's default |
| // behavior. |
| bool no_website_testing_defaults; |
| |
| // Profile-level preferences to apply after Chrome starts but during session |
| // initialization. |
| scoped_ptr<base::DictionaryValue> prefs; |
| |
| // Path to a custom profile to use. |
| FilePath profile; |
| }; |
| |
| // Parses the given capabilities dictionary to produce a |Capabilities| |
| // instance. |
| // See webdriver's desired capabilities for more info. |
| class CapabilitiesParser { |
| public: |
| // Create a new parser. |capabilities_dict| is the dictionary for all |
| // of the user's desired capabilities. |root_path| is the root directory |
| // to use for writing any necessary files to disk. This function will not |
| // create it or delete it. All files written to disk will be placed in |
| // this directory. |
| CapabilitiesParser(const base::DictionaryValue* capabilities_dict, |
| const FilePath& root_path, |
| const Logger& logger, |
| Capabilities* capabilities); |
| ~CapabilitiesParser(); |
| |
| // Parses the capabilities. May return an error. |
| Error* Parse(); |
| |
| private: |
| Error* ParseArgs(const base::Value* option); |
| Error* ParseBinary(const base::Value* option); |
| Error* ParseChannel(const base::Value* option); |
| Error* ParseDetach(const base::Value* option); |
| Error* ParseExtensions(const base::Value* option); |
| Error* ParseLoadAsync(const base::Value* option); |
| Error* ParseLocalState(const base::Value* option); |
| Error* ParseLoggingPrefs(const base::Value* option); |
| Error* ParseNativeEvents(const base::Value* option); |
| Error* ParseNoProxy(const base::Value* option); |
| Error* ParsePrefs(const base::Value* option); |
| Error* ParseProfile(const base::Value* option); |
| Error* ParseProxy(const base::Value* option); |
| Error* ParseProxyAutoDetect(const base::DictionaryValue* options); |
| Error* ParseProxyAutoconfigUrl(const base::DictionaryValue* options); |
| Error* ParseProxyServers(const base::DictionaryValue* options); |
| Error* ParseNoWebsiteTestingDefaults(const base::Value* option); |
| |
| // The capabilities dictionary to parse. |
| const base::DictionaryValue* dict_; |
| |
| // The root directory under which to write all files. |
| const FilePath root_; |
| |
| // Reference to the logger to use. |
| const Logger& logger_; |
| |
| // A pointer to the capabilities to modify while parsing. |
| Capabilities* caps_; |
| |
| DISALLOW_COPY_AND_ASSIGN(CapabilitiesParser); |
| }; |
| |
| } // namespace webdriver |
| |
| #endif // CHROME_TEST_WEBDRIVER_WEBDRIVER_CAPABILITIES_PARSER_H_ |