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

Unified Diff: chrome/test/webdriver/webdriver_server.cc

Issue 23526047: Delete old chromedriver code, and remove mongoose webserver. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/webdriver/webdriver_logging.cc ('k') | chrome/test/webdriver/webdriver_session.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/webdriver/webdriver_server.cc
diff --git a/chrome/test/webdriver/webdriver_server.cc b/chrome/test/webdriver/webdriver_server.cc
deleted file mode 100644
index 0785fafddf0515d1449f7cfea3c566dd43d7a355..0000000000000000000000000000000000000000
--- a/chrome/test/webdriver/webdriver_server.cc
+++ /dev/null
@@ -1,331 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include <signal.h>
-#include <stdlib.h>
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif
-
-#include <fstream>
-#include <iostream>
-
-#include "base/at_exit.h"
-#include "base/base_paths.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/path_service.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/test/test_timeouts.h"
-#include "base/threading/platform_thread.h"
-#include "base/time/time.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/test/webdriver/commands/alert_commands.h"
-#include "chrome/test/webdriver/commands/appcache_status_command.h"
-#include "chrome/test/webdriver/commands/browser_connection_commands.h"
-#include "chrome/test/webdriver/commands/chrome_commands.h"
-#include "chrome/test/webdriver/commands/cookie_commands.h"
-#include "chrome/test/webdriver/commands/create_session.h"
-#include "chrome/test/webdriver/commands/execute_async_script_command.h"
-#include "chrome/test/webdriver/commands/execute_command.h"
-#include "chrome/test/webdriver/commands/file_upload_command.h"
-#include "chrome/test/webdriver/commands/find_element_commands.h"
-#include "chrome/test/webdriver/commands/html5_location_commands.h"
-#include "chrome/test/webdriver/commands/html5_storage_commands.h"
-#include "chrome/test/webdriver/commands/keys_command.h"
-#include "chrome/test/webdriver/commands/log_command.h"
-#include "chrome/test/webdriver/commands/mouse_commands.h"
-#include "chrome/test/webdriver/commands/navigate_commands.h"
-#include "chrome/test/webdriver/commands/screenshot_command.h"
-#include "chrome/test/webdriver/commands/session_with_id.h"
-#include "chrome/test/webdriver/commands/set_timeout_commands.h"
-#include "chrome/test/webdriver/commands/source_command.h"
-#include "chrome/test/webdriver/commands/target_locator_commands.h"
-#include "chrome/test/webdriver/commands/title_command.h"
-#include "chrome/test/webdriver/commands/url_command.h"
-#include "chrome/test/webdriver/commands/webelement_commands.h"
-#include "chrome/test/webdriver/commands/window_commands.h"
-#include "chrome/test/webdriver/webdriver_dispatch.h"
-#include "chrome/test/webdriver/webdriver_logging.h"
-#include "chrome/test/webdriver/webdriver_session_manager.h"
-#include "chrome/test/webdriver/webdriver_switches.h"
-#include "chrome/test/webdriver/webdriver_util.h"
-#include "third_party/mongoose/mongoose.h"
-
-#if defined(OS_WIN)
-#include <time.h>
-#elif defined(OS_POSIX)
-#include <errno.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#endif
-
-namespace webdriver {
-
-namespace {
-
-void InitCallbacks(Dispatcher* dispatcher,
- base::WaitableEvent* shutdown_event,
- bool forbid_other_requests) {
- dispatcher->AddShutdown("/shutdown", shutdown_event);
- dispatcher->AddStatus("/status");
- dispatcher->AddLog("/log");
-
- dispatcher->Add<CreateSession>("/session");
-
- // WebElement commands
- dispatcher->Add<FindOneElementCommand>( "/session/*/element");
- dispatcher->Add<FindManyElementsCommand>("/session/*/elements");
- dispatcher->Add<ActiveElementCommand>( "/session/*/element/active");
- dispatcher->Add<FindOneElementCommand>( "/session/*/element/*/element");
- dispatcher->Add<FindManyElementsCommand>("/session/*/elements/*/elements");
- dispatcher->Add<ElementAttributeCommand>("/session/*/element/*/attribute/*");
- dispatcher->Add<ElementCssCommand>( "/session/*/element/*/css/*");
- dispatcher->Add<ElementClearCommand>( "/session/*/element/*/clear");
- dispatcher->Add<ElementDisplayedCommand>("/session/*/element/*/displayed");
- dispatcher->Add<ElementEnabledCommand>( "/session/*/element/*/enabled");
- dispatcher->Add<ElementEqualsCommand>( "/session/*/element/*/equals/*");
- dispatcher->Add<ElementLocationCommand>( "/session/*/element/*/location");
- dispatcher->Add<ElementLocationInViewCommand>(
- "/session/*/element/*/location_in_view");
- dispatcher->Add<ElementNameCommand>( "/session/*/element/*/name");
- dispatcher->Add<ElementSelectedCommand>("/session/*/element/*/selected");
- dispatcher->Add<ElementSizeCommand>( "/session/*/element/*/size");
- dispatcher->Add<ElementSubmitCommand>( "/session/*/element/*/submit");
- dispatcher->Add<ElementTextCommand>( "/session/*/element/*/text");
- dispatcher->Add<ElementToggleCommand>( "/session/*/element/*/toggle");
- dispatcher->Add<ElementValueCommand>( "/session/*/element/*/value");
-
- dispatcher->Add<ScreenshotCommand>("/session/*/screenshot");
-
- // Mouse Commands
- dispatcher->Add<MoveAndClickCommand>("/session/*/element/*/click");
- dispatcher->Add<DragCommand>( "/session/*/element/*/drag");
- dispatcher->Add<HoverCommand>( "/session/*/element/*/hover");
-
- dispatcher->Add<MoveToCommand>( "/session/*/moveto");
- dispatcher->Add<ClickCommand>( "/session/*/click");
- dispatcher->Add<ButtonDownCommand>( "/session/*/buttondown");
- dispatcher->Add<ButtonUpCommand>( "/session/*/buttonup");
- dispatcher->Add<DoubleClickCommand>("/session/*/doubleclick");
-
- // All session based commands should be listed after the element based
- // commands to avoid potential mapping conflicts from an overzealous
- // wildcard match. For example, /session/*/title maps to the handler to
- // fetch the page title. If mapped first, this would overwrite the handler
- // for /session/*/element/*/attribute/title, which should fetch the title
- // attribute of the element.
- dispatcher->Add<AcceptAlertCommand>( "/session/*/accept_alert");
- dispatcher->Add<AlertTextCommand>( "/session/*/alert_text");
- dispatcher->Add<BackCommand>( "/session/*/back");
- dispatcher->Add<DismissAlertCommand>( "/session/*/dismiss_alert");
- dispatcher->Add<ExecuteCommand>( "/session/*/execute");
- dispatcher->Add<ExecuteAsyncScriptCommand>(
- "/session/*/execute_async");
- dispatcher->Add<ForwardCommand>( "/session/*/forward");
- dispatcher->Add<SwitchFrameCommand>( "/session/*/frame");
- dispatcher->Add<KeysCommand>( "/session/*/keys");
- dispatcher->Add<RefreshCommand>( "/session/*/refresh");
- dispatcher->Add<SourceCommand>( "/session/*/source");
- dispatcher->Add<TitleCommand>( "/session/*/title");
- dispatcher->Add<URLCommand>( "/session/*/url");
- dispatcher->Add<WindowCommand>( "/session/*/window");
- dispatcher->Add<WindowHandleCommand>( "/session/*/window_handle");
- dispatcher->Add<WindowHandlesCommand>("/session/*/window_handles");
- dispatcher->Add<WindowSizeCommand>( "/session/*/window/*/size");
- dispatcher->Add<WindowPositionCommand>(
- "/session/*/window/*/position");
- dispatcher->Add<WindowMaximizeCommand>(
- "/session/*/window/*/maximize");
- dispatcher->Add<SetAsyncScriptTimeoutCommand>(
- "/session/*/timeouts/async_script");
- dispatcher->Add<ImplicitWaitCommand>( "/session/*/timeouts/implicit_wait");
- dispatcher->Add<LogCommand>( "/session/*/log");
- dispatcher->Add<FileUploadCommand>( "/session/*/file");
-
- // Cookie functions.
- dispatcher->Add<CookieCommand>( "/session/*/cookie");
- dispatcher->Add<NamedCookieCommand>("/session/*/cookie/*");
-
- dispatcher->Add<BrowserConnectionCommand>("/session/*/browser_connection");
- dispatcher->Add<AppCacheStatusCommand>("/session/*/application_cache/status");
-
- // Chrome-specific commands.
- dispatcher->Add<ExtensionsCommand>("/session/*/chrome/extensions");
- dispatcher->Add<ExtensionCommand>("/session/*/chrome/extension/*");
- dispatcher->Add<ViewsCommand>("/session/*/chrome/views");
-#if !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS))
- dispatcher->Add<HeapProfilerDumpCommand>(
- "/session/*/chrome/heapprofilerdump");
-#endif // !defined(NO_TCMALLOC) && (defined(OS_LINUX) || defined(OS_CHROMEOS))
-
- // HTML5 functions.
- dispatcher->Add<HTML5LocationCommand>("/session/*/location");
- dispatcher->Add<LocalStorageCommand>("/session/*/local_storage");
- dispatcher->Add<LocalStorageSizeCommand>("/session/*/local_storage/size");
- dispatcher->Add<LocalStorageKeyCommand>("/session/*/local_storage/key*");
- dispatcher->Add<SessionStorageCommand>("/session/*/session_storage");
- dispatcher->Add<SessionStorageSizeCommand>("/session/*/session_storage/size");
- dispatcher->Add<SessionStorageKeyCommand>("/session/*/session_storage/key*");
-
- // Since the /session/* is a wild card that would match the above URIs, this
- // line MUST be after all other webdriver command callbacks.
- dispatcher->Add<SessionWithID>("/session/*");
-
- if (forbid_other_requests)
- dispatcher->ForbidAllOtherRequests();
-}
-
-void* ProcessHttpRequest(mg_event event_raised,
- struct mg_connection* connection,
- const struct mg_request_info* request_info) {
- bool handler_result_code = false;
- if (event_raised == MG_NEW_REQUEST) {
- handler_result_code =
- reinterpret_cast<Dispatcher*>(request_info->user_data)->
- ProcessHttpRequest(connection, request_info);
- }
-
- return reinterpret_cast<void*>(handler_result_code);
-}
-
-void MakeMongooseOptions(const std::string& port,
- const std::string& root,
- int http_threads,
- bool enable_keep_alive,
- std::vector<std::string>* out_options) {
- out_options->push_back("listening_ports");
- out_options->push_back(port);
- out_options->push_back("enable_keep_alive");
- out_options->push_back(enable_keep_alive ? "yes" : "no");
- out_options->push_back("num_threads");
- out_options->push_back(base::IntToString(http_threads));
- if (!root.empty()) {
- out_options->push_back("document_root");
- out_options->push_back(root);
- }
-}
-
-} // namespace
-
-int RunChromeDriver() {
- base::AtExitManager exit;
- base::WaitableEvent shutdown_event(false, false);
- CommandLine* cmd_line = CommandLine::ForCurrentProcess();
-
-#if defined(OS_POSIX)
- signal(SIGPIPE, SIG_IGN);
-#endif
- srand((unsigned int)time(NULL));
-
- // Register Chrome's path provider so that the AutomationProxy will find our
- // built Chrome.
- chrome::RegisterPathProvider();
- TestTimeouts::Initialize();
-
- // Parse command line flags.
- std::string port = "9515";
- base::FilePath log_path;
- std::string root;
- std::string url_base;
- int http_threads = 4;
- bool enable_keep_alive = false;
- if (cmd_line->HasSwitch("port"))
- port = cmd_line->GetSwitchValueASCII("port");
- if (cmd_line->HasSwitch("log-path"))
- log_path = cmd_line->GetSwitchValuePath("log-path");
- // The 'root' flag allows the user to specify a location to serve files from.
- // If it is not given, a callback will be registered to forbid all file
- // requests.
- if (cmd_line->HasSwitch("root"))
- root = cmd_line->GetSwitchValueASCII("root");
- if (cmd_line->HasSwitch("url-base"))
- url_base = cmd_line->GetSwitchValueASCII("url-base");
- if (cmd_line->HasSwitch("http-threads")) {
- if (!base::StringToInt(cmd_line->GetSwitchValueASCII("http-threads"),
- &http_threads)) {
- std::cerr << "'http-threads' option must be an integer";
- return 1;
- }
- }
- if (cmd_line->HasSwitch(kEnableKeepAlive))
- enable_keep_alive = true;
-
- bool logging_success = InitWebDriverLogging(log_path, kAllLogLevel);
- std::string chromedriver_info = base::StringPrintf(
- "ChromeDriver %s", chrome::kChromeVersion);
- base::FilePath chromedriver_exe;
- if (PathService::Get(base::FILE_EXE, &chromedriver_exe)) {
- chromedriver_info += base::StringPrintf(
- " %" PRFilePath, chromedriver_exe.value().c_str());
- }
- FileLog::Get()->Log(kInfoLogLevel, base::Time::Now(), chromedriver_info);
-
-
- SessionManager* manager = SessionManager::GetInstance();
- manager->set_port(port);
- manager->set_url_base(url_base);
-
- Dispatcher dispatcher(url_base);
- InitCallbacks(&dispatcher, &shutdown_event, root.empty());
-
- std::vector<std::string> args;
- MakeMongooseOptions(port, root, http_threads, enable_keep_alive, &args);
- scoped_ptr<const char*[]> options(new const char*[args.size() + 1]);
- for (size_t i = 0; i < args.size(); ++i) {
- options[i] = args[i].c_str();
- }
- options[args.size()] = NULL;
-
- // Initialize SHTTPD context.
- // Listen on port 9515 or port specified on command line.
- // TODO(jmikhail) Maybe add port 9516 as a secure connection.
- struct mg_context* ctx = mg_start(&ProcessHttpRequest,
- &dispatcher,
- options.get());
- if (ctx == NULL) {
- std::cerr << "Port already in use. Exiting..." << std::endl;
-#if defined(OS_WIN)
- return WSAEADDRINUSE;
-#else
- return EADDRINUSE;
-#endif
- }
-
- // The tests depend on parsing the first line ChromeDriver outputs,
- // so all other logging should happen after this.
- if (!cmd_line->HasSwitch("silent")) {
- std::cout << "Started ChromeDriver" << std::endl
- << "port=" << port << std::endl
- << "version=" << chrome::kChromeVersion << std::endl;
- if (logging_success)
- std::cout << "log=" << FileLog::Get()->path().value() << std::endl;
- else
- std::cout << "Log file could not be created" << std::endl;
- }
-
- // Run until we receive command to shutdown.
- // Don't call mg_stop because mongoose will hang if clients are still
- // connected when keep-alive is enabled.
- shutdown_event.Wait();
-
- return (EXIT_SUCCESS);
-}
-
-} // namespace webdriver
-
-int main(int argc, char *argv[]) {
- CommandLine::Init(argc, argv);
- return webdriver::RunChromeDriver();
-}
« no previous file with comments | « chrome/test/webdriver/webdriver_logging.cc ('k') | chrome/test/webdriver/webdriver_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698