Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(286)

Unified Diff: chrome/browser/sessions/base_session_service.h

Issue 672083002: Refactoring of SessionService to get componentized. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: One more self nit Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/sessions/base_session_service.h
diff --git a/chrome/browser/sessions/base_session_service.h b/chrome/browser/sessions/base_session_service.h
index 3ce684cbf07291d4456ee579193f581035aaf89b..f1b081440e8b2487e59698732127d3c762f7bcb9 100644
--- a/chrome/browser/sessions/base_session_service.h
+++ b/chrome/browser/sessions/base_session_service.h
@@ -9,13 +9,9 @@
#include "base/callback.h"
#include "base/files/file_path.h"
#include "base/gtest_prod_util.h"
-#include "base/location.h"
-#include "base/memory/ref_counted.h"
#include "base/memory/scoped_vector.h"
#include "base/memory/weak_ptr.h"
#include "base/task/cancelable_task_tracker.h"
-#include "base/threading/sequenced_worker_pool.h"
-#include "components/sessions/session_id.h"
#include "url/gurl.h"
class BaseSessionServiceDelegate;
@@ -39,31 +35,44 @@ class BaseSessionService {
TAB_RESTORE
};
+ typedef base::Callback<void(ScopedVector<SessionCommand>)>
+ GetCommandsCallback;
+
+ // Max number of navigation entries in each direction we'll persist.
+ static const int max_persist_navigation_count;
+
// Creates a new BaseSessionService. After creation you need to invoke
- // Init.
+ // Init. |delegate| will remain owned by the creator and it is guaranteed
+ // that its lifetime surpasses this class.
// |type| gives the type of session service, |path| the path to save files to.
BaseSessionService(SessionType type,
const base::FilePath& path,
- scoped_ptr<BaseSessionServiceDelegate> delegate);
+ BaseSessionServiceDelegate* delegate);
+ virtual ~BaseSessionService();
+
+ // Schedules a command. This adds |command| to pending_commands_ and
+ // invokes StartSaveTimer to start a timer that invokes Save at a later
+ // time.
+ virtual void ScheduleCommand(scoped_ptr<SessionCommand> command);
+
+ // Starts the timer that invokes Save (if timer isn't already running).
+ void StartSaveTimer();
// Deletes the last session.
void DeleteLastSession();
- typedef base::Callback<void(ScopedVector<SessionCommand>)>
- InternalGetCommandsCallback;
+ // Moves the current session to the last session.
+ void MoveCurrentSessionToLastSession();
- protected:
- virtual ~BaseSessionService();
+ // Schedules to save all pending commands to the backend immediately (if a
+ // backend exists).
+ virtual void SaveNow();
- // Returns the backend.
- SessionBackend* backend() const { return backend_.get(); }
-
- // Returns the set of commands that needed to be scheduled. The commands
- // in the vector are owned by BaseSessionService, until they are scheduled
- // on the backend at which point the backend owns the commands.
- std::vector<SessionCommand*>& pending_commands() {
- return pending_commands_;
- }
+ // Uses the backend to load the last session commands from disc. |callback|
+ // gets called once the data has arrived.
+ base::CancelableTaskTracker::TaskId ScheduleGetLastSessionCommands(
+ const GetCommandsCallback& callback,
+ base::CancelableTaskTracker* tracker);
// Whether the next save resets the file before writing to it.
void set_pending_reset(bool value) { pending_reset_ = value; }
@@ -72,100 +81,36 @@ class BaseSessionService {
// Returns the number of commands sent down since the last reset.
int commands_since_reset() const { return commands_since_reset_; }
- // Schedules a command. This adds |command| to pending_commands_ and
- // invokes StartSaveTimer to start a timer that invokes Save at a later
- // time.
- virtual void ScheduleCommand(SessionCommand* command);
+ // Returns the set of commands which were scheduled to be written. Once
+ // committed to the backend, the commands are removed from here.
+ ScopedVector<SessionCommand>& pending_commands() {
+ return pending_commands_;
+ }
- // Starts the timer that invokes Save (if timer isn't already running).
- void StartSaveTimer();
+ // Returns true if any commands got processed yet (used by unit tests).
+ bool ProcessedAnyCommandsForTest();
- // Saves pending commands to the backend. This is invoked from the timer
- // scheduled by StartSaveTimer.
- virtual void Save();
-
- // Creates a SessionCommand that represents a navigation.
- SessionCommand* CreateUpdateTabNavigationCommand(
- SessionID::id_type command_id,
- SessionID::id_type tab_id,
- const sessions::SerializedNavigationEntry& navigation);
-
- // Creates a SessionCommand that represents marking a tab as an application.
- SessionCommand* CreateSetTabExtensionAppIDCommand(
- SessionID::id_type command_id,
- SessionID::id_type tab_id,
- const std::string& extension_id);
-
- // Creates a SessionCommand that containing user agent override used by a
- // tab's navigations.
- SessionCommand* CreateSetTabUserAgentOverrideCommand(
- SessionID::id_type command_id,
- SessionID::id_type tab_id,
- const std::string& user_agent_override);
-
- // Creates a SessionCommand stores a browser window's app name.
- SessionCommand* CreateSetWindowAppNameCommand(
- SessionID::id_type command_id,
- SessionID::id_type window_id,
- const std::string& app_name);
-
- // Converts a SessionCommand previously created by
- // CreateUpdateTabNavigationCommand into a
- // sessions::SerializedNavigationEntry. Returns true on success. If
- // successful |tab_id| is set to the id of the restored tab.
- bool RestoreUpdateTabNavigationCommand(
- const SessionCommand& command,
- sessions::SerializedNavigationEntry* navigation,
- SessionID::id_type* tab_id);
-
- // Extracts a SessionCommand as previously created by
- // CreateSetTabExtensionAppIDCommand into the tab id and application
- // extension id.
- bool RestoreSetTabExtensionAppIDCommand(
- const SessionCommand& command,
- SessionID::id_type* tab_id,
- std::string* extension_app_id);
-
- // Extracts a SessionCommand as previously created by
- // CreateSetTabUserAgentOverrideCommand into the tab id and user agent.
- bool RestoreSetTabUserAgentOverrideCommand(
- const SessionCommand& command,
- SessionID::id_type* tab_id,
- std::string* user_agent_override);
-
- // Extracts a SessionCommand as previously created by
- // CreateSetWindowAppNameCommand into the window id and application name.
- bool RestoreSetWindowAppNameCommand(
- const SessionCommand& command,
- SessionID::id_type* window_id,
- std::string* app_name);
-
- // Returns true if the entry at specified |url| should be written to disk.
- bool ShouldTrackEntry(const GURL& url);
-
- // Invokes SessionBackend::ReadLastSessionCommands with callback on the
- // backend thread.
- // If testing, SessionBackend::ReadLastSessionCommands is invoked directly.
- base::CancelableTaskTracker::TaskId ScheduleGetLastSessionCommands(
- const InternalGetCommandsCallback& callback,
- base::CancelableTaskTracker* tracker);
+ private:
+ friend class BetterSessionRestoreCrashTest;
+ friend class SessionServiceTestHelper;
+
+ // Saves pending commands to the backend immediately. This gets invoked by the
+ // timer scheduled by StartSaveTimer - or via SaveNow().
+ void SaveInternal();
+
+ // Returns the backend.
+ SessionBackend* backend() const { return backend_.get(); }
// This posts the task to the SequencedWorkerPool, or run immediately
// if the SequencedWorkerPool has been shutdown.
void RunTaskOnBackendThread(const tracked_objects::Location& from_here,
const base::Closure& task);
- // Max number of navigation entries in each direction we'll persist.
- static const int max_persist_navigation_count;
-
- private:
- friend class BetterSessionRestoreCrashTest;
-
- // The backend.
+ // The backend object which reads and saves commands.
scoped_refptr<SessionBackend> backend_;
// Commands we need to send over to the backend.
- std::vector<SessionCommand*> pending_commands_;
+ ScopedVector<SessionCommand> pending_commands_;
// Whether the backend file should be recreated the next time we send
// over the commands.
@@ -174,7 +119,7 @@ class BaseSessionService {
// The number of commands sent to the backend before doing a reset.
int commands_since_reset_;
- scoped_ptr<BaseSessionServiceDelegate> delegate_;
+ BaseSessionServiceDelegate* delegate_;
// A token to make sure that all tasks will be serialized.
base::SequencedWorkerPool::SequenceToken sequence_token_;

Powered by Google App Engine
This is Rietveld 408576698