OLD | NEW |
| (Empty) |
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 import optparse | |
5 import sys | |
6 import shlex | |
7 import logging | |
8 import copy | |
9 | |
10 from telemetry import browser_finder | |
11 from telemetry import wpr_modes | |
12 | |
13 class BrowserOptions(optparse.Values): | |
14 """Options to be used for discovering and launching a browser.""" | |
15 | |
16 def __init__(self, browser_type=None): | |
17 optparse.Values.__init__(self) | |
18 | |
19 self.browser_type = browser_type | |
20 self.browser_executable = None | |
21 self.chrome_root = None | |
22 self.android_device = None | |
23 self.cros_ssh_identity = None | |
24 | |
25 self.dont_override_profile = False | |
26 self.extra_browser_args = [] | |
27 self.extra_wpr_args = [] | |
28 self.show_stdout = False | |
29 self.extensions_to_load = [] | |
30 | |
31 self.cros_remote = None | |
32 self.wpr_mode = wpr_modes.WPR_OFF | |
33 self.wpr_make_javascript_deterministic = True | |
34 | |
35 self.browser_user_agent_type = None | |
36 | |
37 self.trace_dir = None | |
38 self.verbosity = 0 | |
39 | |
40 self.page_filter = None | |
41 self.page_filter_exclude = None | |
42 | |
43 def Copy(self): | |
44 return copy.deepcopy(self) | |
45 | |
46 def CreateParser(self, *args, **kwargs): | |
47 parser = optparse.OptionParser(*args, **kwargs) | |
48 | |
49 # Selection group | |
50 group = optparse.OptionGroup(parser, 'Which browser to use') | |
51 group.add_option('--browser', | |
52 dest='browser_type', | |
53 default=None, | |
54 help='Browser type to run, ' | |
55 'in order of priority. Supported values: list,%s' % | |
56 browser_finder.ALL_BROWSER_TYPES) | |
57 group.add_option('--browser-executable', | |
58 dest='browser_executable', | |
59 help='The exact browser to run.') | |
60 group.add_option('--chrome-root', | |
61 dest='chrome_root', | |
62 help='Where to look for chrome builds.' | |
63 'Defaults to searching parent dirs by default.') | |
64 group.add_option('--device', | |
65 dest='android_device', | |
66 help='The android device ID to use' | |
67 'If not specified, only 0 or 1 connected devcies are supported.') | |
68 group.add_option('--keep_test_server_ports', action='store_true', | |
69 help='Indicates the test server ports must be ' | |
70 'kept. When this is run via a sharder ' | |
71 'the test server ports should be kept and ' | |
72 'should not be reset.') | |
73 group.add_option( | |
74 '--remote', | |
75 dest='cros_remote', | |
76 help='The IP address of a remote ChromeOS device to use.') | |
77 group.add_option('--identity', | |
78 dest='cros_ssh_identity', | |
79 default=None, | |
80 help='The identity file to use when ssh\'ing into the ChromeOS device') | |
81 parser.add_option_group(group) | |
82 | |
83 # Browser options | |
84 group = optparse.OptionGroup(parser, 'Browser options') | |
85 group.add_option('--dont-override-profile', action='store_true', | |
86 dest='dont_override_profile', | |
87 help='Uses the regular user profile instead of a clean one') | |
88 group.add_option('--extra-browser-args', | |
89 dest='extra_browser_args_as_string', | |
90 help='Additional arguments to pass to the browser when it starts') | |
91 group.add_option('--extra-wpr-args', | |
92 dest='extra_wpr_args_as_string', | |
93 help=('Additional arguments to pass to Web Page Replay. ' | |
94 'See third_party/webpagereplay/replay.py for usage.')) | |
95 group.add_option('--show-stdout', | |
96 action='store_true', | |
97 help='When possible, will display the stdout of the process') | |
98 parser.add_option_group(group) | |
99 | |
100 # Page set options | |
101 group = optparse.OptionGroup(parser, 'Page set options') | |
102 group.add_option('--page-repeat', dest='page_repeat', default=1, | |
103 help='Number of times to repeat each individual ' + | |
104 'page in the pageset before proceeding.') | |
105 group.add_option('--pageset-repeat', dest='pageset_repeat', default=1, | |
106 help='Number of times to repeat the entire pageset ' + | |
107 'before finishing.') | |
108 group.add_option('--pageset-shuffle', action='store_true', | |
109 dest='pageset_shuffle', | |
110 help='Shuffle the order of pages within a pageset.') | |
111 group.add_option('--pageset-shuffle-order-file', | |
112 dest='pageset_shuffle_order_file', default=None, | |
113 help='Filename of an output of a previously run test on the current ' + | |
114 'pageset. The tests will run in the same order again, overriding ' + | |
115 'what is specified by --page-repeat and --pageset-repeat.') | |
116 parser.add_option_group(group) | |
117 | |
118 # Debugging options | |
119 group = optparse.OptionGroup(parser, 'When things go wrong') | |
120 group.add_option( | |
121 '--trace-dir', dest='trace_dir', default=None, | |
122 help='Record traces and store them in this directory.') | |
123 group.add_option( | |
124 '-v', '--verbose', action='count', dest='verbosity', | |
125 help='Increase verbosity level (repeat as needed)') | |
126 parser.add_option_group(group) | |
127 | |
128 real_parse = parser.parse_args | |
129 def ParseArgs(args=None): | |
130 defaults = parser.get_default_values() | |
131 for k, v in defaults.__dict__.items(): | |
132 if k in self.__dict__ and self.__dict__[k] != None: | |
133 continue | |
134 self.__dict__[k] = v | |
135 ret = real_parse(args, self) # pylint: disable=E1121 | |
136 | |
137 if self.verbosity >= 2: | |
138 logging.basicConfig(level=logging.DEBUG) | |
139 elif self.verbosity: | |
140 logging.basicConfig(level=logging.INFO) | |
141 else: | |
142 logging.basicConfig(level=logging.WARNING) | |
143 | |
144 if self.browser_executable and not self.browser_type: | |
145 self.browser_type = 'exact' | |
146 if not self.browser_executable and not self.browser_type: | |
147 sys.stderr.write('Must provide --browser=<type>. ' + | |
148 'Use --browser=list for valid options.\n') | |
149 sys.exit(1) | |
150 if self.browser_type == 'list': | |
151 types = browser_finder.GetAllAvailableBrowserTypes(self) | |
152 sys.stderr.write('Available browsers:\n') | |
153 sys.stdout.write(' %s\n' % '\n '.join(types)) | |
154 sys.exit(1) | |
155 if self.extra_browser_args_as_string: # pylint: disable=E1101 | |
156 tmp = shlex.split( | |
157 self.extra_browser_args_as_string) # pylint: disable=E1101 | |
158 self.extra_browser_args.extend(tmp) | |
159 delattr(self, 'extra_browser_args_as_string') | |
160 if self.extra_wpr_args_as_string: # pylint: disable=E1101 | |
161 tmp = shlex.split( | |
162 self.extra_wpr_args_as_string) # pylint: disable=E1101 | |
163 self.extra_wpr_args.extend(tmp) | |
164 delattr(self, 'extra_wpr_args_as_string') | |
165 return ret | |
166 parser.parse_args = ParseArgs | |
167 return parser | |
168 | |
169 def AppendExtraBrowserArg(self, arg): | |
170 if arg not in self.extra_browser_args: | |
171 self.extra_browser_args.append(arg) | |
OLD | NEW |