Chromium Code Reviews| Index: content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| diff --git a/content/browser/frame_host/navigation_controller_impl_browsertest.cc b/content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| index d9bdc38c4fb7c48a60066a392f95075e400be489..ed3c374539884af3d0f1c60981daf0b09accd403 100644 |
| --- a/content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| +++ b/content/browser/frame_host/navigation_controller_impl_browsertest.cc |
| @@ -13,6 +13,7 @@ |
| #include "content/public/test/browser_test_utils.h" |
| #include "content/public/test/content_browser_test.h" |
| #include "content/public/test/content_browser_test_utils.h" |
| +#include "content/public/test/test_navigation_observer.h" |
| #include "content/public/test/test_utils.h" |
| #include "content/shell/browser/shell.h" |
| #include "content/test/content_browser_test_utils_internal.h" |
| @@ -88,6 +89,57 @@ IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| controller.GetLastCommittedEntry()->GetURL()); |
| } |
| +namespace { |
| + |
| +int RendererHistoryLength(Shell* shell) { |
| + int value = 0; |
| + EXPECT_TRUE(ExecuteScriptAndExtractInt( |
| + shell->web_contents(), |
| + "domAutomationController.send(history.length)", |
| + &value)); |
| + return value; |
| +} |
| + |
| +// Similar to the ones from content_browser_test_utils. |
| +bool NavigateToURLAndReplace(Shell* shell, const GURL& url) { |
| + WebContents* web_contents = shell->web_contents(); |
| + WaitForLoadStop(web_contents); |
| + TestNavigationObserver same_tab_observer(web_contents, 1); |
| + NavigationController::LoadURLParams params(url); |
| + params.should_replace_current_entry = true; |
| + web_contents->GetController().LoadURLWithParams(params); |
| + web_contents->Focus(); |
|
Charlie Reis
2015/02/06 17:29:35
Is this line needed? I don't see why the focus wo
Avi (use Gerrit)
2015/02/06 17:43:14
In content_browser_test_utils, NavigateToURLBlockU
|
| + same_tab_observer.Wait(); |
| + if (!IsLastCommittedEntryOfPageType(web_contents, PAGE_TYPE_NORMAL)) |
| + return false; |
| + return web_contents->GetLastCommittedURL() == url; |
| +} |
| + |
| +} // namespace |
| + |
| +// When loading a new page to replace an old page in the history list, make sure |
| +// that the browser and renderer agree, and that both get it right. |
| +IN_PROC_BROWSER_TEST_F(NavigationControllerBrowserTest, |
| + CorrectLengthWithCurrentItemReplacement) { |
| + NavigationController& controller = |
| + shell()->web_contents()->GetController(); |
| + |
| + EXPECT_TRUE(NavigateToURL(shell(), GURL("data:text/html,page1"))); |
| + EXPECT_EQ(1, controller.GetEntryCount()); |
| + EXPECT_EQ(1, RendererHistoryLength(shell())); |
| + |
| + EXPECT_TRUE(NavigateToURLAndReplace(shell(), GURL("data:text/html,page2"))); |
| + EXPECT_EQ(1, controller.GetEntryCount()); |
| + EXPECT_EQ(1, RendererHistoryLength(shell())); |
| + |
| + // Note that there's no way to access the renderer's notion of the history |
| + // offset via JavaScript. Checking just the history length, though, is enough; |
| + // if the replacement failed, there would be a new history entry and thus an |
| + // incorrect length. |
| +} |
| + |
| +namespace { |
| + |
| struct FrameNavigateParamsCapturer : public WebContentsObserver { |
| public: |
| explicit FrameNavigateParamsCapturer(FrameTreeNode* node) |
| @@ -135,6 +187,8 @@ struct FrameNavigateParamsCapturer : public WebContentsObserver { |
| scoped_refptr<MessageLoopRunner> message_loop_runner_; |
| }; |
| +} // namespace |
| + |
| // Verify that the distinction between manual and auto subframes is properly set |
| // for subframe navigations. TODO(avi): It's rather bogus that the same info is |
| // in two different enums; http://crbug.com/453555. |