| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <signal.h> | 5 #include <signal.h> |
| 6 #include <stdlib.h> | 6 #include <stdlib.h> |
| 7 | 7 |
| 8 #if defined(OS_WIN) | 8 #if defined(OS_WIN) |
| 9 #include <windows.h> | 9 #include <windows.h> |
| 10 #endif | 10 #endif |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 224 | 224 |
| 225 // Register Chrome's path provider so that the AutomationProxy will find our | 225 // Register Chrome's path provider so that the AutomationProxy will find our |
| 226 // built Chrome. | 226 // built Chrome. |
| 227 chrome::RegisterPathProvider(); | 227 chrome::RegisterPathProvider(); |
| 228 TestTimeouts::Initialize(); | 228 TestTimeouts::Initialize(); |
| 229 InitChromeDriverLogging(*cmd_line); | 229 InitChromeDriverLogging(*cmd_line); |
| 230 | 230 |
| 231 // Parse command line flags. | 231 // Parse command line flags. |
| 232 std::string port = "9515"; | 232 std::string port = "9515"; |
| 233 std::string root; | 233 std::string root; |
| 234 FilePath chrome_dir; | |
| 235 std::string url_base; | 234 std::string url_base; |
| 236 if (cmd_line->HasSwitch("port")) | 235 if (cmd_line->HasSwitch("port")) |
| 237 port = cmd_line->GetSwitchValueASCII("port"); | 236 port = cmd_line->GetSwitchValueASCII("port"); |
| 238 // The 'root' flag allows the user to specify a location to serve files from. | 237 // The 'root' flag allows the user to specify a location to serve files from. |
| 239 // If it is not given, a callback will be registered to forbid all file | 238 // If it is not given, a callback will be registered to forbid all file |
| 240 // requests. | 239 // requests. |
| 241 if (cmd_line->HasSwitch("root")) | 240 if (cmd_line->HasSwitch("root")) |
| 242 root = cmd_line->GetSwitchValueASCII("root"); | 241 root = cmd_line->GetSwitchValueASCII("root"); |
| 243 if (cmd_line->HasSwitch("chrome-dir")) | |
| 244 chrome_dir = cmd_line->GetSwitchValuePath("chrome-dir"); | |
| 245 if (cmd_line->HasSwitch("url-base")) | 242 if (cmd_line->HasSwitch("url-base")) |
| 246 url_base = cmd_line->GetSwitchValueASCII("url-base"); | 243 url_base = cmd_line->GetSwitchValueASCII("url-base"); |
| 247 | 244 |
| 248 webdriver::SessionManager* manager = webdriver::SessionManager::GetInstance(); | 245 webdriver::SessionManager* manager = webdriver::SessionManager::GetInstance(); |
| 249 manager->set_port(port); | 246 manager->set_port(port); |
| 250 manager->set_url_base(url_base); | 247 manager->set_url_base(url_base); |
| 251 if (!chrome_dir.empty()) { | |
| 252 if (!file_util::DirectoryExists(chrome_dir)) { | |
| 253 std::cout << "Given Chrome directory is inaccessible or does not exist: " | |
| 254 << chrome_dir.value() << std::endl; | |
| 255 #if defined(OS_WIN) | |
| 256 return ERROR_PATH_NOT_FOUND; | |
| 257 #else | |
| 258 return ENOENT; | |
| 259 #endif | |
| 260 } | |
| 261 manager->set_chrome_dir(chrome_dir); | |
| 262 } | |
| 263 | 248 |
| 264 // Initialize SHTTPD context. | 249 // Initialize SHTTPD context. |
| 265 // Listen on port 9515 or port specified on command line. | 250 // Listen on port 9515 or port specified on command line. |
| 266 // TODO(jmikhail) Maybe add port 9516 as a secure connection. | 251 // TODO(jmikhail) Maybe add port 9516 as a secure connection. |
| 267 ctx = mg_start(); | 252 ctx = mg_start(); |
| 268 if (!SetMongooseOptions(ctx, port, root)) { | 253 if (!SetMongooseOptions(ctx, port, root)) { |
| 269 mg_stop(ctx); | 254 mg_stop(ctx); |
| 270 #if defined(OS_WIN) | 255 #if defined(OS_WIN) |
| 271 return WSAEADDRINUSE; | 256 return WSAEADDRINUSE; |
| 272 #else | 257 #else |
| 273 return EADDRINUSE; | 258 return EADDRINUSE; |
| 274 #endif | 259 #endif |
| 275 } | 260 } |
| 276 | 261 |
| 277 webdriver::Dispatcher dispatcher(ctx, url_base); | 262 webdriver::Dispatcher dispatcher(ctx, url_base); |
| 278 webdriver::InitCallbacks(ctx, &dispatcher, &shutdown_event, root.empty()); | 263 webdriver::InitCallbacks(ctx, &dispatcher, &shutdown_event, root.empty()); |
| 279 | 264 |
| 280 // The tests depend on parsing the first line ChromeDriver outputs, | 265 // The tests depend on parsing the first line ChromeDriver outputs, |
| 281 // so all other logging should happen after this. | 266 // so all other logging should happen after this. |
| 282 std::cout << "Started ChromeDriver" << std::endl | 267 std::cout << "Started ChromeDriver" << std::endl |
| 283 << "port=" << port << std::endl; | 268 << "port=" << port << std::endl; |
| 284 | 269 |
| 285 if (root.length()) { | 270 if (root.length()) { |
| 286 VLOG(1) << "Serving files from the current working directory"; | 271 VLOG(1) << "Serving files from the current working directory"; |
| 287 } | 272 } |
| 288 if (!chrome_dir.empty()) { | |
| 289 VLOG(1) << "Using Chrome inside directory: " << chrome_dir.value(); | |
| 290 } | |
| 291 | 273 |
| 292 // Run until we receive command to shutdown. | 274 // Run until we receive command to shutdown. |
| 293 shutdown_event.Wait(); | 275 shutdown_event.Wait(); |
| 294 | 276 |
| 295 // We should not reach here since the service should never quit. | 277 // We should not reach here since the service should never quit. |
| 296 // TODO(jmikhail): register a listener for SIGTERM and break the | 278 // TODO(jmikhail): register a listener for SIGTERM and break the |
| 297 // message loop gracefully. | 279 // message loop gracefully. |
| 298 mg_stop(ctx); | 280 mg_stop(ctx); |
| 299 return (EXIT_SUCCESS); | 281 return (EXIT_SUCCESS); |
| 300 } | 282 } |
| OLD | NEW |