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

Side by Side Diff: chrome/browser/sessions/base_session_service.cc

Issue 672083002: Refactoring of SessionService to get componentized. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing windows compile problem Created 6 years, 1 month 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "chrome/browser/sessions/base_session_service.h" 5 #include "chrome/browser/sessions/base_session_service.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/pickle.h"
9 #include "base/threading/thread.h" 8 #include "base/threading/thread.h"
10 #include "chrome/browser/sessions/base_session_service_delegate.h" 9 #include "chrome/browser/sessions/base_session_service_delegate.h"
11 #include "chrome/browser/sessions/session_backend.h" 10 #include "chrome/browser/sessions/session_backend.h"
12 #include "chrome/browser/sessions/session_types.h"
13 11
14 // BaseSessionService --------------------------------------------------------- 12 // BaseSessionService ---------------------------------------------------------
15 13
16 namespace { 14 namespace {
17 15
18 // Helper used by CreateUpdateTabNavigationCommand(). It writes |str| to
19 // |pickle|, if and only if |str| fits within (|max_bytes| - |*bytes_written|).
20 // |bytes_written| is incremented to reflect the data written.
21 void WriteStringToPickle(Pickle& pickle, int* bytes_written, int max_bytes,
22 const std::string& str) {
23 int num_bytes = str.size() * sizeof(char);
24 if (*bytes_written + num_bytes < max_bytes) {
25 *bytes_written += num_bytes;
26 pickle.WriteString(str);
27 } else {
28 pickle.WriteString(std::string());
29 }
30 }
31
32 // Helper used by ScheduleGetLastSessionCommands. It runs callback on TaskRunner 16 // Helper used by ScheduleGetLastSessionCommands. It runs callback on TaskRunner
33 // thread if it's not canceled. 17 // thread if it's not canceled.
34 void RunIfNotCanceled( 18 void RunIfNotCanceled(
35 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, 19 const base::CancelableTaskTracker::IsCanceledCallback& is_canceled,
36 const BaseSessionService::InternalGetCommandsCallback& callback, 20 const BaseSessionService::InternalGetCommandsCallback& callback,
37 ScopedVector<SessionCommand> commands) { 21 ScopedVector<SessionCommand> commands) {
38 if (is_canceled.Run()) 22 if (is_canceled.Run())
39 return; 23 return;
40 callback.Run(commands.Pass()); 24 callback.Run(commands.Pass());
41 } 25 }
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 99
116 // Backend took ownership of commands. 100 // Backend took ownership of commands.
117 pending_commands_.clear(); 101 pending_commands_.clear();
118 102
119 if (pending_reset_) { 103 if (pending_reset_) {
120 commands_since_reset_ = 0; 104 commands_since_reset_ = 0;
121 pending_reset_ = false; 105 pending_reset_ = false;
122 } 106 }
123 } 107 }
124 108
125 SessionCommand* BaseSessionService::CreateUpdateTabNavigationCommand(
126 SessionID::id_type command_id,
127 SessionID::id_type tab_id,
128 const sessions::SerializedNavigationEntry& navigation) {
129 // Use pickle to handle marshalling.
130 Pickle pickle;
131 pickle.WriteInt(tab_id);
132 // We only allow navigations up to 63k (which should be completely
133 // reasonable).
134 static const size_t max_state_size =
135 std::numeric_limits<SessionCommand::size_type>::max() - 1024;
136 navigation.WriteToPickle(max_state_size, &pickle);
137 return new SessionCommand(command_id, pickle);
138 }
139
140 SessionCommand* BaseSessionService::CreateSetTabExtensionAppIDCommand(
141 SessionID::id_type command_id,
142 SessionID::id_type tab_id,
143 const std::string& extension_id) {
144 // Use pickle to handle marshalling.
145 Pickle pickle;
146 pickle.WriteInt(tab_id);
147
148 // Enforce a max for ids. They should never be anywhere near this size.
149 static const SessionCommand::size_type max_id_size =
150 std::numeric_limits<SessionCommand::size_type>::max() - 1024;
151
152 int bytes_written = 0;
153
154 WriteStringToPickle(pickle, &bytes_written, max_id_size, extension_id);
155
156 return new SessionCommand(command_id, pickle);
157 }
158
159 SessionCommand* BaseSessionService::CreateSetTabUserAgentOverrideCommand(
160 SessionID::id_type command_id,
161 SessionID::id_type tab_id,
162 const std::string& user_agent_override) {
163 // Use pickle to handle marshalling.
164 Pickle pickle;
165 pickle.WriteInt(tab_id);
166
167 // Enforce a max for the user agent length. They should never be anywhere
168 // near this size.
169 static const SessionCommand::size_type max_user_agent_size =
170 std::numeric_limits<SessionCommand::size_type>::max() - 1024;
171
172 int bytes_written = 0;
173
174 WriteStringToPickle(pickle, &bytes_written, max_user_agent_size,
175 user_agent_override);
176
177 return new SessionCommand(command_id, pickle);
178 }
179
180 SessionCommand* BaseSessionService::CreateSetWindowAppNameCommand(
181 SessionID::id_type command_id,
182 SessionID::id_type window_id,
183 const std::string& app_name) {
184 // Use pickle to handle marshalling.
185 Pickle pickle;
186 pickle.WriteInt(window_id);
187
188 // Enforce a max for ids. They should never be anywhere near this size.
189 static const SessionCommand::size_type max_id_size =
190 std::numeric_limits<SessionCommand::size_type>::max() - 1024;
191
192 int bytes_written = 0;
193
194 WriteStringToPickle(pickle, &bytes_written, max_id_size, app_name);
195
196 return new SessionCommand(command_id, pickle);
197 }
198
199 bool BaseSessionService::RestoreUpdateTabNavigationCommand(
200 const SessionCommand& command,
201 sessions::SerializedNavigationEntry* navigation,
202 SessionID::id_type* tab_id) {
203 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
204 if (!pickle.get())
205 return false;
206 PickleIterator iterator(*pickle);
207 return
208 pickle->ReadInt(&iterator, tab_id) &&
209 navigation->ReadFromPickle(&iterator);
210 }
211
212 bool BaseSessionService::RestoreSetTabExtensionAppIDCommand(
213 const SessionCommand& command,
214 SessionID::id_type* tab_id,
215 std::string* extension_app_id) {
216 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
217 if (!pickle.get())
218 return false;
219
220 PickleIterator iterator(*pickle);
221 return pickle->ReadInt(&iterator, tab_id) &&
222 pickle->ReadString(&iterator, extension_app_id);
223 }
224
225 bool BaseSessionService::RestoreSetTabUserAgentOverrideCommand(
226 const SessionCommand& command,
227 SessionID::id_type* tab_id,
228 std::string* user_agent_override) {
229 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
230 if (!pickle.get())
231 return false;
232
233 PickleIterator iterator(*pickle);
234 return pickle->ReadInt(&iterator, tab_id) &&
235 pickle->ReadString(&iterator, user_agent_override);
236 }
237
238 bool BaseSessionService::RestoreSetWindowAppNameCommand(
239 const SessionCommand& command,
240 SessionID::id_type* window_id,
241 std::string* app_name) {
242 scoped_ptr<Pickle> pickle(command.PayloadAsPickle());
243 if (!pickle.get())
244 return false;
245
246 PickleIterator iterator(*pickle);
247 return pickle->ReadInt(&iterator, window_id) &&
248 pickle->ReadString(&iterator, app_name);
249 }
250
251 bool BaseSessionService::ShouldTrackEntry(const GURL& url) { 109 bool BaseSessionService::ShouldTrackEntry(const GURL& url) {
252 return url.is_valid() && delegate_->ShouldTrackEntry(url); 110 return url.is_valid() && delegate_->ShouldTrackEntry(url);
253 } 111 }
254 112
255 base::CancelableTaskTracker::TaskId 113 base::CancelableTaskTracker::TaskId
256 BaseSessionService::ScheduleGetLastSessionCommands( 114 BaseSessionService::ScheduleGetLastSessionCommands(
257 const InternalGetCommandsCallback& callback, 115 const InternalGetCommandsCallback& callback,
258 base::CancelableTaskTracker* tracker) { 116 base::CancelableTaskTracker* tracker) {
259 base::CancelableTaskTracker::IsCanceledCallback is_canceled; 117 base::CancelableTaskTracker::IsCanceledCallback is_canceled;
260 base::CancelableTaskTracker::TaskId id = 118 base::CancelableTaskTracker::TaskId id =
(...skipping 19 matching lines...) Expand all
280 base::SequencedWorkerPool* pool = delegate_->GetBlockingPool(); 138 base::SequencedWorkerPool* pool = delegate_->GetBlockingPool();
281 if (!pool->IsShutdownInProgress()) { 139 if (!pool->IsShutdownInProgress()) {
282 pool->PostSequencedWorkerTask(sequence_token_, from_here, task); 140 pool->PostSequencedWorkerTask(sequence_token_, from_here, task);
283 } else { 141 } else {
284 // Fall back to executing on the main thread if the sequence 142 // Fall back to executing on the main thread if the sequence
285 // worker pool has been requested to shutdown (around shutdown 143 // worker pool has been requested to shutdown (around shutdown
286 // time). 144 // time).
287 task.Run(); 145 task.Run();
288 } 146 }
289 } 147 }
OLDNEW
« no previous file with comments | « chrome/browser/sessions/base_session_service.h ('k') | chrome/browser/sessions/base_session_service_commands.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698