| // Copyright 2017 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 NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_SPAWNER_REQUEST_H_ | |
| #define NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_SPAWNER_REQUEST_H_ | |
| #include <memory> | |
| #include <string> | |
| #include "base/macros.h" | |
| #include "base/memory/ref_counted.h" | |
| #include "base/threading/thread_checker.h" | |
| class GURL; | |
| namespace base { | |
| class SingleThreadTaskRunner; | |
| } // namespace base | |
| namespace net { | |
| class ScopedPortException; | |
| // RemoteTestServerSpawnerRequest is used by RemoteTestServer to send a request | |
| // to the test server spawner. | |
| class RemoteTestServerSpawnerRequest { | |
| public: | |
| // Queries the specified URL. If |post_data| is empty then a GET request is | |
| // sent. Otherwise |post_data| must be a json blob which is sent as a POST | |
| // request body. | |
| RemoteTestServerSpawnerRequest( | |
| scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | |
| const GURL& url, | |
| const std::string& post_data); | |
| ~RemoteTestServerSpawnerRequest(); | |
| // Blocks until request is finished. If |response| isn't nullptr then server | |
| // response is copied to *response. Returns true if the request was completed | |
| // successfully. | |
| bool WaitForCompletion(std::string* response) WARN_UNUSED_RESULT; | |
| private: | |
| class Core; | |
| scoped_refptr<base::SingleThreadTaskRunner> io_task_runner_; | |
| // Core runs on |io_task_runner_|. It's responsible for sending the request | |
| // and reading the response. | |
| std::unique_ptr<Core> core_; | |
| // Helper to add spawner port to the list of the globally explicitly allowed | |
| // ports. It needs to be here instead of in Core because ScopedPortException | |
| // is not thread-safe. | |
| std::unique_ptr<ScopedPortException> allowed_port_; | |
| THREAD_CHECKER(thread_checker_); | |
| DISALLOW_COPY_AND_ASSIGN(RemoteTestServerSpawnerRequest); | |
| }; | |
| } // namespace net | |
| #endif // NET_TEST_SPAWNED_TEST_SERVER_REMOTE_TEST_SERVER_SPAWNER_REQUEST_H_ |