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)#include "base/base_paths.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 95e3f23d412006dc4db4e659864679f29341e113fTorne (Richard Coles)#include "base/strings/string_util.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/test/perf_time_logger.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/dns/mock_host_resolver.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_info.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_resolver_v8.h" 15b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_resolver_winhttp.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/proxy/proxy_resolver_mac.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This class holds the URL to use for resolving, and the expected result. 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// We track the expected result in order to make sure the performance 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// test is actually resolving URLs properly, otherwise the perf numbers 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// are meaningless :-) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PacQuery { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* query_url; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* expected_result; 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Entry listing which PAC scripts to load, and which URLs to try resolving. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// |queries| should be terminated by {NULL, NULL}. A sentinel is used 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// rather than a length, to simplify using initializer lists. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct PacPerfTest { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* pac_name; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PacQuery queries[100]; 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the actual number of entries in |queries| (assumes NULL sentinel). 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int NumQueries() const; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// List of performance tests. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static PacPerfTest kPerfTests[] = { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This test uses an ad-blocker PAC script. This script is very heavily 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // regular expression oriented, and has no dependencies on the current 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IP address, or DNS resolving of hosts. 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { "no-ads.pac", 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { // queries: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.google.com", "DIRECT"}, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.imdb.com/photos/cmsicons/x", "PROXY 0.0.0.0:3421"}, 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.imdb.com/x", "DIRECT"}, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.staples.com/", "DIRECT"}, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.staples.com/pixeltracker/x", "PROXY 0.0.0.0:3421"}, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.staples.com/pixel/x", "DIRECT"}, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.foobar.com", "DIRECT"}, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.foobarbaz.com/x/y/z", "DIRECT"}, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.testurl1.com/index.html", "DIRECT"}, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"http://www.testurl2.com", "DIRECT"}, 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {"https://www.sample/pirate/arrrrrr", "DIRECT"}, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) {NULL, NULL} 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int PacPerfTest::NumQueries() const { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(queries); ++i) { 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (queries[i].query_url == NULL) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return i; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); // Bad definition. 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The number of URLs to resolve when testing a PAC script. 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kNumIterations = 500; 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Helper class to run through all the performance tests using the specified 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// proxy resolver implementation. 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PacPerfSuiteRunner { 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |resolver_name| is the label used when logging the results. 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PacPerfSuiteRunner(net::ProxyResolver* resolver, 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& resolver_name) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : resolver_(resolver), 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) resolver_name_(resolver_name), 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_( 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::TYPE_HTTP, 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer::kLocalhost, 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath( 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("net/data/proxy_resolver_perftest"))) { 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunAllTests() { 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server_.Start()); 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < arraysize(kPerfTests); ++i) { 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PacPerfTest& test_data = kPerfTests[i]; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RunTest(test_data.pac_name, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data.queries, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_data.NumQueries()); 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RunTest(const std::string& script_name, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PacQuery* queries, 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int queries_len) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!resolver_->expects_pac_bytes()) { 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL pac_url = 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) test_server_.GetURL(std::string("files/") + script_name); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rv = resolver_->SetPacScript( 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyResolverScriptData::FromURL(pac_url), 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CompletionCallback()); 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(net::OK, rv); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LoadPacScriptIntoResolver(script_name); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Do a query to warm things up. In the case of internal-fetch proxy 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // resolvers, the first resolve will be slow since it has to download 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the PAC script. 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyInfo proxy_info; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = resolver_->GetProxyForURL( 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL("http://www.warmup.com"), &proxy_info, net::CompletionCallback(), 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL, net::BoundNetLog()); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(net::OK, result); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start the perf timer. 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string perf_test_name = resolver_name_ + "_" + script_name; 133d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::PerfTimeLogger timer(perf_test_name.c_str()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < kNumIterations; ++i) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Round-robin between URLs to resolve. 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PacQuery& query = queries[i % queries_len]; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Resolve. 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyInfo proxy_info; 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = resolver_->GetProxyForURL( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL(query.query_url), &proxy_info, net::CompletionCallback(), NULL, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::BoundNetLog()); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check that the result was correct. Note that ToPacString() and 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ASSERT_EQ() are fast, so they won't skew the results. 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(net::OK, result); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(query.expected_result, proxy_info.ToPacString()); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Print how long the test ran for. 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) timer.Done(); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Read the PAC script from disk and initialize the proxy resolver with it. 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void LoadPacScriptIntoResolver(const std::string& script_name) { 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath path; 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(base::DIR_SOURCE_ROOT, &path); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.AppendASCII("net"); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.AppendASCII("data"); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.AppendASCII("proxy_resolver_perftest"); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) path = path.AppendASCII(script_name); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to read the file from disk. 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string file_contents; 16658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) bool ok = base::ReadFileToString(path, &file_contents); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // If we can't load the file from disk, something is misconfigured. 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LOG_IF(ERROR, !ok) << "Failed to read file: " << path.value(); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(ok); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Load the PAC script into the ProxyResolver. 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int rv = resolver_->SetPacScript( 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyResolverScriptData::FromUTF8(file_contents), 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::CompletionCallback()); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(net::OK, rv); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyResolver* resolver_; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string resolver_name_; 181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) net::SpawnedTestServer test_server_; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyResolverPerfTest, ProxyResolverWinHttp) { 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyResolverWinHttp resolver; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PacPerfSuiteRunner runner(&resolver, "ProxyResolverWinHttp"); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner.RunAllTests(); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyResolverPerfTest, ProxyResolverMac) { 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ProxyResolverMac resolver; 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PacPerfSuiteRunner runner(&resolver, "ProxyResolverMac"); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner.RunAllTests(); 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class MockJSBindings : public net::ProxyResolverV8::JSBindings { 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockJSBindings() {} 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 202c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void Alert(const base::string16& message) OVERRIDE { 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(false); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool ResolveDns(const std::string& host, 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ResolveDnsOperation op, 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string* output, 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool* terminate) OVERRIDE { 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(false); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return false; 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 214c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void OnError(int line_number, 215c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::string16& message) OVERRIDE { 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CHECK(false); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST(ProxyResolverPerfTest, ProxyResolverV8) { 221c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch net::ProxyResolverV8::EnsureIsolateCreated(); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockJSBindings js_bindings; 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) net::ProxyResolverV8 resolver; 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) resolver.set_js_bindings(&js_bindings); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PacPerfSuiteRunner runner(&resolver, "ProxyResolverV8"); 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) runner.RunAllTests(); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 229