summaryrefslogtreecommitdiff
path: root/include/test/cef_test_server.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/test/cef_test_server.h')
-rw-r--r--include/test/cef_test_server.h184
1 files changed, 184 insertions, 0 deletions
diff --git a/include/test/cef_test_server.h b/include/test/cef_test_server.h
new file mode 100644
index 00000000..37f7a739
--- /dev/null
+++ b/include/test/cef_test_server.h
@@ -0,0 +1,184 @@
+// Copyright (c) 2022 Marshall A. Greenblatt. All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the name Chromium Embedded
+// Framework nor the names of its contributors may be used to endorse
+// or promote products derived from this software without specific prior
+// written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// ---------------------------------------------------------------------------
+//
+// The contents of this file must follow a specific format in order to
+// support the CEF translator tool. See the translator.README.txt file in the
+// tools directory for more information.
+//
+// THIS FILE IS FOR TESTING PURPOSES ONLY.
+//
+// The APIs defined in this file are for testing purposes only. They should only
+// be included from unit test targets.
+//
+
+#ifndef CEF_INCLUDE_TEST_CEF_TEST_SERVER_H_
+#define CEF_INCLUDE_TEST_CEF_TEST_SERVER_H_
+#pragma once
+
+#if !defined(BUILDING_CEF_SHARED) && !defined(WRAPPING_CEF_SHARED) && \
+ !defined(UNIT_TEST)
+#error This file can be included for unit tests only
+#endif
+
+#include <map>
+#include "include/cef_base.h"
+#include "include/cef_request.h"
+
+class CefTestServerConnection;
+class CefTestServerHandler;
+
+///
+/// Class representing an embedded test server that supports HTTP/HTTPS
+/// requests. This is a basic server providing only an essential subset of the
+/// HTTP/1.1 protocol. Especially, it assumes that the request syntax is
+/// correct. It *does not* support a Chunked Transfer Encoding. Server capacity
+/// is limited and is intended to handle only a small number of simultaneous
+/// connections (e.g. for communicating between applications on localhost). The
+/// methods of this class are safe to call from any thread in the brower process
+/// unless otherwise indicated.
+///
+/*--cef(source=library)--*/
+class CefTestServer : public CefBaseRefCounted {
+ public:
+ ///
+ /// Create and start a new test server that binds to |port|. If |port| is 0 an
+ /// available port number will be selected. If |https_server| is true the
+ /// server will be HTTPS, otherwise it will be HTTP. When |https_server| is
+ /// true the |https_cert_type| value is used to configure the certificate
+ /// type. Returns the newly created server object on success, or nullptr if
+ /// the server cannot be started.
+ ///
+ /// A new thread will be created for each CreateAndStart call (the "dedicated
+ /// server thread"). It is therefore recommended to use a different
+ /// CefTestServerHandler instance for each CreateAndStart call to avoid thread
+ /// safety issues in the CefTestServerHandler implementation.
+ ///
+ /// On success, this method will block until the dedicated server thread has
+ /// started. The server will continue running until Stop is called.
+ ///
+ /*--cef()--*/
+ static CefRefPtr<CefTestServer> CreateAndStart(
+ uint16 port,
+ bool https_server,
+ cef_test_cert_type_t https_cert_type,
+ CefRefPtr<CefTestServerHandler> handler);
+
+ ///
+ /// Stop the server and shut down the dedicated server thread. This method
+ /// must be called on the same thread as CreateAndStart. It will block until
+ /// the dedicated server thread has shut down.
+ ///
+ /*--cef()--*/
+ virtual void Stop() = 0;
+
+ ///
+ /// Returns the server origin including the port number (e.g.
+ /// "[http|https]://127.0.0.1:<port>".
+ ///
+ /*--cef()--*/
+ virtual CefString GetOrigin() = 0;
+};
+
+///
+/// Implement this interface to handle test server requests. A new thread will
+/// be created for each CefTestServer::CreateAndStart call (the "dedicated
+/// server thread"), and the methods of this class will be called on that
+/// thread. See related documentation on CefTestServer::CreateAndStart.
+///
+/*--cef(source=client)--*/
+class CefTestServerHandler : public virtual CefBaseRefCounted {
+ public:
+ ///
+ /// Called when |server| receives a request. To handle the request return true
+ /// and use |connection| to send the response either synchronously or
+ /// asynchronously. Otherwise, return false if the request is unhandled. When
+ /// returning false do not call any |connection| methods.
+ ///
+ /*--cef()--*/
+ virtual bool OnTestServerRequest(
+ CefRefPtr<CefTestServer> server,
+ CefRefPtr<CefRequest> request,
+ CefRefPtr<CefTestServerConnection> connection) = 0;
+};
+
+///
+/// Class representing a test server connection. The methods of this class are
+/// safe to call from any thread in the brower process unless otherwise
+/// indicated.
+///
+/*--cef(source=library)--*/
+class CefTestServerConnection : public CefBaseRefCounted {
+ public:
+ typedef std::multimap<CefString, CefString> HeaderMap;
+
+ ///
+ /// Send an HTTP 200 "OK" response. |content_type| is the response content
+ /// type (e.g. "text/html"). |data| is the response content and |data_size| is
+ /// the size of |data| in bytes. The contents of |data| will be copied. The
+ /// connection will be closed automatically after the response is sent.
+ ///
+ /*--cef()--*/
+ virtual void SendHttp200Response(const CefString& content_type,
+ const void* data,
+ size_t data_size) = 0;
+
+ ///
+ /// Send an HTTP 404 "Not Found" response. The connection will be closed
+ /// automatically after the response is sent.
+ ///
+ /*--cef()--*/
+ virtual void SendHttp404Response() = 0;
+
+ ///
+ /// Send an HTTP 500 "Internal Server Error" response. |error_message| is the
+ /// associated error message. The connection will be closed automatically
+ /// after the response is sent.
+ ///
+ /*--cef()--*/
+ virtual void SendHttp500Response(const CefString& error_message) = 0;
+
+ ///
+ /// Send a custom HTTP response. |response_code| is the HTTP response code
+ /// sent in the status line (e.g. 200). |content_type| is the response content
+ /// type (e.g. "text/html"). |data| is the response content and |data_size| is
+ /// the size of |data| in bytes. The contents of |data| will be copied.
+ /// |extra_headers| is an optional map of additional header key/value pairs.
+ /// The connection will be closed automatically after the response is sent.
+ ///
+ /*--cef(optional_param=extra_headers)--*/
+ virtual void SendHttpResponse(int response_code,
+ const CefString& content_type,
+ const void* data,
+ size_t data_size,
+ const HeaderMap& extra_headers) = 0;
+};
+
+#endif // CEF_INCLUDE_TEST_CEF_TEST_SERVER_H_