| 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 "base/macros.h" | 5 #include "base/macros.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
| 7 #include "base/values.h" | 7 #include "base/values.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "content/browser/frame_host/navigation_entry_impl.h" | 9 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 10 #include "content/browser/renderer_host/render_widget_host_impl.h" | 10 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 shell_(shell), | 101 shell_(shell), |
| 102 url_(url), | 102 url_(url), |
| 103 done_(false) { | 103 done_(false) { |
| 104 } | 104 } |
| 105 | 105 |
| 106 // WebContentsObserver: | 106 // WebContentsObserver: |
| 107 void NavigationEntryCommitted( | 107 void NavigationEntryCommitted( |
| 108 const LoadCommittedDetails& load_details) override { | 108 const LoadCommittedDetails& load_details) override { |
| 109 if (!done_) { | 109 if (!done_) { |
| 110 done_ = true; | 110 done_ = true; |
| 111 shell_->LoadURL(url_); |
| 112 |
| 113 // There should be a pending entry. |
| 114 CHECK(shell_->web_contents()->GetController().GetPendingEntry()); |
| 115 |
| 116 // Now that there is a pending entry, stop the load. |
| 111 shell_->Stop(); | 117 shell_->Stop(); |
| 112 shell_->LoadURL(url_); | |
| 113 } | 118 } |
| 114 } | 119 } |
| 115 | 120 |
| 116 Shell* shell_; | 121 Shell* shell_; |
| 117 GURL url_; | 122 GURL url_; |
| 118 bool done_; | 123 bool done_; |
| 119 }; | 124 }; |
| 120 | 125 |
| 121 class RenderViewSizeDelegate : public WebContentsDelegate { | 126 class RenderViewSizeDelegate : public WebContentsDelegate { |
| 122 public: | 127 public: |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 int loadingStateChangedCount() const { return loadingStateChangedCount_; } | 187 int loadingStateChangedCount() const { return loadingStateChangedCount_; } |
| 183 int loadingStateToDifferentDocumentCount() const { | 188 int loadingStateToDifferentDocumentCount() const { |
| 184 return loadingStateToDifferentDocumentCount_; | 189 return loadingStateToDifferentDocumentCount_; |
| 185 } | 190 } |
| 186 | 191 |
| 187 private: | 192 private: |
| 188 int loadingStateChangedCount_; | 193 int loadingStateChangedCount_; |
| 189 int loadingStateToDifferentDocumentCount_; | 194 int loadingStateToDifferentDocumentCount_; |
| 190 }; | 195 }; |
| 191 | 196 |
| 192 // See: http://crbug.com/298193 | |
| 193 #if defined(OS_WIN) || defined(OS_LINUX) | |
| 194 #define MAYBE_DidStopLoadingDetails DISABLED_DidStopLoadingDetails | |
| 195 #else | |
| 196 #define MAYBE_DidStopLoadingDetails DidStopLoadingDetails | |
| 197 #endif | |
| 198 | |
| 199 // Test that DidStopLoading includes the correct URL in the details. | 197 // Test that DidStopLoading includes the correct URL in the details. |
| 200 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, | 198 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, DidStopLoadingDetails) { |
| 201 MAYBE_DidStopLoadingDetails) { | |
| 202 ASSERT_TRUE(embedded_test_server()->Start()); | 199 ASSERT_TRUE(embedded_test_server()->Start()); |
| 203 | 200 |
| 204 LoadStopNotificationObserver load_observer( | 201 LoadStopNotificationObserver load_observer( |
| 205 &shell()->web_contents()->GetController()); | 202 &shell()->web_contents()->GetController()); |
| 206 NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); | 203 NavigateToURL(shell(), embedded_test_server()->GetURL("/title1.html")); |
| 207 load_observer.Wait(); | 204 load_observer.Wait(); |
| 208 | 205 |
| 209 EXPECT_EQ("/title1.html", load_observer.url_.path()); | 206 EXPECT_EQ("/title1.html", load_observer.url_.path()); |
| 210 EXPECT_EQ(0, load_observer.session_index_); | 207 EXPECT_EQ(0, load_observer.session_index_); |
| 211 EXPECT_EQ(&shell()->web_contents()->GetController(), | 208 EXPECT_EQ(&shell()->web_contents()->GetController(), |
| 212 load_observer.controller_); | 209 load_observer.controller_); |
| 213 } | 210 } |
| 214 | 211 |
| 215 // See: http://crbug.com/298193 | |
| 216 #if defined(OS_WIN) || defined(OS_LINUX) | |
| 217 #define MAYBE_DidStopLoadingDetailsWithPending \ | |
| 218 DISABLED_DidStopLoadingDetailsWithPending | |
| 219 #else | |
| 220 #define MAYBE_DidStopLoadingDetailsWithPending DidStopLoadingDetailsWithPending | |
| 221 #endif | |
| 222 | |
| 223 // Test that DidStopLoading includes the correct URL in the details when a | 212 // Test that DidStopLoading includes the correct URL in the details when a |
| 224 // pending entry is present. | 213 // pending entry is present. |
| 225 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, | 214 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| 226 MAYBE_DidStopLoadingDetailsWithPending) { | 215 DidStopLoadingDetailsWithPending) { |
| 227 ASSERT_TRUE(embedded_test_server()->Start()); | 216 ASSERT_TRUE(embedded_test_server()->Start()); |
| 228 GURL url("data:text/html,<div>test</div>"); | 217 // TODO(clamy): Add a cross-process navigation case as well once |
| 218 // crbug.com/581024 is fixed. |
| 219 GURL url1 = embedded_test_server()->GetURL("/title1.html"); |
| 220 GURL url2 = embedded_test_server()->GetURL("/title2.html"); |
| 229 | 221 |
| 230 // Listen for the first load to stop. | 222 // Listen for the first load to stop. |
| 231 LoadStopNotificationObserver load_observer( | 223 LoadStopNotificationObserver load_observer( |
| 232 &shell()->web_contents()->GetController()); | 224 &shell()->web_contents()->GetController()); |
| 233 // Start a new pending navigation as soon as the first load commits. | 225 // Start a new pending navigation as soon as the first load commits. |
| 234 // We will hear a DidStopLoading from the first load as the new load | 226 // We will hear a DidStopLoading from the first load as the new load |
| 235 // is started. | 227 // is started. |
| 236 NavigateOnCommitObserver commit_observer( | 228 NavigateOnCommitObserver commit_observer( |
| 237 shell(), embedded_test_server()->GetURL("/title2.html")); | 229 shell(), url2); |
| 238 NavigateToURL(shell(), url); | 230 NavigateToURL(shell(), url1); |
| 239 load_observer.Wait(); | 231 load_observer.Wait(); |
| 240 | 232 |
| 241 EXPECT_EQ(url, load_observer.url_); | 233 EXPECT_EQ(url1, load_observer.url_); |
| 242 EXPECT_EQ(0, load_observer.session_index_); | 234 EXPECT_EQ(0, load_observer.session_index_); |
| 243 EXPECT_EQ(&shell()->web_contents()->GetController(), | 235 EXPECT_EQ(&shell()->web_contents()->GetController(), |
| 244 load_observer.controller_); | 236 load_observer.controller_); |
| 245 } | 237 } |
| 246 // Test that a renderer-initiated navigation to an invalid URL does not leave | 238 // Test that a renderer-initiated navigation to an invalid URL does not leave |
| 247 // around a pending entry that could be used in a URL spoof. We test this in | 239 // around a pending entry that could be used in a URL spoof. We test this in |
| 248 // a browser test because our unit test framework incorrectly calls | 240 // a browser test because our unit test framework incorrectly calls |
| 249 // DidStartProvisionalLoadForFrame for in-page navigations. | 241 // DidStartProvisionalLoadForFrame for in-page navigations. |
| 250 // See http://crbug.com/280512. | 242 // See http://crbug.com/280512. |
| 251 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, | 243 IN_PROC_BROWSER_TEST_F(WebContentsImplBrowserTest, |
| (...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 Shell* new_shell = new_shell_observer.GetShell(); | 804 Shell* new_shell = new_shell_observer.GetShell(); |
| 813 WaitForLoadStop(new_shell->web_contents()); | 805 WaitForLoadStop(new_shell->web_contents()); |
| 814 | 806 |
| 815 EXPECT_EQ("foo", | 807 EXPECT_EQ("foo", |
| 816 static_cast<WebContentsImpl*>(new_shell->web_contents()) | 808 static_cast<WebContentsImpl*>(new_shell->web_contents()) |
| 817 ->GetFrameTree()->root()->frame_name()); | 809 ->GetFrameTree()->root()->frame_name()); |
| 818 } | 810 } |
| 819 } | 811 } |
| 820 | 812 |
| 821 } // namespace content | 813 } // namespace content |
| OLD | NEW |