diff options
Diffstat (limited to 'tests/ceftests/test_server_manager.h')
-rw-r--r-- | tests/ceftests/test_server_manager.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/tests/ceftests/test_server_manager.h b/tests/ceftests/test_server_manager.h new file mode 100644 index 00000000..30d6c652 --- /dev/null +++ b/tests/ceftests/test_server_manager.h @@ -0,0 +1,101 @@ +// Copyright (c) 2020 The Chromium Embedded Framework 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 CEF_TESTS_CEFTESTS_TEST_SERVER_MANAGER_H_ +#define CEF_TESTS_CEFTESTS_TEST_SERVER_MANAGER_H_ +#pragma once + +#include <string> +#include <vector> + +#include "include/base/cef_callback.h" +#include "include/cef_registration.h" +#include "include/cef_request.h" +#include "include/cef_response.h" +#include "tests/ceftests/test_server_observer.h" +#include "tests/ceftests/test_server_runner.h" + +namespace test_server { + +class ObserverRegistration; + +// Static methods are safe to call on any thread. Non-static methods are only +// called on the UI thread. Deletes itself after the server is stopped. Use +// ObserverHelper instead of calling these methods directly. +class Manager : public Runner::Delegate { + public: + using StartDoneCallback = + base::OnceCallback<void(const std::string& server_origin)>; + using DoneCallback = base::OnceClosure; + + // Starts the server if it is not currently running, and executes |callback| + // on the UI thread. + static void Start(StartDoneCallback callback, bool https_server); + + // Stops the server if it is currently running, and executes |callback| on the + // UI thread. This method will be called by the test framework on shutdown. + static void Stop(DoneCallback callback, bool https_server); + + // Add an observer for server callbacks. Remains registered until the returned + // CefRegistration object is destroyed. Registered observers will be executed + // in the order of registration until one returns true to indicate that it + // handled the callback. |callback| will be executed on the UI thread after + // registration is complete. + static CefRefPtr<CefRegistration> AddObserver(Observer* observer, + DoneCallback callback, + bool https_server); + + // Combination of AddObserver() followed by Start(). + static CefRefPtr<CefRegistration> AddObserverAndStart( + Observer* observer, + StartDoneCallback callback, + bool https_server); + + // Returns the origin for an existing server. + static std::string GetOrigin(bool https_server); + + private: + friend class ObserverRegistration; + + explicit Manager(bool https_server); + ~Manager(); + + static Manager* GetInstance(bool https_server); + static Manager* GetOrCreateInstance(bool https_server); + + void StartImpl(StartDoneCallback callback); + void StopImpl(DoneCallback callback); + + void AddObserver(Observer* observer); + void RemoveObserver(Observer* observer, DoneCallback callback); + + // Runner::Delegate methods: + void OnServerCreated(const std::string& server_origin) override; + void OnServerDestroyed() override; + void OnServerHandlerDeleted() override; + void OnTestServerRequest(CefRefPtr<CefRequest> request, + const ResponseCallback& response_callback) override; + + private: + const bool https_server_; + + std::unique_ptr<Runner> runner_; + std::string origin_; + + using StartDoneCallbackList = std::vector<StartDoneCallback>; + StartDoneCallbackList start_callback_list_; + + DoneCallback stop_callback_; + + using ObserverList = std::vector<Observer*>; + ObserverList observer_list_; + + bool stopping_ = false; + + DISALLOW_COPY_AND_ASSIGN(Manager); +}; + +} // namespace test_server + +#endif // CEF_TESTS_CEFTESTS_TEST_SERVER_MANAGER_H_ |