// Copyright (c) 2011 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.
// Definition of helper functions for the Chrome Extensions Proxy Settings API.
#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PROXY_API_HELPERS_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PROXY_API_HELPERS_H_
#pragma once
#include <string>
#include "chrome/browser/prefs/proxy_prefs.h"
#include "net/proxy/proxy_config.h"
class DictionaryValue;
class ListValue;
class ProxyConfigDictionary;
namespace extension_proxy_api_helpers {
// Conversion between PAC scripts and data-encoding URLs containing these
// PAC scripts. Data-encoding URLs consist of a data:// prefix, a mime-type and
// base64 encoded text. The functions return true in case of success.
// CreatePACScriptFromDataURL should only be called on data-encoding urls
// created with CreateDataURLFromPACScript.
bool CreateDataURLFromPACScript(const std::string& pac_script,
std::string* pac_script_url_base64_encoded);
bool CreatePACScriptFromDataURL(
const std::string& pac_script_url_base64_encoded,
std::string* pac_script);
// Helper functions for extension->browser pref transformation:
// The following functions extract one piece of data from the |proxy_config|
// each. |proxy_config| is a ProxyConfig dictionary as defined in the
// extension API. All output values conform to the format expected by a
// ProxyConfigDictionary.
//
// - If there are NO entries for the respective pieces of data, the functions
// return true.
// - If there ARE entries and they could be parsed, the functions set |out|
// and return true.
// - If there are entries that could not be parsed, the functions set |error|
// and return false.
bool GetProxyModeFromExtensionPref(const DictionaryValue* proxy_config,
ProxyPrefs::ProxyMode* out,
std::string* error);
bool GetPacUrlFromExtensionPref(const DictionaryValue* proxy_config,
std::string* out,
std::string* error);
bool GetPacDataFromExtensionPref(const DictionaryValue* proxy_config,
std::string* out,
std::string* error);
bool GetProxyRulesStringFromExtensionPref(const DictionaryValue* proxy_config,
std::string* out,
std::string* error);
bool GetBypassListFromExtensionPref(const DictionaryValue* proxy_config,
std::string* out,
std::string* error);
// Creates and returns a ProxyConfig dictionary (as defined in the extension
// API) from the given parameters. Ownership is passed to the caller.
// Depending on the value of |mode_enum|, several of the strings may be empty.
DictionaryValue* CreateProxyConfigDict(ProxyPrefs::ProxyMode mode_enum,
const std::string& pac_url,
const std::string& pac_data,
const std::string& proxy_rules_string,
const std::string& bypass_list,
std::string* error);
// Converts a ProxyServer dictionary instance (as defined in the extension API)
// |proxy_server| to a net::ProxyServer.
// |default_scheme| is the default scheme that is filled in, in case the
// caller did not pass one.
// Returns true if successful and sets |error| otherwise.
bool GetProxyServer(const DictionaryValue* proxy_server,
net::ProxyServer::Scheme default_scheme,
net::ProxyServer* out,
std::string* error);
// Joins a list of URLs (stored as StringValues) in |list| with |joiner|
// to |out|. Returns true if successful and sets |error| otherwise.
bool JoinUrlList(ListValue* list,
const std::string& joiner,
std::string* out,
std::string* error);
// Helper functions for browser->extension pref transformation:
// Creates and returns a ProxyRules dictionary as defined in the extension API
// with the values of a ProxyConfigDictionary configured for fixed proxy
// servers. Returns NULL in case of failures. Ownership is passed to the caller.
DictionaryValue* CreateProxyRulesDict(
const ProxyConfigDictionary& proxy_config);
// Creates and returns a ProxyServer dictionary as defined in the extension API
// with values from a net::ProxyServer object. Never returns NULL. Ownership is
// passed to the caller.
DictionaryValue* CreateProxyServerDict(const net::ProxyServer& proxy);
// Creates and returns a PacScript dictionary as defined in the extension API
// with the values of a ProxyconfigDictionary configured for pac scripts.
// Returns NULL in case of failures. Ownership is passed to the caller.
DictionaryValue* CreatePacScriptDict(const ProxyConfigDictionary& proxy_config);
// Tokenizes the |in| at delimiters |delims| and returns a new ListValue with
// StringValues created from the tokens. Ownership is passed to the caller.
ListValue* TokenizeToStringList(const std::string& in,
const std::string& delims);
} // namespace extension_proxy_api_helpers
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PROXY_API_HELPERS_H_