1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_COMMON_AUTOMATION_CONSTANTS_H__
6#define CHROME_COMMON_AUTOMATION_CONSTANTS_H__
7
8#include <string>
9
10namespace automation {
11
12// JSON value labels for proxy settings that are passed in via
13// AutomationMsg_SetProxyConfig. These are here since they are used by both
14// AutomationProvider and AutomationProxy.
15extern const char kJSONProxyAutoconfig[];
16extern const char kJSONProxyNoProxy[];
17extern const char kJSONProxyPacUrl[];
18extern const char kJSONProxyPacMandatory[];
19extern const char kJSONProxyBypassList[];
20extern const char kJSONProxyServer[];
21
22// When passing the kTestingChannelID switch to the browser, prepend
23// this prefix to the channel id to enable the named testing interface.
24// Named testing interface is used when you want to connect an
25// AutomationProxy to an already-running browser instance.
26extern const char kNamedInterfacePrefix[];
27
28// Amount of time to wait before querying the browser.
29static const int kSleepTime = 250;
30
31// Recognized by the AutomationProvider's SendWebKeyboardEventToSelectedTab
32// command. Specifies the type of the keyboard event.
33enum KeyEventTypes {
34  kRawKeyDownType = 0,
35  kKeyDownType,
36  kCharType,
37  kKeyUpType,
38};
39
40// Recognized by the AutomationProvider's SendWebKeyboardEventToSelectedTab
41// command. Specifies masks to be used in constructing keyboard event modifiers.
42enum KeyModifierMasks {
43  kShiftKeyMask   = 1 << 0,
44  kControlKeyMask = 1 << 1,
45  kAltKeyMask     = 1 << 2,
46  kMetaKeyMask    = 1 << 3,
47  kNumLockKeyMask = 1 << 4,
48};
49
50// Recognized by the AutomationProvider's ProcessWebMouseEvent command.
51enum MouseEventType {
52  kMouseDown = 0,
53  kMouseUp,
54  kMouseMove,
55  kMouseEnter,
56  kMouseLeave,
57  kContextMenu,
58};
59
60enum MouseButton {
61  kLeftButton = 0,
62  kMiddleButton,
63  kRightButton,
64  kNoButton,
65};
66
67// The current version of ChromeDriver automation supported by Chrome.
68// This needs to be incremented for each change to ChromeDriver automation that
69// is not backwards compatible. Some examples of this would be:
70// - SendJSONRequest or Hello IPC messages change
71// - The interface for an individual ChromeDriver automation call changes in an
72//   incompatible way
73// TODO(kkania): Investigate a better backwards compatible automation solution.
74extern const int kChromeDriverAutomationVersion;
75
76// Automation error codes. These provide the client a simple way
77// to detect certain types of errors it may be interested in handling.
78// The error code values must stay consistent across compatible versions.
79enum ErrorCode {
80  // An unknown error occurred.
81  kUnknownError = 0,
82  // Trying to operate on a JavaScript modal dialog when none is open.
83  kNoJavaScriptModalDialogOpen = 1,
84  // An open modal dialog blocked the operation. The operation may have
85  // partially completed.
86  kBlockedByModalDialog = 2,
87  // An ID was supplied that is invalid or does not refer to an existing object.
88  kInvalidId = 3,
89};
90
91// Represents an automation error. Each error has a code and an error message.
92class Error {
93 public:
94  // Creates an invalid error.
95  Error();
96
97  // Creates an error for the given code. A default message for the given code
98  // will be used as the error message.
99  explicit Error(ErrorCode code);
100
101  // Creates an error for the given message. The |kUnknownError| type will
102  // be used.
103  explicit Error(const std::string& error_msg);
104
105  // Creates an error for the given code and message.
106  Error(ErrorCode code, const std::string& error_msg);
107
108  virtual ~Error();
109
110  ErrorCode code() const;
111  const std::string& message() const;
112
113 private:
114  ErrorCode code_;
115  std::string message_;
116};
117
118}  // namespace automation
119
120// Used by AutomationProxy, declared here so that other headers don't need
121// to include automation_proxy.h.
122enum AutomationLaunchResult {
123  AUTOMATION_LAUNCH_RESULT_INVALID = -1,
124  AUTOMATION_SUCCESS,
125  AUTOMATION_TIMEOUT,
126  AUTOMATION_VERSION_MISMATCH,
127  AUTOMATION_CREATE_TAB_FAILED,
128  AUTOMATION_SERVER_CRASHED,
129  AUTOMATION_CHANNEL_ERROR,
130};
131
132enum AutomationMsg_NavigationResponseValues {
133  AUTOMATION_MSG_NAVIGATION_ERROR = 0,
134  AUTOMATION_MSG_NAVIGATION_SUCCESS,
135  AUTOMATION_MSG_NAVIGATION_AUTH_NEEDED,
136  AUTOMATION_MSG_NAVIGATION_BLOCKED_BY_MODAL_DIALOG,
137};
138
139// Used in the AutomationMsg_GetExtensionProperty to identify which extension
140// property should be retrieved, instead of having separate messages for each
141// property.
142enum AutomationMsg_DEPRECATED_ExtensionProperty {
143  AUTOMATION_MSG_EXTENSION_ID = 0,
144  AUTOMATION_MSG_EXTENSION_NAME,
145  AUTOMATION_MSG_EXTENSION_VERSION,
146  AUTOMATION_MSG_EXTENSION_BROWSER_ACTION_INDEX,
147};
148
149// Specifies the font size on a page which is requested by an automation
150// client.
151enum AutomationPageFontSize {
152  SMALLEST_FONT = 8,
153  SMALL_FONT = 12,
154  MEDIUM_FONT = 16,
155  LARGE_FONT = 24,
156  LARGEST_FONT = 36
157};
158
159enum FindInPageDirection { BACK = 0, FWD = 1 };
160enum FindInPageCase { IGNORE_CASE = 0, CASE_SENSITIVE = 1 };
161
162#endif  // CHROME_COMMON_AUTOMATION_CONSTANTS_H__
163