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

Side by Side Diff: webkit/glue/glue_serialize.cc

Issue 7044018: This adds a Flush to the session backend to help with data corruption (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 7 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/browser/sessions/session_backend.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "webkit/glue/glue_serialize.h" 5 #include "webkit/glue/glue_serialize.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/pickle.h" 9 #include "base/pickle.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
289 if (obj->version >= 4) 289 if (obj->version >= 4)
290 http_body.setIdentifier(ReadInteger64(obj)); 290 http_body.setIdentifier(ReadInteger64(obj));
291 291
292 return http_body; 292 return http_body;
293 } 293 }
294 294
295 // Writes the HistoryItem data into the SerializeObject object for 295 // Writes the HistoryItem data into the SerializeObject object for
296 // serialization. 296 // serialization.
297 void WriteHistoryItem( 297 void WriteHistoryItem(
298 const WebHistoryItem& item, SerializeObject* obj) { 298 const WebHistoryItem& item, SerializeObject* obj) {
299 // If the history item is not valid, then just return.
300 if (item.IsNull())
301 return;
302
299 // WARNING: This data may be persisted for later use. As such, care must be 303 // WARNING: This data may be persisted for later use. As such, care must be
300 // taken when changing the serialized format. If a new field needs to be 304 // taken when changing the serialized format. If a new field needs to be
301 // written, only adding at the end will make it easier to deal with loading 305 // written, only adding at the end will make it easier to deal with loading
302 // older versions. Similarly, this should NOT save fields with sensitive 306 // older versions. Similarly, this should NOT save fields with sensitive
303 // data, such as password fields. 307 // data, such as password fields.
304 WriteInteger(kVersion, obj); 308 WriteInteger(kVersion, obj);
305 WriteString(item.urlString(), obj); 309 WriteString(item.urlString(), obj);
306 WriteString(item.originalURLString(), obj); 310 WriteString(item.originalURLString(), obj);
307 WriteString(item.target(), obj); 311 WriteString(item.target(), obj);
308 WriteString(item.parent(), obj); 312 WriteString(item.parent(), obj);
(...skipping 12 matching lines...) Expand all
321 WriteInteger64(item.itemSequenceNumber(), obj); 325 WriteInteger64(item.itemSequenceNumber(), obj);
322 if (kVersion >= 6) 326 if (kVersion >= 6)
323 WriteInteger64(item.documentSequenceNumber(), obj); 327 WriteInteger64(item.documentSequenceNumber(), obj);
324 if (kVersion >= 7) { 328 if (kVersion >= 7) {
325 bool has_state_object = !item.stateObject().isNull(); 329 bool has_state_object = !item.stateObject().isNull();
326 WriteBoolean(has_state_object, obj); 330 WriteBoolean(has_state_object, obj);
327 if (has_state_object) 331 if (has_state_object)
328 WriteString(item.stateObject().toString(), obj); 332 WriteString(item.stateObject().toString(), obj);
329 } 333 }
330 334
335 WriteFormData(item.httpBody(), obj);
336 WriteString(item.httpContentType(), obj);
337
331 // Yes, the referrer is written twice. This is for backwards 338 // Yes, the referrer is written twice. This is for backwards
332 // compatibility with the format. 339 // compatibility with the format.
333 WriteFormData(item.httpBody(), obj);
334 WriteString(item.httpContentType(), obj);
335 WriteString(item.referrer(), obj); 340 WriteString(item.referrer(), obj);
336 341
337 // Subitems 342 // Write subitems, making sure that we skip any NULL items (which
338 const WebVector<WebHistoryItem>& children = item.children(); 343 // can occur with corrupted input), and adjust the item count to
339 WriteInteger(static_cast<int>(children.size()), obj); 344 // match.
340 for (size_t i = 0, c = children.size(); i < c; ++i) 345 const WebVector<WebHistoryItem>& child_vector = item.children();
341 WriteHistoryItem(children[i], obj); 346 int real_size = static_cast<int>(child_vector.size());
347 for (size_t i = 0, size = child_vector.size(); i < size; ++i) {
348 if (child_vector[i].IsNull())
349 real_size--;
350 }
351
352 if (real_size > 0) {
353 WriteInteger(real_size, obj);
sky 2011/05/18 22:39:07 Move this to before the if and nuke the else.
354 for (size_t i = 0, size = child_vector.size(); i < size; ++i) {
355 if (!child_vector[i].IsNull())
356 WriteHistoryItem(child_vector[i], obj);
357 }
358 } else {
359 WriteInteger(0, obj);
360 }
342 } 361 }
343 362
344 // Creates a new HistoryItem tree based on the serialized string. 363 // Creates a new HistoryItem tree based on the serialized string.
345 // Assumes the data is in the format returned by WriteHistoryItem. 364 // Assumes the data is in the format returned by WriteHistoryItem.
346 WebHistoryItem ReadHistoryItem( 365 WebHistoryItem ReadHistoryItem(
347 const SerializeObject* obj, 366 const SerializeObject* obj,
348 bool include_form_data, 367 bool include_form_data,
349 bool include_scroll_offset) { 368 bool include_scroll_offset) {
350 // See note in WriteHistoryItem. on this. 369 // See note in WriteHistoryItem. on this.
351 obj->version = ReadInteger(obj); 370 obj->version = ReadInteger(obj);
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 kVersion = version; 517 kVersion = version;
499 518
500 SerializeObject obj; 519 SerializeObject obj;
501 WriteHistoryItem(item, &obj); 520 WriteHistoryItem(item, &obj);
502 *serialized_item = obj.GetAsString(); 521 *serialized_item = obj.GetAsString();
503 522
504 kVersion = real_version; 523 kVersion = real_version;
505 } 524 }
506 525
507 } // namespace webkit_glue 526 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « chrome/browser/sessions/session_backend.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698