// 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 #include #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 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 io_task_runner_; // Core runs on |io_task_runner_|. It's responsible for sending the request // and reading the response. std::unique_ptr 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 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_