Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 "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/string_number_conversions.h" | |
| 10 #include "base/utf_string_conversions.h" | 11 #include "base/utf_string_conversions.h" |
| 11 #include "googleurl/src/gurl.h" | 12 #include "googleurl/src/gurl.h" |
| 12 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebData.h" | 13 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebData.h" |
| 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" | 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebHistoryItem.h" |
| 14 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebHTTPBody. h" | 15 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebHTTPBody. h" |
| 15 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebPoint.h" | 16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebPoint.h" |
| 16 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSerialize dScriptValue.h" | 17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSerialize dScriptValue.h" |
| 17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" | 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" |
| 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" | 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" |
| 19 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" | 20 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h" |
| (...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 553 WebHTTPBody::Element element; | 554 WebHTTPBody::Element element; |
| 554 for (size_t i = 0; i < http_body.elementCount(); ++i) { | 555 for (size_t i = 0; i < http_body.elementCount(); ++i) { |
| 555 http_body.elementAt(i, element); | 556 http_body.elementAt(i, element); |
| 556 if (element.type == WebHTTPBody::Element::TypeFile) | 557 if (element.type == WebHTTPBody::Element::TypeFile) |
| 557 to_return.push_back(WebStringToFilePath(element.filePath)); | 558 to_return.push_back(WebStringToFilePath(element.filePath)); |
| 558 } | 559 } |
| 559 } | 560 } |
| 560 return to_return; | 561 return to_return; |
| 561 } | 562 } |
| 562 | 563 |
| 564 std::vector<FilePath> FilePathsFromInputsInHistoryState( | |
| 565 const std::string& content_state) { | |
| 566 std::vector<FilePath> to_return; | |
| 567 // TODO(darin): We should avoid using the WebKit API here, so that we do not | |
| 568 // need to have WebKit initialized before calling this method. | |
| 569 const WebHistoryItem& item = | |
| 570 HistoryItemFromString(content_state, ALWAYS_INCLUDE_FORM_DATA, true); | |
| 571 if (item.isNull()) { | |
| 572 // Couldn't parse the string. | |
| 573 return to_return; | |
| 574 } | |
| 575 const WebVector<WebString>& document_state = item.documentState(); | |
| 576 if (document_state.isEmpty()) | |
| 577 return to_return; | |
| 578 // The first entry contains the version number of the document state. Check | |
| 579 // the version here, otherwise this might result in granting file permissions | |
| 580 // to wrong files. | |
| 581 if (std::string(document_state[0].utf8()).find( | |
| 582 "WebKit serialized form state version 5") == std::string::npos) | |
| 583 return to_return; | |
| 584 | |
| 585 // For each document element, the vector contains the following entries: | |
|
brettw
2012/07/11 00:02:42
WE don't want to do this type of manual parsing wh
marja
2012/08/22 09:04:28
Done.
| |
| 586 // - name | |
| 587 // - form control type | |
| 588 // - form key | |
| 589 // - number of additional fields | |
| 590 // - additional field 1 | |
| 591 // - ... | |
| 592 // - additional field n | |
| 593 size_t i = 1; // Skip the first entry. | |
| 594 while (i + 3 < document_state.size()) { | |
| 595 int fields; | |
| 596 if (!base::StringToInt(std::string(document_state[i + 3].utf8()), &fields)) | |
| 597 break; | |
| 598 if (i + 3 + fields >= document_state.size()) | |
| 599 break; | |
| 600 if (document_state[i + 1] == "file") { | |
| 601 for (size_t j = i + 4; j < i + 4 + fields; j += 2) { | |
| 602 // For file inputs, the additional fields are: | |
| 603 // - file path | |
| 604 // - file name | |
| 605 to_return.push_back(WebStringToFilePath(document_state[j])); | |
| 606 } | |
| 607 } | |
| 608 // Jump to the next entry. | |
| 609 i += (4 + fields); | |
| 610 } | |
| 611 return to_return; | |
| 612 } | |
| 613 | |
| 563 // For testing purposes only. | 614 // For testing purposes only. |
| 564 void HistoryItemToVersionedString(const WebHistoryItem& item, int version, | 615 void HistoryItemToVersionedString(const WebHistoryItem& item, int version, |
| 565 std::string* serialized_item) { | 616 std::string* serialized_item) { |
| 566 if (item.isNull()) { | 617 if (item.isNull()) { |
| 567 serialized_item->clear(); | 618 serialized_item->clear(); |
| 568 return; | 619 return; |
| 569 } | 620 } |
| 570 | 621 |
| 571 // Temporarily change the version. | 622 // Temporarily change the version. |
| 572 int real_version = kVersion; | 623 int real_version = kVersion; |
| 573 kVersion = version; | 624 kVersion = version; |
| 574 | 625 |
| 575 SerializeObject obj; | 626 SerializeObject obj; |
| 576 WriteHistoryItem(item, &obj); | 627 WriteHistoryItem(item, &obj); |
| 577 *serialized_item = obj.GetAsString(); | 628 *serialized_item = obj.GetAsString(); |
| 578 | 629 |
| 579 kVersion = real_version; | 630 kVersion = real_version; |
| 580 } | 631 } |
| 581 | 632 |
| 582 int HistoryItemCurrentVersion() { | 633 int HistoryItemCurrentVersion() { |
| 583 return kVersion; | 634 return kVersion; |
| 584 } | 635 } |
| 585 | 636 |
| 586 } // namespace webkit_glue | 637 } // namespace webkit_glue |
| OLD | NEW |