diff options
author | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-12 15:38:45 +0000 |
---|---|---|
committer | kmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-12 15:38:45 +0000 |
commit | d91aaac40c25cbd3f289453191539834e5e97427 (patch) | |
tree | 95f7597347ed519668471d14683dcaeddd64d3ee /chrome/browser/sessions | |
parent | 992db4c20a063a1009ae28c2cfb5b220701ea301 (diff) | |
download | chromium_src-d91aaac40c25cbd3f289453191539834e5e97427.zip chromium_src-d91aaac40c25cbd3f289453191539834e5e97427.tar.gz chromium_src-d91aaac40c25cbd3f289453191539834e5e97427.tar.bz2 |
PrintPreview: Do not restore print preview tabs.
Keep print preview tabs out of recently closed tabs list. Since opening those tabs leads to non-functional print preview pages.
BUG=80346
TEST=Preview a webpage. Restart the browser with session restore enabled. Observe that print preview tab is not created in the new browser.
Review URL: http://codereview.chromium.org/7014004
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85135 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/sessions')
-rw-r--r-- | chrome/browser/sessions/base_session_service.cc | 11 | ||||
-rw-r--r-- | chrome/browser/sessions/base_session_service.h | 8 | ||||
-rw-r--r-- | chrome/browser/sessions/session_restore_uitest.cc | 29 | ||||
-rw-r--r-- | chrome/browser/sessions/session_service.cc | 6 | ||||
-rw-r--r-- | chrome/browser/sessions/tab_restore_service.cc | 8 | ||||
-rw-r--r-- | chrome/browser/sessions/tab_restore_service_browsertest.cc | 35 |
6 files changed, 80 insertions, 17 deletions
diff --git a/chrome/browser/sessions/base_session_service.cc b/chrome/browser/sessions/base_session_service.cc index ba44fd8..ba14c5d 100644 --- a/chrome/browser/sessions/base_session_service.cc +++ b/chrome/browser/sessions/base_session_service.cc @@ -11,6 +11,7 @@ #include "chrome/browser/profiles/profile.h" #include "chrome/browser/sessions/session_backend.h" #include "chrome/browser/sessions/session_types.h" +#include "chrome/common/url_constants.h" #include "content/browser/tab_contents/navigation_entry.h" #include "webkit/glue/webkit_glue.h" @@ -246,12 +247,10 @@ bool BaseSessionService::RestoreSetTabExtensionAppIDCommand( pickle->ReadString(&iterator, extension_app_id); } -bool BaseSessionService::ShouldTrackEntry(const NavigationEntry& entry) { - return entry.virtual_url().is_valid(); -} - -bool BaseSessionService::ShouldTrackEntry(const TabNavigation& navigation) { - return navigation.virtual_url().is_valid(); +bool BaseSessionService::ShouldTrackEntry(const GURL& url) { + // NOTE: Do not track print preview tab because re-opening that page will + // just display a non-functional print preview page. + return url.is_valid() && url != GURL(chrome::kChromeUIPrintURL); } BaseSessionService::Handle BaseSessionService::ScheduleGetLastSessionCommands( diff --git a/chrome/browser/sessions/base_session_service.h b/chrome/browser/sessions/base_session_service.h index 9dcd884..57c464f 100644 --- a/chrome/browser/sessions/base_session_service.h +++ b/chrome/browser/sessions/base_session_service.h @@ -13,6 +13,7 @@ #include "chrome/browser/profiles/profile_keyed_service.h" #include "chrome/browser/sessions/session_id.h" #include "content/browser/cancelable_request.h" +#include "googleurl/src/gurl.h" class NavigationEntry; class Profile; @@ -139,11 +140,8 @@ class BaseSessionService : public CancelableRequestProvider, SessionID::id_type* tab_id, std::string* extension_app_id); - // Returns true if the NavigationEntry should be written to disk. - bool ShouldTrackEntry(const NavigationEntry& entry); - - // Returns true if the TabNavigationshould be written to disk. - bool ShouldTrackEntry(const TabNavigation& navigation); + // Returns true if the entry at specified |url| should be written to disk. + bool ShouldTrackEntry(const GURL& url); // Invokes ReadLastSessionCommands with request on the backend thread. // If testing, ReadLastSessionCommands is invoked directly. diff --git a/chrome/browser/sessions/session_restore_uitest.cc b/chrome/browser/sessions/session_restore_uitest.cc index 79b1990..2662128 100644 --- a/chrome/browser/sessions/session_restore_uitest.cc +++ b/chrome/browser/sessions/session_restore_uitest.cc @@ -11,6 +11,7 @@ #include "chrome/browser/defaults.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/url_constants.h" #include "chrome/test/automation/tab_proxy.h" #include "chrome/test/automation/browser_proxy.h" #include "chrome/test/automation/window_proxy.h" @@ -271,6 +272,34 @@ TEST_F(SessionRestoreUITest, ClosedTabStaysClosed) { ASSERT_EQ(url1_, GetActiveTabURL()); } +// Test to verify that the print preview tab is not restored. +TEST_F(SessionRestoreUITest, DontRestorePrintPreviewTabTest) { + NavigateToURL(url1_); + + int window_count; + ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); + ASSERT_EQ(1, window_count); + scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); + ASSERT_TRUE(browser_proxy.get()); + + // Append the print preview tab. + GURL printPreviewURL(chrome::kChromeUIPrintURL); + ASSERT_TRUE(browser_proxy->AppendTab(printPreviewURL)); + + scoped_refptr<TabProxy> active_tab(browser_proxy->GetActiveTab()); + ASSERT_TRUE(active_tab.get()); + ASSERT_EQ(printPreviewURL, GetActiveTabURL()); + + // Restart and make sure we have only one window with one tab and the url + // is url1_. + QuitBrowserAndRestore(1); + browser_proxy = NULL; + + AssertOneWindowWithOneTab(); + + ASSERT_EQ(url1_, GetActiveTabURL()); +} + // Creates a tabbed browser and popup and makes sure we restore both. TEST_F(SessionRestoreUITest, NormalAndPopup) { if (!browser_defaults::kRestorePopups) diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc index 5727ef5..2977357 100644 --- a/chrome/browser/sessions/session_service.cc +++ b/chrome/browser/sessions/session_service.cc @@ -352,8 +352,10 @@ void SessionService::UpdateTabNavigation(const SessionID& window_id, const SessionID& tab_id, int index, const NavigationEntry& entry) { - if (!ShouldTrackEntry(entry) || !ShouldTrackChangesToWindow(window_id)) + if (!ShouldTrackEntry(entry.virtual_url()) || + !ShouldTrackChangesToWindow(window_id)) { return; + } if (tab_to_available_range_.find(tab_id.id()) != tab_to_available_range_.end()) { @@ -1092,7 +1094,7 @@ void SessionService::BuildCommandsForTab( const NavigationEntry* entry = (i == pending_index) ? controller->pending_entry() : controller->GetEntryAtIndex(i); DCHECK(entry); - if (ShouldTrackEntry(*entry)) { + if (ShouldTrackEntry(entry->virtual_url())) { commands->push_back( CreateUpdateTabNavigationCommand(kCommandUpdateTabNavigation, controller->session_id().id(), diff --git a/chrome/browser/sessions/tab_restore_service.cc b/chrome/browser/sessions/tab_restore_service.cc index 4076dee..a85330a 100644 --- a/chrome/browser/sessions/tab_restore_service.cc +++ b/chrome/browser/sessions/tab_restore_service.cc @@ -602,7 +602,7 @@ void TabRestoreService::ScheduleCommandsForTab(const Tab& tab, int first_index_to_persist = selected_index; for (int i = selected_index - 1; i >= 0 && valid_count_before_selected < max_persist_navigation_count; --i) { - if (ShouldTrackEntry(navigations[i])) { + if (ShouldTrackEntry(navigations[i].virtual_url())) { first_index_to_persist = i; valid_count_before_selected++; } @@ -631,7 +631,7 @@ void TabRestoreService::ScheduleCommandsForTab(const Tab& tab, // Then write the navigations. for (int i = first_index_to_persist, wrote_count = 0; i < max_index && wrote_count < 2 * max_persist_navigation_count; ++i) { - if (ShouldTrackEntry(navigations[i])) { + if (ShouldTrackEntry(navigations[i].virtual_url())) { // Creating a NavigationEntry isn't the most efficient way to go about // this, but it simplifies the code and makes it less error prone as we // add new data to NavigationEntry. @@ -694,7 +694,7 @@ int TabRestoreService::GetSelectedNavigationIndexToPersist(const Tab& tab) { // Find the first navigation to persist. We won't persist the selected // navigation if ShouldTrackEntry returns false. while (selected_index >= 0 && - !ShouldTrackEntry(navigations[selected_index])) { + !ShouldTrackEntry(navigations[selected_index].virtual_url())) { selected_index--; } @@ -704,7 +704,7 @@ int TabRestoreService::GetSelectedNavigationIndexToPersist(const Tab& tab) { // Couldn't find a navigation to persist going back, go forward. selected_index = tab.current_navigation_index + 1; while (selected_index < max_index && - !ShouldTrackEntry(navigations[selected_index])) { + !ShouldTrackEntry(navigations[selected_index].virtual_url())) { selected_index++; } diff --git a/chrome/browser/sessions/tab_restore_service_browsertest.cc b/chrome/browser/sessions/tab_restore_service_browsertest.cc index 9b282b2..9908da4 100644 --- a/chrome/browser/sessions/tab_restore_service_browsertest.cc +++ b/chrome/browser/sessions/tab_restore_service_browsertest.cc @@ -6,6 +6,7 @@ #include "chrome/browser/sessions/session_service.h" #include "chrome/browser/sessions/session_service_factory.h" #include "chrome/browser/sessions/tab_restore_service.h" +#include "chrome/common/url_constants.h" #include "chrome/test/render_view_test.h" #include "chrome/test/testing_profile.h" #include "content/browser/renderer_host/test_render_view_host.h" @@ -173,6 +174,40 @@ TEST_F(TabRestoreServiceTest, DontCreateEmptyTab) { EXPECT_TRUE(service_->entries().empty()); } +// Make sure TabRestoreService doesn't create an entry for print preview tab. +TEST_F(TabRestoreServiceTest, DontRestorePrintPreviewTab) { + AddThreeNavigations(); + + // Navigate to a print preview tab. + GURL printPreviewURL(chrome::kChromeUIPrintURL); + NavigateAndCommit(printPreviewURL); + EXPECT_EQ(printPreviewURL, contents()->GetURL()); + EXPECT_EQ(4, controller().entry_count()); + + // Have the service record the tab. + service_->CreateHistoricalTab(&controller(), -1); + + // Recreate the service and have it load the tabs. + RecreateService(); + + // One entry should be created. + ASSERT_EQ(1U, service_->entries().size()); + + // And verify the entry. + TabRestoreService::Entry* entry = service_->entries().front(); + ASSERT_EQ(TabRestoreService::TAB, entry->type); + TabRestoreService::Tab* tab = static_cast<TabRestoreService::Tab*>(entry); + EXPECT_FALSE(tab->pinned); + + // Verify that print preview tab is not restored. + ASSERT_EQ(3U, tab->navigations.size()); + EXPECT_NE(printPreviewURL, tab->navigations[0].virtual_url()); + EXPECT_NE(printPreviewURL, tab->navigations[1].virtual_url()); + EXPECT_NE(printPreviewURL, tab->navigations[2].virtual_url()); + EXPECT_EQ(time_factory_->TimeNow().ToInternalValue(), + tab->timestamp.ToInternalValue()); +} + // Tests restoring a single tab. TEST_F(TabRestoreServiceTest, Restore) { AddThreeNavigations(); |