| Index: chrome/test/webdriver/dispatch.h
|
| diff --git a/chrome/test/webdriver/dispatch.h b/chrome/test/webdriver/dispatch.h
|
| index 5d86a525262a5f28c829575c8419ff3387f3858b..f030d2b22e79d0921c094599f37c715dfc75b785 100644
|
| --- a/chrome/test/webdriver/dispatch.h
|
| +++ b/chrome/test/webdriver/dispatch.h
|
| @@ -1,130 +1,139 @@
|
| -// Copyright (c) 2011 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.
|
| -
|
| -#ifndef CHROME_TEST_WEBDRIVER_DISPATCH_H_
|
| -#define CHROME_TEST_WEBDRIVER_DISPATCH_H_
|
| -
|
| -#include <string>
|
| -#include <vector>
|
| -
|
| -#include "base/basictypes.h"
|
| -#include "chrome/test/webdriver/commands/response.h"
|
| -#include "third_party/mongoose/mongoose.h"
|
| -
|
| -class DictionaryValue;
|
| -
|
| -namespace base {
|
| -class WaitableEvent;
|
| -}
|
| -
|
| -namespace webdriver {
|
| -
|
| -class Command;
|
| -class HttpResponse;
|
| -
|
| -namespace internal {
|
| -
|
| -// Converts a |Response| into a |HttpResponse| to be returned to the client.
|
| -// This function is exposed for testing.
|
| -void PrepareHttpResponse(const Response& command_response,
|
| - HttpResponse* const http_response);
|
| -
|
| -// Sends a |response| to a WebDriver command back to the client.
|
| -// |connection| is the communication pipe to the HTTP server and
|
| -// |request_info| contains any data sent by the user.
|
| -void SendResponse(struct mg_connection* const connection,
|
| - const std::string& request_method,
|
| - const Response& response);
|
| -
|
| -// Parses the request info and returns whether parsing was successful. If not,
|
| -// |response| has been modified with the error.
|
| -bool ParseRequestInfo(const struct mg_request_info* const request_info,
|
| - std::string* method,
|
| - std::vector<std::string>* path_segments,
|
| - DictionaryValue** parameters,
|
| - Response* const response);
|
| -
|
| -// Allows the bulk of the implementation of |Dispatch| to be moved out of this
|
| -// header file. Takes ownership of |command|.
|
| -void DispatchHelper(Command* const command,
|
| - const std::string& method,
|
| - Response* const response);
|
| -
|
| -} // namespace internal
|
| -
|
| -// Template function for dispatching commands sent to the WebDriver REST
|
| -// service. |CommandType| must be a subtype of |webdriver::Command|.
|
| -template<typename CommandType>
|
| -void Dispatch(struct mg_connection* connection,
|
| - const struct mg_request_info* request_info,
|
| - void* user_data) {
|
| - std::string method;
|
| - std::vector<std::string> path_segments;
|
| - DictionaryValue* parameters = NULL;
|
| - Response response;
|
| - if (internal::ParseRequestInfo(request_info,
|
| - &method,
|
| - &path_segments,
|
| - ¶meters,
|
| - &response)) {
|
| - internal::DispatchHelper(
|
| - new CommandType(path_segments, parameters),
|
| - method,
|
| - &response);
|
| - }
|
| -
|
| - internal::SendResponse(connection,
|
| - request_info->request_method,
|
| - response);
|
| -}
|
| -
|
| -class Dispatcher {
|
| - public:
|
| - // Creates a new dispatcher that will register all URL callbacks with the
|
| - // given |context|. Each callback's pattern will be prefixed with the provided
|
| - // |root|.
|
| - Dispatcher(struct mg_context* context, const std::string& root);
|
| - ~Dispatcher();
|
| -
|
| - // Registers a callback for a WebDriver command using the given URL |pattern|.
|
| - // The |CommandType| must be a subtype of |webdriver::Command|.
|
| - template<typename CommandType>
|
| - void Add(const std::string& pattern);
|
| -
|
| - // Registers a callback that will shutdown the server. When any HTTP request
|
| - // is received at this URL |pattern|, the |shutdown_event| will be signaled.
|
| - void AddShutdown(const std::string& pattern,
|
| - base::WaitableEvent* shutdown_event);
|
| -
|
| - // Registers a callback for the given pattern that will return a simple
|
| - // "HTTP/1.1 200 OK" message with "ok" in the body. Used for checking the
|
| - // status of the server.
|
| - void AddStatus(const std::string& pattern);
|
| -
|
| - // Registers a callback that will always respond with a
|
| - // "HTTP/1.1 501 Not Implemented" message.
|
| - void SetNotImplemented(const std::string& pattern);
|
| -
|
| - // Registers a callback that will respond for all other requests with a
|
| - // "HTTP/1.1 403 Forbidden" message. Should be called only after registering
|
| - // other callbacks.
|
| - void ForbidAllOtherRequests();
|
| -
|
| - private:
|
| - struct mg_context* context_;
|
| - const std::string root_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(Dispatcher);
|
| -};
|
| -
|
| -
|
| -template <typename CommandType>
|
| -void Dispatcher::Add(const std::string& pattern) {
|
| - mg_set_uri_callback(context_, (root_ + pattern).c_str(),
|
| - &Dispatch<CommandType>, NULL);
|
| -}
|
| -
|
| -} // namespace webdriver
|
| -
|
| -#endif // CHROME_TEST_WEBDRIVER_DISPATCH_H_
|
| +// Copyright (c) 2011 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.
|
| +
|
| +#ifndef CHROME_TEST_WEBDRIVER_DISPATCH_H_
|
| +#define CHROME_TEST_WEBDRIVER_DISPATCH_H_
|
| +
|
| +#include <string>
|
| +#include <vector>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/logging.h"
|
| +#include "chrome/test/webdriver/commands/response.h"
|
| +#include "third_party/mongoose/mongoose.h"
|
| +
|
| +class DictionaryValue;
|
| +
|
| +namespace base {
|
| +class WaitableEvent;
|
| +}
|
| +
|
| +namespace webdriver {
|
| +
|
| +class Command;
|
| +class HttpResponse;
|
| +
|
| +namespace internal {
|
| +
|
| +// Converts a |Response| into a |HttpResponse| to be returned to the client.
|
| +// This function is exposed for testing.
|
| +void PrepareHttpResponse(const Response& command_response,
|
| + HttpResponse* const http_response);
|
| +
|
| +// Sends a |response| to a WebDriver command back to the client.
|
| +// |connection| is the communication pipe to the HTTP server and
|
| +// |request_info| contains any data sent by the user.
|
| +void SendResponse(struct mg_connection* const connection,
|
| + const std::string& request_method,
|
| + const Response& response);
|
| +
|
| +// Parses the request info and returns whether parsing was successful. If not,
|
| +// |response| has been modified with the error.
|
| +bool ParseRequestInfo(const struct mg_request_info* const request_info,
|
| + std::string* method,
|
| + std::vector<std::string>* path_segments,
|
| + DictionaryValue** parameters,
|
| + Response* const response);
|
| +
|
| +// Allows the bulk of the implementation of |Dispatch| to be moved out of this
|
| +// header file. Takes ownership of |command|.
|
| +void DispatchHelper(Command* const command,
|
| + const std::string& method,
|
| + Response* const response);
|
| +
|
| +} // namespace internal
|
| +
|
| +// Template function for dispatching commands sent to the WebDriver REST
|
| +// service. |CommandType| must be a subtype of |webdriver::Command|.
|
| +template<typename CommandType>
|
| +void Dispatch(struct mg_connection* connection,
|
| + const struct mg_request_info* request_info,
|
| + void* user_data) {
|
| + std::string method;
|
| + std::vector<std::string> path_segments;
|
| + DictionaryValue* parameters = NULL;
|
| + Response response;
|
| + if (internal::ParseRequestInfo(request_info,
|
| + &method,
|
| + &path_segments,
|
| + ¶meters,
|
| + &response)) {
|
| + std::string post_data(request_info->post_data, request_info->post_data_len);
|
| + LOG(INFO) << "Received command, url: " << request_info->uri
|
| + << ", method: " << request_info->request_method
|
| + << ", postd data: " << post_data;
|
| + internal::DispatchHelper(
|
| + new CommandType(path_segments, parameters),
|
| + method,
|
| + &response);
|
| + }
|
| + internal::SendResponse(connection,
|
| + request_info->request_method,
|
| + response);
|
| + LOG(INFO) << "Sent command response, url: " << request_info->uri;
|
| +}
|
| +
|
| +class Dispatcher {
|
| + public:
|
| + // Creates a new dispatcher that will register all URL callbacks with the
|
| + // given |context|. Each callback's pattern will be prefixed with the provided
|
| + // |root|.
|
| + Dispatcher(struct mg_context* context, const std::string& root);
|
| + ~Dispatcher();
|
| +
|
| + // Registers a callback for a WebDriver command using the given URL |pattern|.
|
| + // The |CommandType| must be a subtype of |webdriver::Command|.
|
| + template<typename CommandType>
|
| + void Add(const std::string& pattern);
|
| +
|
| + // Registers a callback that will shutdown the server. When any HTTP request
|
| + // is received at this URL |pattern|, the |shutdown_event| will be signaled.
|
| + void AddShutdown(const std::string& pattern,
|
| + base::WaitableEvent* shutdown_event);
|
| +
|
| + // Registers a callback for the given pattern that will return a simple
|
| + // "HTTP/1.1 200 OK" message with "ok" in the body. Used for checking the
|
| + // status of the server.
|
| + void AddHealthz(const std::string& pattern);
|
| +
|
| + // Registers a callback for the given pattern that will return the current
|
| + // WebDriver log contents.
|
| + void AddLog(const std::string& pattern);
|
| +
|
| + // Registers a callback that will always respond with a
|
| + // "HTTP/1.1 501 Not Implemented" message.
|
| + void SetNotImplemented(const std::string& pattern);
|
| +
|
| + // Registers a callback that will respond for all other requests with a
|
| + // "HTTP/1.1 403 Forbidden" message. Should be called only after registering
|
| + // other callbacks.
|
| + void ForbidAllOtherRequests();
|
| +
|
| + private:
|
| + struct mg_context* context_;
|
| + const std::string root_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(Dispatcher);
|
| +};
|
| +
|
| +
|
| +template <typename CommandType>
|
| +void Dispatcher::Add(const std::string& pattern) {
|
| + mg_set_uri_callback(context_, (root_ + pattern).c_str(),
|
| + &Dispatch<CommandType>, NULL);
|
| +}
|
| +
|
| +} // namespace webdriver
|
| +
|
| +#endif // CHROME_TEST_WEBDRIVER_DISPATCH_H_
|
|
|