OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_SESSIONS_BASE_SESSION_SERVICE_H_ | 5 #ifndef CHROME_BROWSER_SESSIONS_BASE_SESSION_SERVICE_H_ |
6 #define CHROME_BROWSER_SESSIONS_BASE_SESSION_SERVICE_H_ | 6 #define CHROME_BROWSER_SESSIONS_BASE_SESSION_SERVICE_H_ |
7 #pragma once | 7 #pragma once |
8 | 8 |
9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
10 #include "base/callback.h" | 10 #include "base/callback.h" |
| 11 #include "base/location.h" |
11 #include "base/file_path.h" | 12 #include "base/file_path.h" |
12 #include "base/memory/ref_counted.h" | 13 #include "base/memory/ref_counted.h" |
13 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
14 #include "chrome/browser/profiles/profile_keyed_service.h" | 15 #include "chrome/browser/profiles/profile_keyed_service.h" |
15 #include "chrome/browser/sessions/session_id.h" | 16 #include "chrome/browser/sessions/session_id.h" |
16 #include "content/browser/cancelable_request.h" | 17 #include "content/browser/cancelable_request.h" |
17 #include "googleurl/src/gurl.h" | 18 #include "googleurl/src/gurl.h" |
18 | 19 |
19 class NavigationEntry; | 20 class NavigationEntry; |
20 class Profile; | 21 class Profile; |
21 class SessionBackend; | 22 class SessionBackend; |
22 class SessionCommand; | 23 class SessionCommand; |
23 class TabNavigation; | 24 class TabNavigation; |
24 | 25 |
25 namespace base { | |
26 class Thread; | |
27 } | |
28 | |
29 // BaseSessionService is the super class of both tab restore service and | 26 // BaseSessionService is the super class of both tab restore service and |
30 // session service. It contains commonality needed by both, in particular | 27 // session service. It contains commonality needed by both, in particular |
31 // it manages a set of SessionCommands that are periodically sent to a | 28 // it manages a set of SessionCommands that are periodically sent to a |
32 // SessionBackend. | 29 // SessionBackend. |
33 class BaseSessionService : public CancelableRequestProvider, | 30 class BaseSessionService : public CancelableRequestProvider, |
34 public ProfileKeyedService { | 31 public ProfileKeyedService { |
35 public: | 32 public: |
36 // Identifies the type of session service this is. This is used by the | 33 // Identifies the type of session service this is. This is used by the |
37 // backend to determine the name of the files. | 34 // backend to determine the name of the files. |
38 enum SessionType { | 35 enum SessionType { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
78 private: | 75 private: |
79 DISALLOW_COPY_AND_ASSIGN(InternalGetCommandsRequest); | 76 DISALLOW_COPY_AND_ASSIGN(InternalGetCommandsRequest); |
80 }; | 77 }; |
81 | 78 |
82 protected: | 79 protected: |
83 virtual ~BaseSessionService(); | 80 virtual ~BaseSessionService(); |
84 | 81 |
85 // Returns the backend. | 82 // Returns the backend. |
86 SessionBackend* backend() const { return backend_; } | 83 SessionBackend* backend() const { return backend_; } |
87 | 84 |
88 // Returns the thread the backend runs on. This returns NULL during testing. | |
89 base::Thread* backend_thread() const { return backend_thread_; } | |
90 | |
91 // Returns the set of commands that needed to be scheduled. The commands | 85 // Returns the set of commands that needed to be scheduled. The commands |
92 // in the vector are owned by BaseSessionService, until they are scheduled | 86 // in the vector are owned by BaseSessionService, until they are scheduled |
93 // on the backend at which point the backend owns the commands. | 87 // on the backend at which point the backend owns the commands. |
94 std::vector<SessionCommand*>& pending_commands() { | 88 std::vector<SessionCommand*>& pending_commands() { |
95 return pending_commands_; | 89 return pending_commands_; |
96 } | 90 } |
97 | 91 |
98 // Whether the next save resets the file before writing to it. | 92 // Whether the next save resets the file before writing to it. |
99 void set_pending_reset(bool value) { pending_reset_ = value; } | 93 void set_pending_reset(bool value) { pending_reset_ = value; } |
100 bool pending_reset() const { return pending_reset_; } | 94 bool pending_reset() const { return pending_reset_; } |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 Handle ScheduleGetLastSessionCommands( | 144 Handle ScheduleGetLastSessionCommands( |
151 InternalGetCommandsRequest* request, | 145 InternalGetCommandsRequest* request, |
152 CancelableRequestConsumerBase* consumer); | 146 CancelableRequestConsumerBase* consumer); |
153 | 147 |
154 // Invokes ReadCurrentSessionCommands with request on the backend thread. | 148 // Invokes ReadCurrentSessionCommands with request on the backend thread. |
155 // If testing, ReadLastSessionCommands is invoked directly. | 149 // If testing, ReadLastSessionCommands is invoked directly. |
156 Handle ScheduleGetCurrentSessionCommands( | 150 Handle ScheduleGetCurrentSessionCommands( |
157 InternalGetCommandsRequest* request, | 151 InternalGetCommandsRequest* request, |
158 CancelableRequestConsumerBase* consumer); | 152 CancelableRequestConsumerBase* consumer); |
159 | 153 |
| 154 // In production, this posts the task to the FILE thread. For |
| 155 // tests, it immediately runs the specified task on the current |
| 156 // thread. |
| 157 bool RunTaskOnBackendThread(const tracked_objects::Location& from_here, |
| 158 const base::Closure& task); |
| 159 |
160 // Max number of navigation entries in each direction we'll persist. | 160 // Max number of navigation entries in each direction we'll persist. |
161 static const int max_persist_navigation_count; | 161 static const int max_persist_navigation_count; |
162 | 162 |
163 private: | 163 private: |
164 // The profile. This may be null during testing. | 164 // The profile. This may be null during testing. |
165 Profile* profile_; | 165 Profile* profile_; |
166 | 166 |
167 // Path to read from. This is only used if profile_ is NULL. | 167 // Path to read from. This is only used if profile_ is NULL. |
168 const FilePath& path_; | 168 const FilePath& path_; |
169 | 169 |
170 // The backend. | 170 // The backend. |
171 scoped_refptr<SessionBackend> backend_; | 171 scoped_refptr<SessionBackend> backend_; |
172 | 172 |
173 // Thread backend tasks are run on, is NULL during testing. | |
174 base::Thread* backend_thread_; | |
175 | |
176 // Used to invoke Save. | 173 // Used to invoke Save. |
177 base::WeakPtrFactory<BaseSessionService> weak_factory_; | 174 base::WeakPtrFactory<BaseSessionService> weak_factory_; |
178 | 175 |
179 // Commands we need to send over to the backend. | 176 // Commands we need to send over to the backend. |
180 std::vector<SessionCommand*> pending_commands_; | 177 std::vector<SessionCommand*> pending_commands_; |
181 | 178 |
182 // Whether the backend file should be recreated the next time we send | 179 // Whether the backend file should be recreated the next time we send |
183 // over the commands. | 180 // over the commands. |
184 bool pending_reset_; | 181 bool pending_reset_; |
185 | 182 |
186 // The number of commands sent to the backend before doing a reset. | 183 // The number of commands sent to the backend before doing a reset. |
187 int commands_since_reset_; | 184 int commands_since_reset_; |
188 | 185 |
189 DISALLOW_COPY_AND_ASSIGN(BaseSessionService); | 186 DISALLOW_COPY_AND_ASSIGN(BaseSessionService); |
190 }; | 187 }; |
191 | 188 |
192 #endif // CHROME_BROWSER_SESSIONS_BASE_SESSION_SERVICE_H_ | 189 #endif // CHROME_BROWSER_SESSIONS_BASE_SESSION_SERVICE_H_ |
OLD | NEW |