Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Side by Side Diff: chrome/test/chromedriver/commands.cc

Issue 13185004: [chromedriver] Implement proxy capability. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/test/chromedriver/commands.h" 5 #include "chrome/test/chromedriver/commands.h"
6 6
7 #include "base/callback.h" 7 #include "base/callback.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/string_util.h"
9 #include "base/stringprintf.h" 10 #include "base/stringprintf.h"
10 #include "base/sys_info.h" 11 #include "base/sys_info.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "chrome/test/chromedriver/chrome/chrome.h" 13 #include "chrome/test/chromedriver/chrome/chrome.h"
13 #include "chrome/test/chromedriver/chrome/chrome_android_impl.h" 14 #include "chrome/test/chromedriver/chrome/chrome_android_impl.h"
14 #include "chrome/test/chromedriver/chrome/chrome_desktop_impl.h" 15 #include "chrome/test/chromedriver/chrome/chrome_desktop_impl.h"
15 #include "chrome/test/chromedriver/chrome/status.h" 16 #include "chrome/test/chromedriver/chrome/status.h"
16 #include "chrome/test/chromedriver/chrome/version.h" 17 #include "chrome/test/chromedriver/chrome/version.h"
17 #include "chrome/test/chromedriver/chrome/web_view.h" 18 #include "chrome/test/chromedriver/chrome/web_view.h"
18 #include "chrome/test/chromedriver/net/net_util.h" 19 #include "chrome/test/chromedriver/net/net_util.h"
(...skipping 15 matching lines...) Expand all
34 os.SetString("version", base::SysInfo::OperatingSystemVersion()); 35 os.SetString("version", base::SysInfo::OperatingSystemVersion());
35 os.SetString("arch", base::SysInfo::OperatingSystemArchitecture()); 36 os.SetString("arch", base::SysInfo::OperatingSystemArchitecture());
36 37
37 base::DictionaryValue info; 38 base::DictionaryValue info;
38 info.Set("build", build.DeepCopy()); 39 info.Set("build", build.DeepCopy());
39 info.Set("os", os.DeepCopy()); 40 info.Set("os", os.DeepCopy());
40 out_value->reset(info.DeepCopy()); 41 out_value->reset(info.DeepCopy());
41 return Status(kOk); 42 return Status(kOk);
42 } 43 }
43 44
45 namespace {
46
47 // Parse information of proxy, add them as chrome switches to |args_list|.
48 Status ParseProxy(const base::DictionaryValue& proxy_dict,
kkania 2013/03/29 20:52:46 Can we factor the capability parsing out into its
49 base::ListValue* args_list) {
50 std::string proxy_type;
51 if (!proxy_dict.GetString("proxyType", &proxy_type))
52 return Status(kUnknownError, "'proxyType' must be a string");
53 proxy_type = StringToLowerASCII(proxy_type);
54 if (proxy_type == "direct") {
55 args_list->AppendString("no-proxy-server");
56 } else if (proxy_type == "system") {
57 // Chrome default.
58 } else if (proxy_type == "pac") {
59 std::string proxy_pac_url;
60 if (!proxy_dict.GetString("proxyAutoconfigUrl", &proxy_pac_url))
61 return Status(kUnknownError, "'proxyAutoconfigUrl' must be a string");
62 args_list->AppendString("proxy-pac-url=" + proxy_pac_url);
63 } else if (proxy_type == "autodetect") {
64 args_list->AppendString("proxy-auto-detect");
65 } else if (proxy_type == "manual") {
66 const char* proxy_servers_options[][2] = {
67 {"ftpProxy", "ftp"}, {"httpProxy", "http"}, {"sslProxy", "https"}};
68 std::string proxy_servers;
69 for (size_t i = 0; i < arraysize(proxy_servers_options); ++i) {
70 if (!proxy_dict.HasKey(proxy_servers_options[i][0]))
71 continue;
72 std::string value;
73 if (!proxy_dict.GetString(proxy_servers_options[i][0], &value)) {
74 return Status(
75 kUnknownError,
76 base::StringPrintf("'%s' must be a string",
77 proxy_servers_options[i][0]));
78 }
79 // Converts into Chrome proxy scheme.
80 // Example: "http=localhost:9000;ftp=localhost:8000".
81 if (!proxy_servers.empty())
82 proxy_servers += ";";
83 proxy_servers += base::StringPrintf(
84 "%s=%s", proxy_servers_options[i][1], value.c_str());
85 }
86
87 std::string proxy_bypass_list;
88 if (proxy_dict.HasKey("noProxy")) {
89 if (!proxy_dict.GetString("noProxy", & proxy_bypass_list))
90 return Status(kUnknownError, "'noProxy' must be a string");
91 }
92
93 if (proxy_servers.empty() && proxy_bypass_list.empty()) {
94 return Status(kUnknownError, "proxyType is 'manual' but no manual "
95 "proxy capabilities were found");
96 }
97 if (!proxy_servers.empty())
98 args_list->AppendString("proxy-server=" + proxy_servers);
99 if (!proxy_bypass_list.empty())
100 args_list->AppendString("proxy-bypass-list=" + proxy_bypass_list);
101 } else {
102 return Status(kUnknownError, "unrecognized proxy type:" + proxy_type);
103 }
104 return Status(kOk);
105 }
106
107 }
108
44 Status ExecuteNewSession( 109 Status ExecuteNewSession(
45 SessionMap* session_map, 110 SessionMap* session_map,
46 scoped_refptr<URLRequestContextGetter> context_getter, 111 scoped_refptr<URLRequestContextGetter> context_getter,
47 const SyncWebSocketFactory& socket_factory, 112 const SyncWebSocketFactory& socket_factory,
48 const base::DictionaryValue& params, 113 const base::DictionaryValue& params,
49 const std::string& session_id, 114 const std::string& session_id,
50 scoped_ptr<base::Value>* out_value, 115 scoped_ptr<base::Value>* out_value,
51 std::string* out_session_id) { 116 std::string* out_session_id) {
52 int port; 117 int port;
53 if (!FindOpenPort(&port)) 118 if (!FindOpenPort(&port))
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
102 } 167 }
103 168
104 const base::Value* extensions = NULL; 169 const base::Value* extensions = NULL;
105 const base::ListValue* extensions_list = NULL; 170 const base::ListValue* extensions_list = NULL;
106 if (desired_caps->Get("chromeOptions.extensions", &extensions) 171 if (desired_caps->Get("chromeOptions.extensions", &extensions)
107 && !extensions->GetAsList(&extensions_list)) { 172 && !extensions->GetAsList(&extensions_list)) {
108 return Status(kUnknownError, 173 return Status(kUnknownError,
109 "chrome extensions must be a list"); 174 "chrome extensions must be a list");
110 } 175 }
111 176
177 const base::Value* proxy = NULL;
178 scoped_ptr<base::ListValue> new_args_list;
179 if (desired_caps->Get("chromeOptions.proxy", &proxy)) {
180 const base::DictionaryValue* proxy_dict = NULL;
181 if (!proxy->GetAsDictionary(&proxy_dict))
182 return Status(kUnknownError, "proxy must be a dictionary");
183 new_args_list.reset(args_list->DeepCopy());
184 status = ParseProxy(*proxy_dict, new_args_list.get());
185 if (status.IsError())
186 return status;
187 args_list = new_args_list.get();
188 }
189
112 scoped_ptr<ChromeDesktopImpl> chrome_desktop(new ChromeDesktopImpl( 190 scoped_ptr<ChromeDesktopImpl> chrome_desktop(new ChromeDesktopImpl(
113 context_getter, port, socket_factory)); 191 context_getter, port, socket_factory));
114 status = chrome_desktop->Launch(chrome_exe, args_list, extensions_list, 192 status = chrome_desktop->Launch(chrome_exe, args_list, extensions_list,
115 prefs_dict, local_state_dict); 193 prefs_dict, local_state_dict);
116 chrome.reset(chrome_desktop.release()); 194 chrome.reset(chrome_desktop.release());
117 } 195 }
118 if (status.IsError()) 196 if (status.IsError())
119 return Status(kSessionNotCreatedException, status.message()); 197 return Status(kSessionNotCreatedException, status.message());
120 198
121 std::list<std::string> web_view_ids; 199 std::list<std::string> web_view_ids;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 std::string* out_session_id) { 233 std::string* out_session_id) {
156 std::vector<std::string> session_ids; 234 std::vector<std::string> session_ids;
157 session_map->GetKeys(&session_ids); 235 session_map->GetKeys(&session_ids);
158 for (size_t i = 0; i < session_ids.size(); ++i) { 236 for (size_t i = 0; i < session_ids.size(); ++i) {
159 scoped_ptr<base::Value> unused_value; 237 scoped_ptr<base::Value> unused_value;
160 std::string unused_session_id; 238 std::string unused_session_id;
161 quit_command.Run(params, session_ids[i], &unused_value, &unused_session_id); 239 quit_command.Run(params, session_ids[i], &unused_value, &unused_session_id);
162 } 240 }
163 return Status(kOk); 241 return Status(kOk);
164 } 242 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698