| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 | 7 |
| 8 #include <algorithm> | 8 #include <algorithm> |
| 9 #include <memory> | 9 #include <memory> |
| 10 #include <set> | 10 #include <set> |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 #include "chrome/common/pref_names.h" | 29 #include "chrome/common/pref_names.h" |
| 30 #include "chrome/test/base/in_process_browser_test.h" | 30 #include "chrome/test/base/in_process_browser_test.h" |
| 31 #include "chrome/test/base/ui_test_utils.h" | 31 #include "chrome/test/base/ui_test_utils.h" |
| 32 #include "components/prefs/pref_service.h" | 32 #include "components/prefs/pref_service.h" |
| 33 #include "content/public/common/content_switches.h" | 33 #include "content/public/common/content_switches.h" |
| 34 #include "content/public/test/browser_test_utils.h" | 34 #include "content/public/test/browser_test_utils.h" |
| 35 #include "content/public/test/test_utils.h" | 35 #include "content/public/test/test_utils.h" |
| 36 #include "net/base/host_port_pair.h" | 36 #include "net/base/host_port_pair.h" |
| 37 #include "net/base/ip_endpoint.h" | 37 #include "net/base/ip_endpoint.h" |
| 38 #include "net/base/net_errors.h" | 38 #include "net/base/net_errors.h" |
| 39 #include "net/dns/host_resolver_proc.h" | |
| 40 #include "net/dns/mock_host_resolver.h" | 39 #include "net/dns/mock_host_resolver.h" |
| 41 #include "net/http/http_transaction_factory.h" | 40 #include "net/http/http_transaction_factory.h" |
| 42 #include "net/socket/stream_socket.h" | 41 #include "net/socket/stream_socket.h" |
| 43 #include "net/test/embedded_test_server/embedded_test_server.h" | 42 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 44 #include "net/test/embedded_test_server/embedded_test_server_connection_listener
.h" | 43 #include "net/test/embedded_test_server/embedded_test_server_connection_listener
.h" |
| 45 #include "net/test/embedded_test_server/http_request.h" | 44 #include "net/test/embedded_test_server/http_request.h" |
| 46 #include "net/test/embedded_test_server/http_response.h" | 45 #include "net/test/embedded_test_server/http_response.h" |
| 47 #include "net/test/url_request/url_request_failed_job.h" | 46 #include "net/test/url_request/url_request_failed_job.h" |
| 48 #include "net/url_request/url_request_context.h" | 47 #include "net/url_request/url_request_context.h" |
| 49 #include "net/url_request/url_request_context_getter.h" | 48 #include "net/url_request/url_request_context_getter.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 if (request.GetURL().path() != path) | 90 if (request.GetURL().path() != path) |
| 92 return nullptr; | 91 return nullptr; |
| 93 std::unique_ptr<net::test_server::BasicHttpResponse> response( | 92 std::unique_ptr<net::test_server::BasicHttpResponse> response( |
| 94 new net::test_server::BasicHttpResponse); | 93 new net::test_server::BasicHttpResponse); |
| 95 response->set_code(net::HTTP_MOVED_PERMANENTLY); | 94 response->set_code(net::HTTP_MOVED_PERMANENTLY); |
| 96 response->AddCustomHeader("Location", redirect_url.spec()); | 95 response->AddCustomHeader("Location", redirect_url.spec()); |
| 97 return std::move(response); | 96 return std::move(response); |
| 98 } | 97 } |
| 99 | 98 |
| 100 const char kBlinkPreconnectFeature[] = "LinkPreconnect"; | 99 const char kBlinkPreconnectFeature[] = "LinkPreconnect"; |
| 101 const char kChromiumUrl[] = "http://chromium.org"; | |
| 102 const char kInvalidLongUrl[] = | |
| 103 "http://" | |
| 104 "illegally-long-hostname-over-255-characters-should-not-send-an-ipc-" | |
| 105 "message-to-the-browser-" | |
| 106 "00000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 107 "00000000000000000000000000000000000000000000000000000000000000000000000000" | |
| 108 "0000000000000000000000000000000000000000000000000000.org"; | |
| 109 | 100 |
| 110 // Gets notified by the EmbeddedTestServer on incoming connections being | 101 // Gets notified by the EmbeddedTestServer on incoming connections being |
| 111 // accepted or read from, keeps track of them and exposes that info to | 102 // accepted or read from, keeps track of them and exposes that info to |
| 112 // the tests. | 103 // the tests. |
| 113 // A port being reused is currently considered an error. If a test | 104 // A port being reused is currently considered an error. If a test |
| 114 // needs to verify multiple connections are opened in sequence, that will need | 105 // needs to verify multiple connections are opened in sequence, that will need |
| 115 // to be changed. | 106 // to be changed. |
| 116 class ConnectionListener | 107 class ConnectionListener |
| 117 : public net::test_server::EmbeddedTestServerConnectionListener { | 108 : public net::test_server::EmbeddedTestServerConnectionListener { |
| 118 public: | 109 public: |
| (...skipping 1259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1378 // inspecting that the Predictor starts making the expected hostname requests. | 1369 // inspecting that the Predictor starts making the expected hostname requests. |
| 1379 PrepareFrameSubresources(referring_url_); | 1370 PrepareFrameSubresources(referring_url_); |
| 1380 observer()->WaitUntilHostLookedUp(target_url_); | 1371 observer()->WaitUntilHostLookedUp(target_url_); |
| 1381 | 1372 |
| 1382 // Verify that both urls were requested by the predictor. Note that the | 1373 // Verify that both urls were requested by the predictor. Note that the |
| 1383 // startup URL may be requested before the observer attaches itself. | 1374 // startup URL may be requested before the observer attaches itself. |
| 1384 ExpectUrlRequestedFromPredictor(startup_url_); | 1375 ExpectUrlRequestedFromPredictor(startup_url_); |
| 1385 EXPECT_FALSE(observer()->HostFound(target_url_)); | 1376 EXPECT_FALSE(observer()->HostFound(target_url_)); |
| 1386 } | 1377 } |
| 1387 | 1378 |
| 1388 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, DnsPrefetch) { | |
| 1389 // Navigate once to make sure all initial hostnames are requested. | |
| 1390 ui_test_utils::NavigateToURL(browser(), | |
| 1391 embedded_test_server()->GetURL("/title1.html")); | |
| 1392 | |
| 1393 size_t hosts_looked_up_before_load = observer()->TotalHostsLookedUp(); | |
| 1394 | |
| 1395 ui_test_utils::NavigateToURL(browser(), embedded_test_server()->GetURL( | |
| 1396 "/predictor/dns_prefetch.html")); | |
| 1397 observer()->WaitUntilHostLookedUp(GURL(kChromiumUrl)); | |
| 1398 ASSERT_FALSE(observer()->HasHostBeenLookedUp(GURL(kInvalidLongUrl))); | |
| 1399 | |
| 1400 EXPECT_FALSE(observer()->HostFound(GURL(kChromiumUrl))); | |
| 1401 ASSERT_EQ(hosts_looked_up_before_load + 1, observer()->TotalHostsLookedUp()); | |
| 1402 } | |
| 1403 | |
| 1404 // Tests that preconnect warms up a socket connection to a test server. | 1379 // Tests that preconnect warms up a socket connection to a test server. |
| 1405 // Note: This test uses a data URI to serve the preconnect hint, to make sure | 1380 // Note: This test uses a data URI to serve the preconnect hint, to make sure |
| 1406 // that the network stack doesn't just re-use its connection to the test server. | 1381 // that the network stack doesn't just re-use its connection to the test server. |
| 1382 // TODO(csharrison): Move these tests to //content/browser/loader. Now that |
| 1383 // resource hints have migrated to live there. This might require sharing the |
| 1384 // preconnect test harness logic. |
| 1407 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, PreconnectNonCORS) { | 1385 IN_PROC_BROWSER_TEST_F(PredictorBrowserTest, PreconnectNonCORS) { |
| 1408 GURL preconnect_url = embedded_test_server()->base_url(); | 1386 GURL preconnect_url = embedded_test_server()->base_url(); |
| 1409 std::string preconnect_content = | 1387 std::string preconnect_content = |
| 1410 "<link rel=\"preconnect\" href=\"" + preconnect_url.spec() + "\">"; | 1388 "<link rel=\"preconnect\" href=\"" + preconnect_url.spec() + "\">"; |
| 1411 NavigateToDataURLWithContent(preconnect_content); | 1389 NavigateToDataURLWithContent(preconnect_content); |
| 1412 connection_listener_->WaitUntilFirstConnectionAccepted(); | 1390 connection_listener_->WaitUntilFirstConnectionAccepted(); |
| 1413 EXPECT_EQ(1u, connection_listener_->GetAcceptedSocketCount()); | 1391 EXPECT_EQ(1u, connection_listener_->GetAcceptedSocketCount()); |
| 1414 EXPECT_EQ(0u, connection_listener_->GetReadSocketCount()); | 1392 EXPECT_EQ(0u, connection_listener_->GetReadSocketCount()); |
| 1415 } | 1393 } |
| 1416 | 1394 |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1502 // Second navigation to content with an img. | 1480 // Second navigation to content with an img. |
| 1503 std::string img_content = | 1481 std::string img_content = |
| 1504 "<img src=\"" + preconnect_url.spec() + "test.gif\">"; | 1482 "<img src=\"" + preconnect_url.spec() + "test.gif\">"; |
| 1505 NavigateToDataURLWithContent(img_content); | 1483 NavigateToDataURLWithContent(img_content); |
| 1506 connection_listener_->WaitUntilFirstConnectionRead(); | 1484 connection_listener_->WaitUntilFirstConnectionRead(); |
| 1507 EXPECT_EQ(2u, connection_listener_->GetAcceptedSocketCount()); | 1485 EXPECT_EQ(2u, connection_listener_->GetAcceptedSocketCount()); |
| 1508 EXPECT_EQ(1u, connection_listener_->GetReadSocketCount()); | 1486 EXPECT_EQ(1u, connection_listener_->GetReadSocketCount()); |
| 1509 } | 1487 } |
| 1510 | 1488 |
| 1511 } // namespace chrome_browser_net | 1489 } // namespace chrome_browser_net |
| OLD | NEW |