summaryrefslogtreecommitdiffstats
path: root/chrome/test/webdriver/webdriver_capabilities_parser.h
blob: 8f9320d89675d647084bf0476513ded3d90d62f6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright (c) 2011 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_
#pragma once

#include <string>
#include <vector>

#include "base/basictypes.h"
#include "base/command_line.h"
#include "base/file_path.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;

  // Whether Chrome should simulate input events using OS APIs instead of
  // WebKit APIs.
  bool native_events;

  // Path to a custom profile to use.
  FilePath profile;

  // Whether ChromeDriver should log verbosely.
  bool verbose;
};

// 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,
                     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* ParseNativeEvents(const base::Value* option);
  Error* ParseProfile(const base::Value* option);
  Error* ParseVerbose(const base::Value* option);
  // Decodes the given base64-encoded string, optionally unzips it, and
  // writes the result to |path|.
  // On error, false will be returned and |error_msg| will be set.
  bool DecodeAndWriteFile(const FilePath& path,
                          const std::string& base64,
                          bool unzip,
                          std::string* error_msg);

  // The capabilities dictionary to parse.
  const base::DictionaryValue* dict_;

  // The root directory under which to write all files.
  const FilePath root_;

  // 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_