1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Definition of helper functions for the Chrome Extensions Proxy Settings API. 6 7#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_PROXY_API_HELPERS_H_ 8#define CHROME_BROWSER_EXTENSIONS_EXTENSION_PROXY_API_HELPERS_H_ 9#pragma once 10 11#include <string> 12 13#include "chrome/browser/prefs/proxy_prefs.h" 14#include "net/proxy/proxy_config.h" 15 16class DictionaryValue; 17class ListValue; 18class ProxyConfigDictionary; 19 20namespace extension_proxy_api_helpers { 21 22// Conversion between PAC scripts and data-encoding URLs containing these 23// PAC scripts. Data-encoding URLs consist of a data:// prefix, a mime-type and 24// base64 encoded text. The functions return true in case of success. 25// CreatePACScriptFromDataURL should only be called on data-encoding urls 26// created with CreateDataURLFromPACScript. 27bool CreateDataURLFromPACScript(const std::string& pac_script, 28 std::string* pac_script_url_base64_encoded); 29bool CreatePACScriptFromDataURL( 30 const std::string& pac_script_url_base64_encoded, 31 std::string* pac_script); 32 33// Helper functions for extension->browser pref transformation: 34 35// The following functions extract one piece of data from the |proxy_config| 36// each. |proxy_config| is a ProxyConfig dictionary as defined in the 37// extension API. All output values conform to the format expected by a 38// ProxyConfigDictionary. 39// 40// - If there are NO entries for the respective pieces of data, the functions 41// return true. 42// - If there ARE entries and they could be parsed, the functions set |out| 43// and return true. 44// - If there are entries that could not be parsed, the functions set |error| 45// and return false. 46bool GetProxyModeFromExtensionPref(const DictionaryValue* proxy_config, 47 ProxyPrefs::ProxyMode* out, 48 std::string* error); 49bool GetPacUrlFromExtensionPref(const DictionaryValue* proxy_config, 50 std::string* out, 51 std::string* error); 52bool GetPacDataFromExtensionPref(const DictionaryValue* proxy_config, 53 std::string* out, 54 std::string* error); 55bool GetProxyRulesStringFromExtensionPref(const DictionaryValue* proxy_config, 56 std::string* out, 57 std::string* error); 58bool GetBypassListFromExtensionPref(const DictionaryValue* proxy_config, 59 std::string* out, 60 std::string* error); 61 62// Creates and returns a ProxyConfig dictionary (as defined in the extension 63// API) from the given parameters. Ownership is passed to the caller. 64// Depending on the value of |mode_enum|, several of the strings may be empty. 65DictionaryValue* CreateProxyConfigDict(ProxyPrefs::ProxyMode mode_enum, 66 const std::string& pac_url, 67 const std::string& pac_data, 68 const std::string& proxy_rules_string, 69 const std::string& bypass_list, 70 std::string* error); 71 72// Converts a ProxyServer dictionary instance (as defined in the extension API) 73// |proxy_server| to a net::ProxyServer. 74// |default_scheme| is the default scheme that is filled in, in case the 75// caller did not pass one. 76// Returns true if successful and sets |error| otherwise. 77bool GetProxyServer(const DictionaryValue* proxy_server, 78 net::ProxyServer::Scheme default_scheme, 79 net::ProxyServer* out, 80 std::string* error); 81 82// Joins a list of URLs (stored as StringValues) in |list| with |joiner| 83// to |out|. Returns true if successful and sets |error| otherwise. 84bool JoinUrlList(ListValue* list, 85 const std::string& joiner, 86 std::string* out, 87 std::string* error); 88 89 90// Helper functions for browser->extension pref transformation: 91 92// Creates and returns a ProxyRules dictionary as defined in the extension API 93// with the values of a ProxyConfigDictionary configured for fixed proxy 94// servers. Returns NULL in case of failures. Ownership is passed to the caller. 95DictionaryValue* CreateProxyRulesDict( 96 const ProxyConfigDictionary& proxy_config); 97 98// Creates and returns a ProxyServer dictionary as defined in the extension API 99// with values from a net::ProxyServer object. Never returns NULL. Ownership is 100// passed to the caller. 101DictionaryValue* CreateProxyServerDict(const net::ProxyServer& proxy); 102 103// Creates and returns a PacScript dictionary as defined in the extension API 104// with the values of a ProxyconfigDictionary configured for pac scripts. 105// Returns NULL in case of failures. Ownership is passed to the caller. 106DictionaryValue* CreatePacScriptDict(const ProxyConfigDictionary& proxy_config); 107 108// Tokenizes the |in| at delimiters |delims| and returns a new ListValue with 109// StringValues created from the tokens. Ownership is passed to the caller. 110ListValue* TokenizeToStringList(const std::string& in, 111 const std::string& delims); 112 113} // namespace extension_proxy_api_helpers 114 115#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_PROXY_API_HELPERS_H_ 116