Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "chrome/browser/net/net_error_tab_helper.h" | 5 #include "chrome/browser/net/net_error_tab_helper.h" |
| 6 | 6 |
| 7 #include "chrome/common/render_messages.h" | 7 #include "chrome/common/render_messages.h" |
| 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" | 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" |
| 9 #include "components/error_page/common/net_error_info.h" | 9 #include "components/error_page/common/net_error_info.h" |
| 10 #include "content/public/browser/browser_thread.h" | 10 #include "content/public/browser/browser_thread.h" |
| 11 #include "content/public/browser/navigation_handle.h" | |
| 11 #include "content/public/test/test_renderer_host.h" | 12 #include "content/public/test/test_renderer_host.h" |
| 12 #include "net/base/net_errors.h" | 13 #include "net/base/net_errors.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
| 14 #include "ui/base/page_transition_types.h" | 15 #include "ui/base/page_transition_types.h" |
| 15 | 16 |
| 17 #undef NO_ERROR | |
|
Julia Tuttle
2016/09/19 16:23:19
Comment where you're undefining this from?
| |
| 18 | |
| 16 using chrome_browser_net::NetErrorTabHelper; | 19 using chrome_browser_net::NetErrorTabHelper; |
| 17 using error_page::DnsProbeStatus; | 20 using error_page::DnsProbeStatus; |
| 18 | 21 |
| 19 class TestNetErrorTabHelper : public NetErrorTabHelper { | 22 class TestNetErrorTabHelper : public NetErrorTabHelper { |
| 20 public: | 23 public: |
| 21 explicit TestNetErrorTabHelper(content::WebContents* web_contents) | 24 explicit TestNetErrorTabHelper(content::WebContents* web_contents) |
| 22 : NetErrorTabHelper(web_contents), | 25 : NetErrorTabHelper(web_contents), |
| 23 mock_probe_running_(false), | 26 mock_probe_running_(false), |
| 24 last_status_sent_(error_page::DNS_PROBE_MAX), | 27 last_status_sent_(error_page::DNS_PROBE_MAX), |
| 25 mock_sent_count_(0), | 28 mock_sent_count_(0), |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 64 bool mock_probe_running_; | 67 bool mock_probe_running_; |
| 65 DnsProbeStatus last_status_sent_; | 68 DnsProbeStatus last_status_sent_; |
| 66 int mock_sent_count_; | 69 int mock_sent_count_; |
| 67 std::string network_diagnostics_url_; | 70 std::string network_diagnostics_url_; |
| 68 int times_diagnostics_dialog_invoked_; | 71 int times_diagnostics_dialog_invoked_; |
| 69 }; | 72 }; |
| 70 | 73 |
| 71 class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness { | 74 class NetErrorTabHelperTest : public ChromeRenderViewHostTestHarness { |
| 72 protected: | 75 protected: |
| 73 enum MainFrame { SUB_FRAME, MAIN_FRAME }; | 76 enum MainFrame { SUB_FRAME, MAIN_FRAME }; |
| 74 enum ErrorPage { NORMAL_PAGE, ERROR_PAGE }; | 77 enum ErrorType { DNS_ERROR, OTHER_ERROR, NO_ERROR }; |
| 75 enum ErrorType { DNS_ERROR, OTHER_ERROR }; | |
| 76 | 78 |
| 77 void SetUp() override { | 79 void SetUp() override { |
| 78 ChromeRenderViewHostTestHarness::SetUp(); | 80 ChromeRenderViewHostTestHarness::SetUp(); |
| 79 | 81 |
| 80 // This will simulate the initialization of the RenderFrame in the renderer | 82 // This will simulate the initialization of the RenderFrame in the renderer |
| 81 // process. This is needed because WebContents does not initialize a | 83 // process. This is needed because WebContents does not initialize a |
| 82 // RenderFrame on construction, and the tests expect one to exist. | 84 // RenderFrame on construction, and the tests expect one to exist. |
| 83 content::RenderFrameHostTester::For(main_rfh()) | 85 content::RenderFrameHostTester::For(main_rfh()) |
| 84 ->InitializeRenderFrameIfNeeded(); | 86 ->InitializeRenderFrameIfNeeded(); |
| 85 | 87 |
| 86 subframe_ = content::RenderFrameHostTester::For(main_rfh()) | 88 subframe_ = content::RenderFrameHostTester::For(main_rfh()) |
| 87 ->AppendChild("subframe"); | 89 ->AppendChild("subframe"); |
| 88 | 90 |
| 89 tab_helper_.reset(new TestNetErrorTabHelper(web_contents())); | 91 tab_helper_.reset(new TestNetErrorTabHelper(web_contents())); |
| 90 NetErrorTabHelper::set_state_for_testing( | 92 NetErrorTabHelper::set_state_for_testing( |
| 91 NetErrorTabHelper::TESTING_FORCE_ENABLED); | 93 NetErrorTabHelper::TESTING_FORCE_ENABLED); |
| 92 } | 94 } |
| 93 | 95 |
| 94 void TearDown() override { | 96 void TearDown() override { |
| 95 // Have to shut down the helper before the profile. | 97 // Have to shut down the helper before the profile. |
| 96 tab_helper_.reset(); | 98 tab_helper_.reset(); |
| 97 ChromeRenderViewHostTestHarness::TearDown(); | 99 ChromeRenderViewHostTestHarness::TearDown(); |
| 98 } | 100 } |
| 99 | 101 |
| 100 void StartProvisionalLoad(MainFrame main_frame, ErrorPage error_page) { | 102 void DidFinishNavigation(MainFrame main_frame, |
| 101 tab_helper_->DidStartProvisionalLoadForFrame( | 103 ErrorType error_type) { |
| 102 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_, | 104 net::Error net_error = net::OK; |
| 103 bogus_url_, // validated_url | |
| 104 (error_page == ERROR_PAGE), | |
| 105 false); // is_iframe_srcdoc | |
| 106 } | |
| 107 | |
| 108 void CommitProvisionalLoad(MainFrame main_frame) { | |
| 109 tab_helper_->DidCommitProvisionalLoadForFrame( | |
| 110 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_, | |
| 111 bogus_url_, // url | |
| 112 ui::PAGE_TRANSITION_TYPED); | |
| 113 } | |
| 114 | |
| 115 void FailProvisionalLoad(MainFrame main_frame, ErrorType error_type) { | |
| 116 int net_error; | |
| 117 | |
| 118 if (error_type == DNS_ERROR) | 105 if (error_type == DNS_ERROR) |
| 119 net_error = net::ERR_NAME_NOT_RESOLVED; | 106 net_error = net::ERR_NAME_NOT_RESOLVED; |
| 120 else | 107 else |
| 121 net_error = net::ERR_TIMED_OUT; | 108 net_error = net::ERR_TIMED_OUT; |
| 122 | 109 std::unique_ptr<content::NavigationHandle> navigation_handle( |
| 123 tab_helper_->DidFailProvisionalLoad( | 110 content::NavigationHandle::CreateNavigationHandleForTesting( |
| 124 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_, | 111 bogus_url_, |
| 125 bogus_url_, // validated_url | 112 (main_frame == MAIN_FRAME) ? main_rfh() : subframe_, |
| 126 net_error, | 113 true, |
| 127 base::string16(), | 114 net_error)); |
| 128 false); | 115 // The destructor will call tab_helper_->DidFinishNavigation. |
| 129 } | 116 } |
| 130 | 117 |
| 131 void FinishProbe(DnsProbeStatus status) { tab_helper_->FinishProbe(status); } | 118 void FinishProbe(DnsProbeStatus status) { tab_helper_->FinishProbe(status); } |
| 132 | 119 |
| 133 bool probe_running() { return tab_helper_->mock_probe_running(); } | 120 bool probe_running() { return tab_helper_->mock_probe_running(); } |
| 134 DnsProbeStatus last_status_sent() { return tab_helper_->last_status_sent(); } | 121 DnsProbeStatus last_status_sent() { return tab_helper_->last_status_sent(); } |
| 135 int sent_count() { return tab_helper_->mock_sent_count(); } | 122 int sent_count() { return tab_helper_->mock_sent_count(); } |
| 136 | 123 |
| 137 TestNetErrorTabHelper* tab_helper() { return tab_helper_.get(); } | 124 TestNetErrorTabHelper* tab_helper() { return tab_helper_.get(); } |
| 138 | 125 |
| 139 private: | 126 private: |
| 140 content::RenderFrameHost* subframe_; | 127 content::RenderFrameHost* subframe_; |
| 141 std::unique_ptr<TestNetErrorTabHelper> tab_helper_; | 128 std::unique_ptr<TestNetErrorTabHelper> tab_helper_; |
| 142 GURL bogus_url_; | 129 GURL bogus_url_; |
| 143 }; | 130 }; |
| 144 | 131 |
| 145 TEST_F(NetErrorTabHelperTest, Null) { | 132 TEST_F(NetErrorTabHelperTest, Null) { |
| 146 EXPECT_FALSE(probe_running()); | 133 EXPECT_FALSE(probe_running()); |
| 147 } | 134 } |
| 148 | 135 |
| 149 TEST_F(NetErrorTabHelperTest, MainFrameNonDnsError) { | 136 TEST_F(NetErrorTabHelperTest, MainFrameNonDnsError) { |
| 150 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 137 DidFinishNavigation(MAIN_FRAME, OTHER_ERROR); |
| 151 FailProvisionalLoad(MAIN_FRAME, OTHER_ERROR); | |
| 152 EXPECT_FALSE(probe_running()); | 138 EXPECT_FALSE(probe_running()); |
| 153 EXPECT_EQ(0, sent_count()); | 139 EXPECT_EQ(0, sent_count()); |
| 154 } | 140 } |
| 155 | 141 |
| 156 TEST_F(NetErrorTabHelperTest, NonMainFrameDnsError) { | 142 TEST_F(NetErrorTabHelperTest, NonMainFrameDnsError) { |
| 157 StartProvisionalLoad(SUB_FRAME, NORMAL_PAGE); | 143 DidFinishNavigation(SUB_FRAME, DNS_ERROR); |
| 158 FailProvisionalLoad(SUB_FRAME, DNS_ERROR); | |
| 159 EXPECT_FALSE(probe_running()); | 144 EXPECT_FALSE(probe_running()); |
| 160 EXPECT_EQ(0, sent_count()); | 145 EXPECT_EQ(0, sent_count()); |
| 161 } | 146 } |
| 162 | 147 |
| 163 // Test complete DNS error page loads. Note that the helper can see two error | 148 // Test complete DNS error page loads. Note that the helper can see two error |
| 164 // page loads: Link Doctor loads an empty HTML page so the user knows something | 149 // page loads: Link Doctor loads an empty HTML page so the user knows something |
| 165 // is going on, then fails over to the normal error page if and when Link | 150 // is going on, then fails over to the normal error page if and when Link |
| 166 // Doctor fails to load or declines to provide a page. | 151 // Doctor fails to load or declines to provide a page. |
| 167 | 152 |
| 168 TEST_F(NetErrorTabHelperTest, ProbeResponseBeforeFirstCommit) { | 153 TEST_F(NetErrorTabHelperTest, ProbeResponse) { |
| 169 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 154 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 170 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 171 EXPECT_TRUE(probe_running()); | |
| 172 EXPECT_EQ(0, sent_count()); | |
| 173 | |
| 174 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 175 EXPECT_TRUE(probe_running()); | |
| 176 EXPECT_EQ(0, sent_count()); | |
| 177 | |
| 178 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | |
| 179 EXPECT_FALSE(probe_running()); | |
| 180 EXPECT_EQ(0, sent_count()); | |
| 181 | |
| 182 CommitProvisionalLoad(MAIN_FRAME); | |
| 183 EXPECT_FALSE(probe_running()); | |
| 184 EXPECT_EQ(1, sent_count()); | |
| 185 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | |
| 186 | |
| 187 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 188 EXPECT_FALSE(probe_running()); | |
| 189 EXPECT_EQ(1, sent_count()); | |
| 190 | |
| 191 CommitProvisionalLoad(MAIN_FRAME); | |
| 192 EXPECT_FALSE(probe_running()); | |
| 193 EXPECT_EQ(2, sent_count()); | |
| 194 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | |
| 195 } | |
| 196 | |
| 197 TEST_F(NetErrorTabHelperTest, ProbeResponseBetweenFirstAndSecondCommit) { | |
| 198 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 199 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 200 EXPECT_TRUE(probe_running()); | |
| 201 EXPECT_EQ(0, sent_count()); | |
| 202 | |
| 203 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 204 EXPECT_TRUE(probe_running()); | |
| 205 EXPECT_EQ(0, sent_count()); | |
| 206 | |
| 207 CommitProvisionalLoad(MAIN_FRAME); | |
| 208 EXPECT_TRUE(probe_running()); | 155 EXPECT_TRUE(probe_running()); |
| 209 EXPECT_EQ(1, sent_count()); | 156 EXPECT_EQ(1, sent_count()); |
| 210 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 211 | 157 |
| 212 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | 158 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); |
| 213 EXPECT_FALSE(probe_running()); | 159 EXPECT_FALSE(probe_running()); |
| 214 EXPECT_EQ(2, sent_count()); | 160 EXPECT_EQ(2, sent_count()); |
| 215 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | |
| 216 | 161 |
| 217 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | 162 DidFinishNavigation(MAIN_FRAME, NO_ERROR); |
| 218 EXPECT_FALSE(probe_running()); | |
| 219 EXPECT_EQ(2, sent_count()); | |
| 220 | |
| 221 CommitProvisionalLoad(MAIN_FRAME); | |
| 222 EXPECT_FALSE(probe_running()); | 163 EXPECT_FALSE(probe_running()); |
| 223 EXPECT_EQ(3, sent_count()); | 164 EXPECT_EQ(3, sent_count()); |
| 224 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | 165 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); |
| 225 } | |
| 226 | |
| 227 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterSecondCommit) { | |
| 228 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 229 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 230 EXPECT_TRUE(probe_running()); | |
| 231 EXPECT_EQ(0, sent_count()); | |
| 232 | |
| 233 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 234 EXPECT_TRUE(probe_running()); | |
| 235 EXPECT_EQ(0, sent_count()); | |
| 236 | |
| 237 CommitProvisionalLoad(MAIN_FRAME); | |
| 238 EXPECT_TRUE(probe_running()); | |
| 239 EXPECT_EQ(1, sent_count()); | |
| 240 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 241 | |
| 242 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 243 EXPECT_TRUE(probe_running()); | |
| 244 EXPECT_EQ(1, sent_count()); | |
| 245 | |
| 246 CommitProvisionalLoad(MAIN_FRAME); | |
| 247 EXPECT_TRUE(probe_running()); | |
| 248 EXPECT_EQ(2, sent_count()); | |
| 249 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 250 | |
| 251 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | |
| 252 EXPECT_FALSE(probe_running()); | |
| 253 EXPECT_EQ(3, sent_count()); | |
| 254 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | |
| 255 } | 166 } |
| 256 | 167 |
| 257 // Send result even if a new page load has started; the error page is still | 168 // Send result even if a new page load has started; the error page is still |
| 258 // visible, and the user might cancel the load. | 169 // visible, and the user might cancel the load. |
| 259 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) { | 170 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewStart) { |
| 260 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 171 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 261 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 262 EXPECT_TRUE(probe_running()); | |
| 263 EXPECT_EQ(0, sent_count()); | |
| 264 | |
| 265 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 266 EXPECT_TRUE(probe_running()); | |
| 267 EXPECT_EQ(0, sent_count()); | |
| 268 | |
| 269 CommitProvisionalLoad(MAIN_FRAME); | |
| 270 EXPECT_TRUE(probe_running()); | 172 EXPECT_TRUE(probe_running()); |
| 271 EXPECT_EQ(1, sent_count()); | 173 EXPECT_EQ(1, sent_count()); |
| 272 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | 174 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); |
| 273 | 175 |
| 274 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | 176 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 275 EXPECT_TRUE(probe_running()); | |
| 276 EXPECT_EQ(1, sent_count()); | |
| 277 | |
| 278 CommitProvisionalLoad(MAIN_FRAME); | |
| 279 EXPECT_TRUE(probe_running()); | 177 EXPECT_TRUE(probe_running()); |
| 280 EXPECT_EQ(2, sent_count()); | 178 EXPECT_EQ(2, sent_count()); |
| 281 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | 179 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); |
| 282 | 180 |
| 283 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 181 DidFinishNavigation(MAIN_FRAME, NO_ERROR); |
| 182 EXPECT_TRUE(probe_running()); | |
| 183 EXPECT_EQ(3, sent_count()); | |
| 184 | |
| 185 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | |
| 186 EXPECT_FALSE(probe_running()); | |
| 187 EXPECT_EQ(4, sent_count()); | |
| 188 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | |
| 189 } | |
| 190 | |
| 191 // Don't send result if a new page has committed; the result would go to the | |
| 192 // wrong page, and the error page is gone anyway. | |
| 193 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) { | |
| 194 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); | |
| 195 EXPECT_TRUE(probe_running()); | |
| 196 EXPECT_EQ(1, sent_count()); | |
| 197 | |
| 198 DidFinishNavigation(MAIN_FRAME, NO_ERROR); | |
| 284 EXPECT_TRUE(probe_running()); | 199 EXPECT_TRUE(probe_running()); |
| 285 EXPECT_EQ(2, sent_count()); | 200 EXPECT_EQ(2, sent_count()); |
| 286 | 201 |
| 287 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | 202 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); |
| 288 EXPECT_FALSE(probe_running()); | 203 EXPECT_FALSE(probe_running()); |
| 289 EXPECT_EQ(3, sent_count()); | 204 EXPECT_EQ(3, sent_count()); |
| 290 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | |
| 291 } | 205 } |
| 292 | 206 |
| 293 // Don't send result if a new page has committed; the result would go to the | 207 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesWithoutErrorPages) { |
| 294 // wrong page, and the error page is gone anyway. | 208 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 295 TEST_F(NetErrorTabHelperTest, ProbeResponseAfterNewCommit) { | |
| 296 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 297 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 298 EXPECT_TRUE(probe_running()); | |
| 299 EXPECT_EQ(0, sent_count()); | |
| 300 | |
| 301 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 302 EXPECT_TRUE(probe_running()); | |
| 303 EXPECT_EQ(0, sent_count()); | |
| 304 | |
| 305 CommitProvisionalLoad(MAIN_FRAME); | |
| 306 EXPECT_TRUE(probe_running()); | |
| 307 EXPECT_EQ(1, sent_count()); | |
| 308 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 309 | |
| 310 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 311 EXPECT_TRUE(probe_running()); | 209 EXPECT_TRUE(probe_running()); |
| 312 EXPECT_EQ(1, sent_count()); | 210 EXPECT_EQ(1, sent_count()); |
| 313 | 211 |
| 314 CommitProvisionalLoad(MAIN_FRAME); | 212 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); |
| 213 EXPECT_FALSE(probe_running()); | |
| 214 EXPECT_EQ(2, sent_count()); | |
| 215 | |
| 216 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); | |
| 217 EXPECT_TRUE(probe_running()); | |
| 218 EXPECT_EQ(3, sent_count()); | |
| 219 | |
| 220 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET); | |
| 221 EXPECT_FALSE(probe_running()); | |
| 222 EXPECT_EQ(4, sent_count()); | |
| 223 } | |
| 224 | |
| 225 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesAndErrorPages) { | |
| 226 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); | |
| 227 EXPECT_TRUE(probe_running()); | |
| 228 EXPECT_EQ(1, sent_count()); | |
| 229 | |
| 230 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); | |
| 315 EXPECT_TRUE(probe_running()); | 231 EXPECT_TRUE(probe_running()); |
| 316 EXPECT_EQ(2, sent_count()); | 232 EXPECT_EQ(2, sent_count()); |
| 317 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | 233 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); |
| 318 | 234 |
| 319 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 320 EXPECT_TRUE(probe_running()); | |
| 321 EXPECT_EQ(2, sent_count()); | |
| 322 | |
| 323 CommitProvisionalLoad(MAIN_FRAME); | |
| 324 EXPECT_TRUE(probe_running()); | |
| 325 EXPECT_EQ(2, sent_count()); | |
| 326 | |
| 327 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | 235 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); |
| 328 EXPECT_FALSE(probe_running()); | 236 EXPECT_FALSE(probe_running()); |
| 329 EXPECT_EQ(2, sent_count()); | 237 EXPECT_EQ(3, sent_count()); |
| 330 } | |
| 331 | |
| 332 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesWithoutErrorPages) { | |
| 333 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 334 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 335 EXPECT_TRUE(probe_running()); | |
| 336 EXPECT_EQ(0, sent_count()); | |
| 337 | |
| 338 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | |
| 339 EXPECT_FALSE(probe_running()); | |
| 340 EXPECT_EQ(0, sent_count()); | |
| 341 | |
| 342 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 343 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 344 EXPECT_TRUE(probe_running()); | |
| 345 EXPECT_EQ(0, sent_count()); | |
| 346 | |
| 347 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET); | |
| 348 EXPECT_FALSE(probe_running()); | |
| 349 EXPECT_EQ(0, sent_count()); | |
| 350 } | |
| 351 | |
| 352 TEST_F(NetErrorTabHelperTest, MultipleDnsErrorsWithProbesAndErrorPages) { | |
| 353 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 354 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 355 EXPECT_TRUE(probe_running()); | |
| 356 EXPECT_EQ(0, sent_count()); | |
| 357 | |
| 358 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 359 CommitProvisionalLoad(MAIN_FRAME); | |
| 360 EXPECT_TRUE(probe_running()); | |
| 361 EXPECT_EQ(1, sent_count()); | |
| 362 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 363 | |
| 364 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | |
| 365 EXPECT_FALSE(probe_running()); | |
| 366 EXPECT_EQ(2, sent_count()); | |
| 367 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | 238 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); |
| 368 | 239 |
| 369 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 240 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 370 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 371 EXPECT_TRUE(probe_running()); | 241 EXPECT_TRUE(probe_running()); |
| 372 EXPECT_EQ(2, sent_count()); | 242 EXPECT_EQ(4, sent_count()); |
| 373 | 243 |
| 374 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | 244 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 375 CommitProvisionalLoad(MAIN_FRAME); | |
| 376 EXPECT_TRUE(probe_running()); | 245 EXPECT_TRUE(probe_running()); |
| 377 EXPECT_EQ(3, sent_count()); | 246 EXPECT_EQ(5, sent_count()); |
| 378 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | 247 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); |
| 379 | 248 |
| 380 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET); | 249 FinishProbe(error_page::DNS_PROBE_FINISHED_NO_INTERNET); |
| 381 EXPECT_FALSE(probe_running()); | 250 EXPECT_FALSE(probe_running()); |
| 382 EXPECT_EQ(4, sent_count()); | 251 EXPECT_EQ(6, sent_count()); |
| 383 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NO_INTERNET, | 252 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NO_INTERNET, |
| 384 last_status_sent()); | 253 last_status_sent()); |
| 385 } | 254 } |
| 386 | 255 |
| 387 // If multiple DNS errors occur in a row before a probe result, don't start | 256 // If multiple DNS errors occur in a row before a probe result, don't start |
| 388 // multiple probes. | 257 // multiple probes. |
| 389 TEST_F(NetErrorTabHelperTest, CoalesceFailures) { | 258 TEST_F(NetErrorTabHelperTest, CoalesceFailures) { |
| 390 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 259 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 391 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | 260 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 392 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 393 CommitProvisionalLoad(MAIN_FRAME); | |
| 394 EXPECT_TRUE(probe_running()); | |
| 395 EXPECT_EQ(1, sent_count()); | |
| 396 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 397 | |
| 398 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | |
| 399 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 400 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 401 CommitProvisionalLoad(MAIN_FRAME); | |
| 402 EXPECT_TRUE(probe_running()); | 261 EXPECT_TRUE(probe_running()); |
| 403 EXPECT_EQ(2, sent_count()); | 262 EXPECT_EQ(2, sent_count()); |
| 404 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | 263 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); |
| 405 | 264 |
| 406 StartProvisionalLoad(MAIN_FRAME, NORMAL_PAGE); | 265 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); |
| 407 FailProvisionalLoad(MAIN_FRAME, DNS_ERROR); | |
| 408 StartProvisionalLoad(MAIN_FRAME, ERROR_PAGE); | |
| 409 CommitProvisionalLoad(MAIN_FRAME); | |
| 410 EXPECT_TRUE(probe_running()); | 266 EXPECT_TRUE(probe_running()); |
| 411 EXPECT_EQ(3, sent_count()); | 267 EXPECT_EQ(3, sent_count()); |
| 412 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | 268 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); |
| 413 | 269 |
| 270 DidFinishNavigation(MAIN_FRAME, DNS_ERROR); | |
| 271 EXPECT_TRUE(probe_running()); | |
| 272 EXPECT_EQ(4, sent_count()); | |
| 273 EXPECT_EQ(error_page::DNS_PROBE_STARTED, last_status_sent()); | |
| 274 | |
| 414 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); | 275 FinishProbe(error_page::DNS_PROBE_FINISHED_NXDOMAIN); |
| 415 EXPECT_FALSE(probe_running()); | 276 EXPECT_FALSE(probe_running()); |
| 416 EXPECT_EQ(4, sent_count()); | 277 EXPECT_EQ(5, sent_count()); |
| 417 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); | 278 EXPECT_EQ(error_page::DNS_PROBE_FINISHED_NXDOMAIN, last_status_sent()); |
| 418 } | 279 } |
| 419 | 280 |
| 420 // Makes sure that URLs are sanitized before running the platform network | 281 // Makes sure that URLs are sanitized before running the platform network |
| 421 // diagnostics tool. | 282 // diagnostics tool. |
| 422 TEST_F(NetErrorTabHelperTest, SanitizeDiagnosticsUrl) { | 283 TEST_F(NetErrorTabHelperTest, SanitizeDiagnosticsUrl) { |
| 423 content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); | 284 content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); |
| 424 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics( | 285 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics( |
| 425 rfh->GetRoutingID(), | 286 rfh->GetRoutingID(), |
| 426 GURL("http://foo:bar@somewhere:123/hats?for#goats"))); | 287 GURL("http://foo:bar@somewhere:123/hats?for#goats"))); |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 441 "file://foo/bar", | 302 "file://foo/bar", |
| 442 }; | 303 }; |
| 443 | 304 |
| 444 for (const char* url : kUrls) { | 305 for (const char* url : kUrls) { |
| 445 content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); | 306 content::RenderFrameHost* rfh = web_contents()->GetMainFrame(); |
| 446 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics( | 307 rfh->OnMessageReceived(ChromeViewHostMsg_RunNetworkDiagnostics( |
| 447 rfh->GetRoutingID(), GURL(url))); | 308 rfh->GetRoutingID(), GURL(url))); |
| 448 EXPECT_EQ(0, tab_helper()->times_diagnostics_dialog_invoked()); | 309 EXPECT_EQ(0, tab_helper()->times_diagnostics_dialog_invoked()); |
| 449 } | 310 } |
| 450 } | 311 } |
| OLD | NEW |