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

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

Issue 42619: Fixes bug where first login attempt to hotmail after session restore... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 9 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/tab_restore_service_unittest.cc ('k') | webkit/glue/webkit_glue.h » ('j') | 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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 "config.h" 5 #include "config.h"
6 #include <string> 6 #include <string>
7 7
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 9
10 MSVC_PUSH_WARNING_LEVEL(0); 10 MSVC_PUSH_WARNING_LEVEL(0);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 WriteString(item->referrer(), obj); 264 WriteString(item->referrer(), obj);
265 265
266 // Subitems 266 // Subitems
267 WriteInteger(static_cast<int>(item->children().size()), obj); 267 WriteInteger(static_cast<int>(item->children().size()), obj);
268 for (size_t i = 0, c = item->children().size(); i < c; ++i) 268 for (size_t i = 0, c = item->children().size(); i < c; ++i)
269 WriteHistoryItem(item->children().at(i).get(), obj); 269 WriteHistoryItem(item->children().at(i).get(), obj);
270 } 270 }
271 271
272 // Creates a new HistoryItem tree based on the serialized string. 272 // Creates a new HistoryItem tree based on the serialized string.
273 // Assumes the data is in the format returned by WriteHistoryItem. 273 // Assumes the data is in the format returned by WriteHistoryItem.
274 static PassRefPtr<HistoryItem> ReadHistoryItem(const SerializeObject* obj) { 274 static PassRefPtr<HistoryItem> ReadHistoryItem(const SerializeObject* obj,
275 bool include_form_data) {
275 // See note in WriteHistoryItem. on this. 276 // See note in WriteHistoryItem. on this.
276 obj->version = ReadInteger(obj); 277 obj->version = ReadInteger(obj);
277 278
278 if (obj->version > kVersion || obj->version < 1) 279 if (obj->version > kVersion || obj->version < 1)
279 return NULL; 280 return NULL;
280 281
281 RefPtr<HistoryItem> item = HistoryItem::create(); 282 RefPtr<HistoryItem> item = HistoryItem::create();
282 283
283 item->setURLString(ReadString(obj)); 284 item->setURLString(ReadString(obj));
284 item->setOriginalURLString(ReadString(obj)); 285 item->setOriginalURLString(ReadString(obj));
285 item->setTarget(ReadString(obj)); 286 item->setTarget(ReadString(obj));
286 item->setParent(ReadString(obj)); 287 item->setParent(ReadString(obj));
287 item->setTitle(ReadString(obj)); 288 item->setTitle(ReadString(obj));
288 item->setAlternateTitle(ReadString(obj)); 289 item->setAlternateTitle(ReadString(obj));
289 item->setLastVisitedTime(ReadReal(obj)); 290 item->setLastVisitedTime(ReadReal(obj));
290 int x = ReadInteger(obj); 291 int x = ReadInteger(obj);
291 int y = ReadInteger(obj); 292 int y = ReadInteger(obj);
292 item->setScrollPoint(IntPoint(x, y)); 293 item->setScrollPoint(IntPoint(x, y));
293 item->setIsTargetItem(ReadBoolean(obj)); 294 item->setIsTargetItem(ReadBoolean(obj));
294 item->setVisitCount(ReadInteger(obj)); 295 item->setVisitCount(ReadInteger(obj));
295 item->setReferrer(ReadString(obj)); 296 item->setReferrer(ReadString(obj));
296 297
297 Vector<String> document_state; 298 Vector<String> document_state;
298 ReadStringVector(obj, &document_state); 299 ReadStringVector(obj, &document_state);
299 item->setDocumentState(document_state); 300 item->setDocumentState(document_state);
300 301
301 // Form data. If there is any form data, we assume POST, otherwise GET. 302 // Form data. If there is any form data, we assume POST, otherwise GET.
302 // ResourceRequest takes ownership of the new FormData, then gives it to 303 // FormData is ref counted.
303 // HistoryItem.
304 ResourceRequest dummy_request; // only way to initialize HistoryItem 304 ResourceRequest dummy_request; // only way to initialize HistoryItem
305 dummy_request.setHTTPBody(ReadFormData(obj)); 305 dummy_request.setHTTPBody(ReadFormData(obj));
306 dummy_request.setHTTPContentType(ReadString(obj)); 306 dummy_request.setHTTPContentType(ReadString(obj));
307 dummy_request.setHTTPReferrer(ReadString(obj)); 307 dummy_request.setHTTPReferrer(ReadString(obj));
308 if (dummy_request.httpBody()) 308 if (dummy_request.httpBody())
309 dummy_request.setHTTPMethod("POST"); 309 dummy_request.setHTTPMethod("POST");
310 item->setFormInfoFromRequest(dummy_request); 310 if (include_form_data)
311 item->setFormInfoFromRequest(dummy_request);
311 312
312 // Subitems 313 // Subitems
313 int num_children = ReadInteger(obj); 314 int num_children = ReadInteger(obj);
314 for (int i = 0; i < num_children; ++i) 315 for (int i = 0; i < num_children; ++i)
315 item->addChildItem(ReadHistoryItem(obj)); 316 item->addChildItem(ReadHistoryItem(obj, include_form_data));
316 317
317 return item.release(); 318 return item.release();
318 } 319 }
319 320
320 // Serialize a HistoryItem to a string, using our JSON Value serializer. 321 // Serialize a HistoryItem to a string, using our JSON Value serializer.
321 void HistoryItemToString(PassRefPtr<HistoryItem> item, 322 void HistoryItemToString(PassRefPtr<HistoryItem> item,
322 std::string* serialized_item) { 323 std::string* serialized_item) {
323 if (!item) { 324 if (!item) {
324 serialized_item->clear(); 325 serialized_item->clear();
325 return; 326 return;
326 } 327 }
327 328
328 SerializeObject obj; 329 SerializeObject obj;
329 WriteHistoryItem(item.get(), &obj); 330 WriteHistoryItem(item.get(), &obj);
330 *serialized_item = obj.GetAsString(); 331 *serialized_item = obj.GetAsString();
331 } 332 }
332 333
333 // Reconstruct a HistoryItem from a string, using our JSON Value deserializer. 334 // Reconstruct a HistoryItem from a string, using our JSON Value deserializer.
334 // This assumes that the given serialized string has all the required key,value 335 // This assumes that the given serialized string has all the required key,value
335 // pairs, and does minimal error checking. 336 // pairs, and does minimal error checking. If |include_form_data| is true,
337 // the form data from a post is restored, otherwise the form data is empty.
336 PassRefPtr<HistoryItem> HistoryItemFromString( 338 PassRefPtr<HistoryItem> HistoryItemFromString(
darin (slow to review) 2009/03/26 17:03:48 nit: since this function is only used in this file
337 const std::string& serialized_item) { 339 const std::string& serialized_item,
340 bool include_form_data) {
338 if (serialized_item.empty()) 341 if (serialized_item.empty())
339 return NULL; 342 return NULL;
340 343
341 SerializeObject obj(serialized_item.data(), 344 SerializeObject obj(serialized_item.data(),
342 static_cast<int>(serialized_item.length())); 345 static_cast<int>(serialized_item.length()));
343 return ReadHistoryItem(&obj); 346 return ReadHistoryItem(&obj, include_form_data);
347 }
348
349 PassRefPtr<HistoryItem> HistoryItemFromString(
350 const std::string& serialized_item) {
351 return HistoryItemFromString(serialized_item, true);
344 } 352 }
345 353
346 // For testing purposes only. 354 // For testing purposes only.
347 void HistoryItemToVersionedString(PassRefPtr<HistoryItem> item, int version, 355 void HistoryItemToVersionedString(PassRefPtr<HistoryItem> item, int version,
348 std::string* serialized_item) { 356 std::string* serialized_item) {
349 if (!item) { 357 if (!item) {
350 serialized_item->clear(); 358 serialized_item->clear();
351 return; 359 return;
352 } 360 }
353 361
354 // Temporarily change the version. 362 // Temporarily change the version.
355 int real_version = kVersion; 363 int real_version = kVersion;
356 kVersion = version; 364 kVersion = version;
357 365
358 SerializeObject obj; 366 SerializeObject obj;
359 WriteHistoryItem(item.get(), &obj); 367 WriteHistoryItem(item.get(), &obj);
360 *serialized_item = obj.GetAsString(); 368 *serialized_item = obj.GetAsString();
361 369
362 kVersion = real_version; 370 kVersion = real_version;
363 } 371 }
364 372
365 std::string CreateHistoryStateForURL(const GURL& url) { 373 std::string CreateHistoryStateForURL(const GURL& url) {
366 // TODO(eseide): We probably should be passing a list visit time other than 0 374 // TODO(eseide): We probably should be passing a list visit time other than 0
367 RefPtr<HistoryItem> item(HistoryItem::create(GURLToKURL(url), String(), 0)); 375 RefPtr<HistoryItem> item(HistoryItem::create(GURLToKURL(url), String(), 0));
368 std::string data; 376 std::string data;
369 HistoryItemToString(item, &data); 377 HistoryItemToString(item, &data);
370 return data; 378 return data;
371 } 379 }
372 380
381 std::string RemoveFormDataFromHistoryState(const std::string& content_state) {
382 RefPtr<HistoryItem> history_item(HistoryItemFromString(content_state, false));
383 if (!history_item.get()) {
384 // Couldn't parse the string, return an empty string.
385 return std::string();
386 }
387 std::string new_state;
388 HistoryItemToString(history_item, &new_state);
389 return new_state;
390 }
391
373 } // namespace webkit_glue 392 } // namespace webkit_glue
OLDNEW
« no previous file with comments | « chrome/browser/sessions/tab_restore_service_unittest.cc ('k') | webkit/glue/webkit_glue.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698