Index: content/renderer/render_view_browsertest.cc |
=================================================================== |
--- content/renderer/render_view_browsertest.cc (revision 96734) |
+++ content/renderer/render_view_browsertest.cc (working copy) |
@@ -850,3 +850,163 @@ |
view_->setMouseOverURL(WebKit::WebURL(invalid_gurl)); |
EXPECT_EQ(invalid_gurl, view_->target_url_); |
} |
+ |
+TEST_F(RenderViewTest, SetHistoryLengthAndPrune) { |
+ int expected_page_id = -1; |
+ |
+ // No history to merge and no committed pages. |
+ view_->OnSetHistoryLengthAndPrune(0, -1); |
+ EXPECT_EQ(0, view_->history_list_length_); |
+ EXPECT_EQ(-1, view_->history_list_offset_); |
+ |
+ // History to merge and no committed pages. |
+ view_->OnSetHistoryLengthAndPrune(2, -1); |
+ EXPECT_EQ(2, view_->history_list_length_); |
+ EXPECT_EQ(1, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ ClearHistory(); |
+ |
+ // No history to merge and a committed page to be kept. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->OnSetHistoryLengthAndPrune(0, expected_page_id); |
+ EXPECT_EQ(1, view_->history_list_length_); |
+ EXPECT_EQ(0, view_->history_list_offset_); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[0]); |
+ ClearHistory(); |
+ |
+ // No history to merge and a committed page to be pruned. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->OnSetHistoryLengthAndPrune(0, expected_page_id + 1); |
+ EXPECT_EQ(0, view_->history_list_length_); |
+ EXPECT_EQ(-1, view_->history_list_offset_); |
+ ClearHistory(); |
+ |
+ // No history to merge and a committed page that the browser was unaware of. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->OnSetHistoryLengthAndPrune(0, -1); |
+ EXPECT_EQ(1, view_->history_list_length_); |
+ EXPECT_EQ(0, view_->history_list_offset_); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[0]); |
+ ClearHistory(); |
+ |
+ // History to merge and a committed page to be kept. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->OnSetHistoryLengthAndPrune(2, expected_page_id); |
+ EXPECT_EQ(3, view_->history_list_length_); |
+ EXPECT_EQ(2, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[2]); |
+ ClearHistory(); |
+ |
+ // History to merge and a committed page to be pruned. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->OnSetHistoryLengthAndPrune(2, expected_page_id + 1); |
+ EXPECT_EQ(2, view_->history_list_length_); |
+ EXPECT_EQ(1, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ ClearHistory(); |
+ |
+ // History to merge and a committed page that the browser was unaware of. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->OnSetHistoryLengthAndPrune(2, -1); |
+ EXPECT_EQ(3, view_->history_list_length_); |
+ EXPECT_EQ(2, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[2]); |
+ ClearHistory(); |
+ |
+ int expected_page_id_2 = -1; |
+ |
+ // No history to merge and two committed pages, both to be kept. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id_2 = view_->page_id_; |
+ EXPECT_GT(expected_page_id_2, expected_page_id); |
+ view_->OnSetHistoryLengthAndPrune(0, expected_page_id); |
+ EXPECT_EQ(2, view_->history_list_length_); |
+ EXPECT_EQ(1, view_->history_list_offset_); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[0]); |
+ EXPECT_EQ(expected_page_id_2, view_->history_page_ids_[1]); |
+ ClearHistory(); |
+ |
+ // No history to merge and two committed pages, and only the second is kept. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id_2 = view_->page_id_; |
+ EXPECT_GT(expected_page_id_2, expected_page_id); |
+ view_->OnSetHistoryLengthAndPrune(0, expected_page_id_2); |
+ EXPECT_EQ(1, view_->history_list_length_); |
+ EXPECT_EQ(0, view_->history_list_offset_); |
+ EXPECT_EQ(expected_page_id_2, view_->history_page_ids_[0]); |
+ ClearHistory(); |
+ |
+ // No history to merge and two committed pages, both of which the browser was |
+ // unaware of. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id_2 = view_->page_id_; |
+ EXPECT_GT(expected_page_id_2, expected_page_id); |
+ view_->OnSetHistoryLengthAndPrune(0, -1); |
+ EXPECT_EQ(2, view_->history_list_length_); |
+ EXPECT_EQ(1, view_->history_list_offset_); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[0]); |
+ EXPECT_EQ(expected_page_id_2, view_->history_page_ids_[1]); |
+ ClearHistory(); |
+ |
+ // History to merge and two committed pages, both to be kept. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id_2 = view_->page_id_; |
+ EXPECT_GT(expected_page_id_2, expected_page_id); |
+ view_->OnSetHistoryLengthAndPrune(2, expected_page_id); |
+ EXPECT_EQ(4, view_->history_list_length_); |
+ EXPECT_EQ(3, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[2]); |
+ EXPECT_EQ(expected_page_id_2, view_->history_page_ids_[3]); |
+ ClearHistory(); |
+ |
+ // History to merge and two committed pages, and only the second is kept. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id_2 = view_->page_id_; |
+ EXPECT_GT(expected_page_id_2, expected_page_id); |
+ view_->OnSetHistoryLengthAndPrune(2, expected_page_id_2); |
+ EXPECT_EQ(3, view_->history_list_length_); |
+ EXPECT_EQ(2, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ EXPECT_EQ(expected_page_id_2, view_->history_page_ids_[2]); |
+ ClearHistory(); |
+ |
+ // History to merge and two committed pages, both of which the browser was |
+ // unaware of. |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id = view_->page_id_; |
+ view_->didCommitProvisionalLoad(GetMainFrame(), true); |
+ expected_page_id_2 = view_->page_id_; |
+ EXPECT_GT(expected_page_id_2, expected_page_id); |
+ view_->OnSetHistoryLengthAndPrune(2, -1); |
+ EXPECT_EQ(4, view_->history_list_length_); |
+ EXPECT_EQ(3, view_->history_list_offset_); |
+ EXPECT_EQ(-1, view_->history_page_ids_[0]); |
+ EXPECT_EQ(-1, view_->history_page_ids_[1]); |
+ EXPECT_EQ(expected_page_id, view_->history_page_ids_[2]); |
+ EXPECT_EQ(expected_page_id_2, view_->history_page_ids_[3]); |
+} |