// 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_
