// Copyright (c) 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. #include "ppapi/tests/test_network_proxy.h" #include "ppapi/cpp/instance.h" #include "ppapi/cpp/network_proxy.h" #include "ppapi/cpp/var.h" #include "ppapi/tests/testing_instance.h" REGISTER_TEST_CASE(NetworkProxy); TestNetworkProxy::TestNetworkProxy(TestingInstance* instance) : TestCase(instance) { } void TestNetworkProxy::RunTests(const std::string& filter) { RUN_CALLBACK_TEST(TestNetworkProxy, GetProxyForURL, filter); } std::string TestNetworkProxy::TestGetProxyForURL() { TestCompletionCallbackWithOutput<pp::Var> callback(instance_->pp_instance(), callback_type()); callback.WaitForResult( pp::NetworkProxy::GetProxyForURL(instance_, pp::Var("http://127.0.0.1/foobar/"), callback.GetCallback())); CHECK_CALLBACK_BEHAVIOR(callback); ASSERT_EQ(PP_OK, callback.result()); pp::Var output = callback.output(); ASSERT_TRUE(output.is_string()); // Assume no one configures a proxy for localhost. ASSERT_EQ("DIRECT", callback.output().AsString()); callback.WaitForResult( pp::NetworkProxy::GetProxyForURL(instance_, pp::Var("http://www.google.com"), callback.GetCallback())); CHECK_CALLBACK_BEHAVIOR(callback); ASSERT_EQ(PP_OK, callback.result()); output = callback.output(); // Don't know what the proxy might be, but it should be a valid result. ASSERT_TRUE(output.is_string()); callback.WaitForResult( pp::NetworkProxy::GetProxyForURL(instance_, pp::Var("file:///tmp"), callback.GetCallback())); CHECK_CALLBACK_BEHAVIOR(callback); ASSERT_EQ(PP_OK, callback.result()); output = callback.output(); ASSERT_TRUE(output.is_string()); // Should get "DIRECT" for file:// URLs. ASSERT_EQ("DIRECT", output.AsString()); callback.WaitForResult( pp::NetworkProxy::GetProxyForURL(instance_, pp::Var("this isn't a url"), callback.GetCallback())); CHECK_CALLBACK_BEHAVIOR(callback); ASSERT_EQ(PP_ERROR_BADARGUMENT, callback.result()); ASSERT_TRUE(callback.output().is_undefined()); callback.WaitForResult( pp::NetworkProxy::GetProxyForURL(instance_, pp::Var(42), // non-string Var callback.GetCallback())); CHECK_CALLBACK_BEHAVIOR(callback); ASSERT_EQ(PP_ERROR_BADARGUMENT, callback.result()); ASSERT_TRUE(callback.output().is_undefined()); PASS(); }