summaryrefslogtreecommitdiffstats
path: root/chrome/browser/sessions
diff options
context:
space:
mode:
authorkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-12 15:38:45 +0000
committerkmadhusu@chromium.org <kmadhusu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-05-12 15:38:45 +0000
commitd91aaac40c25cbd3f289453191539834e5e97427 (patch)
tree95f7597347ed519668471d14683dcaeddd64d3ee /chrome/browser/sessions
parent992db4c20a063a1009ae28c2cfb5b220701ea301 (diff)
downloadchromium_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.cc11
-rw-r--r--chrome/browser/sessions/base_session_service.h8
-rw-r--r--chrome/browser/sessions/session_restore_uitest.cc29
-rw-r--r--chrome/browser/sessions/session_service.cc6
-rw-r--r--chrome/browser/sessions/tab_restore_service.cc8
-rw-r--r--chrome/browser/sessions/tab_restore_service_browsertest.cc35
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();