15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Unit tests for helper functions for the Chrome Extensions Proxy Settings API. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/values.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/proxy/proxy_api_constants.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/proxy/proxy_api_helpers.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/proxy_config_dictionary.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/prefs/proxy_prefs.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace keys = proxy_api_constants; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSamplePacScript[] = "test"; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSamplePacScriptAsDataUrl[] = 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "data:application/x-ns-proxy-autoconfig;base64,dGVzdA=="; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSamplePacScriptAsDataUrl2[] = 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "data:;base64,dGVzdA=="; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kSamplePacScriptUrl[] = "http://wpad/wpad.dat"; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper function to create a ProxyServer dictionary as defined in the 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extension API. 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* CreateTestProxyServerDict(const std::string& host) { 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* dict = new base::DictionaryValue; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(keys::kProxyConfigRuleHost, host); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dict; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper function to create a ProxyServer dictionary as defined in the 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// extension API. 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochbase::DictionaryValue* CreateTestProxyServerDict(const std::string& schema, 39eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const std::string& host, 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int port) { 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* dict = new base::DictionaryValue; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(keys::kProxyConfigRuleScheme, schema); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetString(keys::kProxyConfigRuleHost, host); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dict->SetInteger(keys::kProxyConfigRulePort, port); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dict; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace proxy_api_helpers { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreateDataURLFromPACScript) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreateDataURLFromPACScript(kSamplePacScript, &out)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kSamplePacScriptAsDataUrl, out); 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreatePACScriptFromDataURL) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verify deserialization of a PAC data:// URL that we created ourselves. 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreatePACScriptFromDataURL(kSamplePacScriptAsDataUrl, &out)); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kSamplePacScript, out); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that we don't require a mime-type. 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(CreatePACScriptFromDataURL(kSamplePacScriptAsDataUrl2, &out)); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kSamplePacScript, out); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(CreatePACScriptFromDataURL("http://www.google.com", &out)); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, GetProxyModeFromExtensionPref) { 72eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue proxy_config; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyMode mode; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test positive case. 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.SetString( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys::kProxyConfigMode, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_DIRECT)); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(GetProxyModeFromExtensionPref(&proxy_config, &mode, &error, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ProxyPrefs::MODE_DIRECT, mode); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test negative case. 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.SetString(keys::kProxyConfigMode, "foobar"); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(GetProxyModeFromExtensionPref(&proxy_config, &mode, &error, 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(bad_message); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do not test |error|, as an invalid enumeration value is considered an 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // internal error. It should be filtered by the extensions API. 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, GetPacUrlFromExtensionPref) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue proxy_config; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.SetString( 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys::kProxyConfigMode, 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT)); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently we are still missing a PAC script entry. 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is silently ignored. 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), out); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up a pac script. 116eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* pacScriptDict = new base::DictionaryValue; 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScriptDict->SetString(keys::kProxyConfigPacScriptUrl, kSamplePacScriptUrl); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.Set(keys::kProxyConfigPacScript, pacScriptDict); 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(GetPacUrlFromExtensionPref(&proxy_config, &out, &error, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kSamplePacScriptUrl, out); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, GetPacDataFromExtensionPref) { 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue proxy_config; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.SetString( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys::kProxyConfigMode, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_PAC_SCRIPT)); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently we are still missing a PAC data entry. This is silently ignored. 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), out); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Set up a PAC script. 145eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* pacScriptDict = new base::DictionaryValue; 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pacScriptDict->SetString(keys::kProxyConfigPacScriptData, kSamplePacScript); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.Set(keys::kProxyConfigPacScript, pacScriptDict); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(GetPacDataFromExtensionPref(&proxy_config, &out, &error, 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kSamplePacScript, out); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, GetProxyRulesStringFromExtensionPref) { 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue proxy_config; 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.SetString( 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys::kProxyConfigMode, 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently we are still missing a proxy config entry. 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is silently ignored. 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), out); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* proxy_rules = new base::DictionaryValue; 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_rules->Set(keys::field_name[1], CreateTestProxyServerDict("proxy1")); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_rules->Set(keys::field_name[2], CreateTestProxyServerDict("proxy2")); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.Set(keys::kProxyConfigRules, proxy_rules); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProxyRulesStringFromExtensionPref(&proxy_config, &out, &error, 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("http=proxy1:80;https=proxy2:80", out); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, GetBypassListFromExtensionPref) { 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 192eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue proxy_config; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.SetString( 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) keys::kProxyConfigMode, 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyPrefs::ProxyModeToString(ProxyPrefs::MODE_FIXED_SERVERS)); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Currently we are still missing a proxy config entry. 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is silently ignored. 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBypassListFromExtensionPref(&proxy_config, &out, &error, 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), out); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 206eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue* bypass_list = new base::ListValue; 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bypass_list->Append(new base::StringValue("host1")); 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bypass_list->Append(new base::StringValue("host2")); 209eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue* proxy_rules = new base::DictionaryValue; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_rules->Set(keys::kProxyConfigBypassList, bypass_list); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_config.Set(keys::kProxyConfigRules, proxy_rules); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetBypassListFromExtensionPref(&proxy_config, &out, &error, 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &bad_message)); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("host1,host2", out); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreateProxyConfigDict) { 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 223eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> exp_direct( 224eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ProxyConfigDictionary::CreateDirect()); 225eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> out_direct( 226c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProxyConfigDict(ProxyPrefs::MODE_DIRECT, 227c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 228c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 229c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 230c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 231c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &error)); 2335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(exp_direct.get(), out_direct.get())); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 235eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> exp_auto( 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreateAutoDetect()); 237eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> out_auto( 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProxyConfigDict(ProxyPrefs::MODE_AUTO_DETECT, 239c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &error)); 2455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(exp_auto.get(), out_auto.get())); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 247eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> exp_pac_url( 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false)); 249eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> out_pac_url( 250c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProxyConfigDict(ProxyPrefs::MODE_PAC_SCRIPT, 251c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 252c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kSamplePacScriptUrl, 253c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 254c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 2575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(exp_pac_url.get(), out_pac_url.get())); 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> exp_pac_data( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreatePacScript(kSamplePacScriptAsDataUrl, false)); 261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> out_pac_data( 262c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProxyConfigDict(ProxyPrefs::MODE_PAC_SCRIPT, 263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) kSamplePacScript, 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 2695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(exp_pac_data.get(), out_pac_data.get())); 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> exp_fixed( 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreateFixedServers("foo:80", "localhost")); 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> out_fixed( 274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProxyConfigDict(ProxyPrefs::MODE_FIXED_SERVERS, 275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "foo:80", 279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) "localhost", 280c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &error)); 2815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(exp_fixed.get(), out_fixed.get())); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> exp_system( 284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ProxyConfigDictionary::CreateSystem()); 285eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> out_system( 286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateProxyConfigDict(ProxyPrefs::MODE_SYSTEM, 287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 291c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) std::string(), 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &error)); 2935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(exp_system.get(), out_system.get())); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Neither of them should have set an error. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(std::string(), error); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, GetProxyServer) { 300eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::DictionaryValue proxy_server_dict; 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyServer created; 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test simplest case, no schema nor port specified --> defaults are used. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_server_dict.SetString(keys::kProxyConfigRuleHost, "proxy_server"); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProxyServer(&proxy_server_dict, net::ProxyServer::SCHEME_HTTP, 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &created, &error, &bad_message)); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("PROXY proxy_server:80", created.ToPacString()); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Test complete case. 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_server_dict.SetString(keys::kProxyConfigRuleScheme, "socks4"); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) proxy_server_dict.SetInteger(keys::kProxyConfigRulePort, 1234); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE( 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetProxyServer(&proxy_server_dict, net::ProxyServer::SCHEME_HTTP, 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &created, &error, &bad_message)); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("SOCKS proxy_server:1234", created.ToPacString()); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, JoinUrlList) { 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool bad_message = false; 325eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue list; 3263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list.Append(new base::StringValue("s1")); 3273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list.Append(new base::StringValue("s2")); 3283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) list.Append(new base::StringValue("s3")); 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string out; 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string error; 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(JoinUrlList(&list, ";", &out, &error, &bad_message)); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ("s1;s2;s3", out); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(bad_message); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This tests CreateProxyServerDict as well. 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreateProxyRulesDict) { 339eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> browser_pref( 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreateFixedServers( 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "http=proxy1:80;https=proxy2:80;ftp=proxy3:80;socks=proxy4:80", 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "localhost")); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary config(browser_pref.get()); 344eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> extension_pref( 345eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CreateProxyRulesDict(config)); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_pref.get()); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 348eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> expected(new base::DictionaryValue); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->Set("proxyForHttp", 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestProxyServerDict("http", "proxy1", 80)); 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->Set("proxyForHttps", 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestProxyServerDict("http", "proxy2", 80)); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->Set("proxyForFtp", 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestProxyServerDict("http", "proxy3", 80)); 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->Set("fallbackProxy", 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CreateTestProxyServerDict("socks4", "proxy4", 80)); 357eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue* bypass_list = new base::ListValue; 3583551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bypass_list->Append(new base::StringValue("localhost")); 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected->Set(keys::kProxyConfigBypassList, bypass_list); 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Test multiple proxies per scheme -- expect that only the first is returned. 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreateProxyRulesDictMultipleProxies) { 366eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> browser_pref( 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyConfigDictionary::CreateFixedServers( 3682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "http=proxy1:80,default://;https=proxy2:80,proxy1:80;ftp=proxy3:80," 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "https://proxy5:443;socks=proxy4:80,proxy1:80", 3702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) "localhost")); 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ProxyConfigDictionary config(browser_pref.get()); 372eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> extension_pref( 373eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch CreateProxyRulesDict(config)); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extension_pref.get()); 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 376eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> expected(new base::DictionaryValue); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected->Set("proxyForHttp", 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestProxyServerDict("http", "proxy1", 80)); 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected->Set("proxyForHttps", 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestProxyServerDict("http", "proxy2", 80)); 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected->Set("proxyForFtp", 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestProxyServerDict("http", "proxy3", 80)); 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) expected->Set("fallbackProxy", 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateTestProxyServerDict("socks4", "proxy4", 80)); 385eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue* bypass_list = new base::ListValue; 3863551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bypass_list->Append(new base::StringValue("localhost")); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->Set(keys::kProxyConfigBypassList, bypass_list); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test if a PAC script URL is specified. 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreatePacScriptDictWithUrl) { 394eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> browser_pref( 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreatePacScript(kSamplePacScriptUrl, false)); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary config(browser_pref.get()); 397eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> extension_pref(CreatePacScriptDict(config)); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_pref.get()); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 400eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> expected(new base::DictionaryValue); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->SetString(keys::kProxyConfigPacScriptUrl, kSamplePacScriptUrl); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->SetBoolean(keys::kProxyConfigPacScriptMandatory, false); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Test if a PAC script is encoded in a data URL. 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, CreatePacScriptDictWidthData) { 409eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> browser_pref( 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary::CreatePacScript(kSamplePacScriptAsDataUrl, false)); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ProxyConfigDictionary config(browser_pref.get()); 412eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> extension_pref(CreatePacScriptDict(config)); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(extension_pref.get()); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::DictionaryValue> expected(new base::DictionaryValue); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->SetString(keys::kProxyConfigPacScriptData, kSamplePacScript); 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) expected->SetBoolean(keys::kProxyConfigPacScriptMandatory, false); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(expected.get(), extension_pref.get())); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ExtensionProxyApiHelpers, TokenizeToStringList) { 423eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::ListValue expected; 4243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected.Append(new base::StringValue("s1")); 4253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected.Append(new base::StringValue("s2")); 4263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) expected.Append(new base::StringValue("s3")); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 428eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch scoped_ptr<base::ListValue> out(TokenizeToStringList("s1;s2;s3", ";")); 4295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(base::Value::Equals(&expected, out.get())); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace proxy_api_helpers 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 434