// Copyright 2013 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 PPAPI_CPP_NETWORK_PROXY_H_
#define PPAPI_CPP_NETWORK_PROXY_H_

#include <stdint.h>

#include <string>

#include "ppapi/cpp/completion_callback.h"
#include "ppapi/cpp/instance_handle.h"

namespace pp {

/// This class provides a way to determine the appropriate proxy settings for
/// for a given URL.
///
/// Permissions: Apps permission <code>socket</code> with subrule
/// <code>resolve-proxy</code> is required for using this API.
/// For more details about network communication permissions, please see:
/// http://developer.chrome.com/apps/app_network.html
class NetworkProxy {
 public:
  /// Returns true if the browser supports this API, false otherwise.
  static bool IsAvailable();

  /// Retrieves the proxy that will be used for the given URL. The result will
  /// be a string in PAC format. For more details about PAC format, please see
  /// http://en.wikipedia.org/wiki/Proxy_auto-config
  ///
  /// @param[in] instance An <code>InstanceHandle</code> identifying one
  /// instance of a module.
  ///
  /// @param[in] url A string <code>Var</code> containing a URL.
  ///
  /// @param[in] callback A <code>CompletionCallbackWithOutput</code> to be
  /// called upon completion. It will be passed a string <code>Var</code>
  /// containing the appropriate PAC string for <code>url</code>.
  ///
  /// @return An int32_t containing an error code from <code>pp_errors.h</code>.
  static int32_t GetProxyForURL(
      const InstanceHandle& instance,
      const Var& url,
      const pp::CompletionCallbackWithOutput<Var>& callback);
};

}  // namespace pp

#endif  // PPAPI_CPP_NETWORK_PROXY_H_
