// 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 COMPONENTS_CRONET_CRONET_GLOBAL_STATE_H_
#define COMPONENTS_CRONET_CRONET_GLOBAL_STATE_H_

#include <memory>
#include <string>
#include "base/memory/scoped_refptr.h"
#include "base/sequenced_task_runner.h"

namespace net {
class NetLog;
class ProxyConfigService;
class ProxyResolutionService;
}  // namespace net

namespace cronet {

// Returns true when called on the initialization thread.
// May only be called after EnsureInitialized() has returned.
bool OnInitThread();

// Posts a task to run on initialization thread. Blocks until initialization
// thread is started.
void PostTaskToInitThread(const base::Location& posted_from,
                          base::OnceClosure task);

// Performs one-off initialization of Cronet global state, including creating,
// or binding to an existing thread, to run initialization and process
// network notifications on. The implementation must be thread-safe and
// idempotent, and must complete initialization before returning.
void EnsureInitialized();

// Creates a proxy config service appropriate for this platform that fetches the
// system proxy settings. Cronet will call this API only after a prior call
// to EnsureInitialized() has returned.
std::unique_ptr<net::ProxyConfigService> CreateProxyConfigService(
    const scoped_refptr<base::SequencedTaskRunner>& io_task_runner);

// Creates a proxy resolution service appropriate for this platform that fetches
// the system proxy settings. Cronet will call this API only after a prior call
// to EnsureInitialized() has returned.
std::unique_ptr<net::ProxyResolutionService> CreateProxyResolutionService(
    std::unique_ptr<net::ProxyConfigService> proxy_config_service,
    net::NetLog* net_log);

// Creates default User-Agent request value, combining optional
// |partial_user_agent| with system-dependent values. This API may be invoked
// before EnsureInitialized(), in which case it may trigger initialization
// itself, if necessary.
std::string CreateDefaultUserAgent(const std::string& partial_user_agent);

// Set network thread priority to |priority|. Must be called on the network
// thread. On Android, corresponds to android.os.Process.setThreadPriority()
// values. On iOS, corresponds to NSThread::setThreadPriority values.
void SetNetworkThreadPriorityOnNetworkThread(double priority);

}  // namespace cronet

#endif  // COMPONENTS_CRONET_CRONET_GLOBAL_STATE_H_
