summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/sessions/session_backend.h1
-rw-r--r--chrome/browser/sessions/session_service.cc6
-rw-r--r--chrome/browser/sessions/session_service.h5
-rw-r--r--chrome/browser/ui/browser_browsertest.cc20
4 files changed, 32 insertions, 0 deletions
diff --git a/chrome/browser/sessions/session_backend.h b/chrome/browser/sessions/session_backend.h
index 6ae8fbe..498b43f 100644
--- a/chrome/browser/sessions/session_backend.h
+++ b/chrome/browser/sessions/session_backend.h
@@ -53,6 +53,7 @@ class SessionBackend : public base::RefCountedThreadSafe<SessionBackend> {
// NOTE: this is invoked before every command, and does nothing if we've
// already Init'ed.
void Init();
+ bool inited() const { return inited_; }
// Appends the specified commands to the current file. If reset_first is
// true the the current file is recreated.
diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc
index 11e9c53..98e7ee7 100644
--- a/chrome/browser/sessions/session_service.cc
+++ b/chrome/browser/sessions/session_service.cc
@@ -542,6 +542,10 @@ void SessionService::Init() {
BrowserList::AddObserver(this);
}
+bool SessionService::processed_any_commands() {
+ return backend()->inited() || !pending_commands().empty();
+}
+
bool SessionService::ShouldNewWindowStartSession() {
// ChromeOS and OSX have different ideas of application lifetime than
// the other platforms.
@@ -1743,6 +1747,8 @@ void SessionService::RecordUpdatedSaveTime(base::TimeDelta delta,
void SessionService::TabInserted(WebContents* contents) {
SessionTabHelper* session_tab_helper =
SessionTabHelper::FromWebContents(contents);
+ if (!ShouldTrackChangesToWindow(session_tab_helper->window_id()))
+ return;
SetTabWindow(session_tab_helper->window_id(),
session_tab_helper->session_id());
extensions::TabHelper* extensions_tab_helper =
diff --git a/chrome/browser/sessions/session_service.h b/chrome/browser/sessions/session_service.h
index 98f0fa5..6078806 100644
--- a/chrome/browser/sessions/session_service.h
+++ b/chrome/browser/sessions/session_service.h
@@ -208,6 +208,7 @@ class SessionService : public BaseSessionService,
// Allow tests to access our innards for testing purposes.
FRIEND_TEST_ALL_PREFIXES(SessionServiceTest, RestoreActivation1);
FRIEND_TEST_ALL_PREFIXES(SessionServiceTest, RestoreActivation2);
+ FRIEND_TEST_ALL_PREFIXES(NoStartupWindowTest, DontInitSessionServiceForApps);
typedef std::map<SessionID::id_type, std::pair<int, int> > IdToRange;
typedef std::map<SessionID::id_type, SessionTab*> IdToSessionTab;
@@ -225,6 +226,10 @@ class SessionService : public BaseSessionService,
void Init();
+ // Returns true if we have scheduled any commands, or any scheduled commands
+ // have been saved.
+ bool processed_any_commands();
+
// Implementation of RestoreIfNecessary. If |browser| is non-null and we need
// to restore, the tabs are added to it, otherwise a new browser is created.
bool RestoreIfNecessary(const std::vector<GURL>& urls_to_open,
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc
index fe91f07..3818d11 100644
--- a/chrome/browser/ui/browser_browsertest.cc
+++ b/chrome/browser/ui/browser_browsertest.cc
@@ -21,6 +21,8 @@
#include "chrome/browser/prefs/incognito_mode_prefs.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/profiles/profile_manager.h"
+#include "chrome/browser/sessions/session_backend.h"
+#include "chrome/browser/sessions/session_service_factory.h"
#include "chrome/browser/translate/translate_tab_helper.h"
#include "chrome/browser/ui/app_modal_dialogs/app_modal_dialog.h"
#include "chrome/browser/ui/app_modal_dialogs/javascript_app_modal_dialog.h"
@@ -1687,6 +1689,24 @@ IN_PROC_BROWSER_TEST_F(NoStartupWindowTest, NoStartupWindowBasicTest) {
EXPECT_EQ(1u, BrowserList::size());
}
+// Chromeos needs to track app windows because it considers them to be part of
+// session state.
+#if !defined(OS_CHROMEOS)
+IN_PROC_BROWSER_TEST_F(NoStartupWindowTest, DontInitSessionServiceForApps) {
+ Profile* profile = ProfileManager::GetDefaultProfile();
+
+ SessionService* session_service =
+ SessionServiceFactory::GetForProfile(profile);
+ ASSERT_FALSE(session_service->processed_any_commands());
+
+ ui_test_utils::BrowserAddedObserver browser_added_observer;
+ CreateBrowserForApp("blah", profile);
+ browser_added_observer.WaitForSingleNewBrowser();
+
+ ASSERT_FALSE(session_service->processed_any_commands());
+}
+#endif // !defined(OS_CHROMEOS)
+
// This test needs to be placed outside the anonymous namespace because we
// need to access private type of Browser.
class AppModeTest : public BrowserTest {