// Copyright 2017 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 #include "base/run_loop.h" #include "base/test/bind.h" #include "ios/web/public/test/fakes/fake_browser_state.h" #import "ios/web/public/test/web_test.h" #import "ios/web/public/web_client.h" #include "net/test/embedded_test_server/embedded_test_server.h" #include "net/traffic_annotation/network_traffic_annotation_test_helper.h" #include "services/network/public/cpp/resource_request.h" #include "services/network/public/cpp/simple_url_loader.h" #include "services/network/public/mojom/url_response_head.mojom.h" #if !defined(__has_feature) || !__has_feature(objc_arc) #error "This file requires ARC support." #endif namespace web { class URLLoaderTest : public WebTest { protected: URLLoaderTest() : WebTest(WebTaskEnvironment::Options::IO_MAINLOOP) {} protected: net::EmbeddedTestServer server_; }; // Tests that basic URLLoader wrapper works. TEST_F(URLLoaderTest, Basic) { server_.AddDefaultHandlers(FILE_PATH_LITERAL(base::FilePath())); ASSERT_TRUE(server_.Start()); std::unique_ptr request = std::make_unique(); request->url = server_.GetURL("/echo"); // Adds kCorsExemptHeaderName into the cors_exempt_headers, that use should be // allowed by FakeBrowserState. If BrowserState implementation does not // permit to use this header in |cors_exempt_headers| explicitly, the request // fails with net::ERR_INVALID_ARGUMENT. request->cors_exempt_headers.SetHeader( FakeBrowserState::kCorsExemptTestHeaderName, "Test"); auto loader = network::SimpleURLLoader::Create(std::move(request), TRAFFIC_ANNOTATION_FOR_TESTS); std::string result; base::RunLoop run_loop; loader->DownloadToStringOfUnboundedSizeUntilCrashAndDie( GetBrowserState()->GetURLLoaderFactory(), base::BindLambdaForTesting( [&](std::unique_ptr response_body) { if (response_body) result = *response_body; run_loop.Quit(); })); run_loop.Run(); EXPECT_EQ(0, loader->NetError()); EXPECT_EQ(result, "Echo"); auto* response_info = loader->ResponseInfo(); ASSERT_TRUE(!!response_info); ASSERT_TRUE(!!response_info->headers); EXPECT_EQ(200, response_info->headers->response_code()); } } // namespace web