Title: [125759] trunk
Revision
125759
Author
[email protected]
Date
2012-08-16 01:52:25 -0700 (Thu, 16 Aug 2012)

Log Message

.: FormController, WebHistoryItem: Enable reading selected file names from document state
https://bugs.webkit.org/show_bug.cgi?id=91231

Patch by Marja Hölttä <[email protected]> on 2012-08-16
Reviewed by Jochen Eisinger.

This change enables Chromium to set up file permissions properly when
the session restore feature restores a page with selected files.

* Source/autotools/symbols.filter: Exported FormController::getReferencedFilePaths and HistoryController::saveDocumentAndScrollState.

Source/WebCore: FormController, FileInputType: Enable reading selected file names from document state
https://bugs.webkit.org/show_bug.cgi?id=91231

Patch by Marja Hölttä <[email protected]> on 2012-08-16
Reviewed by Jochen Eisinger.

This change enables Chromium to set up file permissions properly when
the session restore feature restores a page with selected files.

Test: fast/forms/file/selected-files-from-history-state.html

* WebCore.exp.in: Exported FormController::getReferencedFilePaths.
* html/FileInputType.cpp:
(WebCore::FileInputType::filesFromFormControlState): Added. Extracts FileChooserFileInfos from a FormControlState.
(WebCore):
(WebCore::FileInputType::restoreFormControlState): Refactored to use filesFromFormControlState.
* html/FileInputType.h:
(FileInputType): Added filesFromFormControlState.
* html/FormController.cpp:
(SavedFormState): Added getReferencedFilePaths.
(WebCore::SavedFormState::getReferencedFilePaths): Added. Extracts selected file paths from SavedFormState.
(WebCore):
(WebCore::FormController::setStateForNewFormElements): Refactored to use formStatesFromStateVector.
(WebCore::FormController::formStatesFromStateVector):
(WebCore::FormController::getReferencedFilePaths): Added. Static. Extracts selected file paths from a document state.
* html/FormController.h:
(FormController): Added getReferencedFilePaths and formStatesFromStateVector.
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::filesFromFileInputFormControlState): Added. Delegates to FileInputType::filesFromFormControlState.
(WebCore):
* html/HTMLInputElement.h: Added filesFromFileInputFormControlState.
(HTMLInputElement):
* testing/Internals.cpp:
(WebCore::Internals::getReferencedFilePaths): Calls FormController::getReferencedFilePaths.
(WebCore):
* testing/Internals.h:
(Internals): Added getReferencedFilePaths.
* testing/Internals.idl: Added binding for getReferencedFilePaths.

Source/WebKit/chromium: WebHistoryItem: Enable reading selected file names from document state
https://bugs.webkit.org/show_bug.cgi?id=91231

Patch by Marja Hölttä <[email protected]> on 2012-08-16
Reviewed by Jochen Eisinger.

This change enables Chromium to set up file permissions properly when
the session restore feature restores a page with selected files.

* public/WebHistoryItem.h:
(WebHistoryItem): Added getReferencedFilePaths.
* src/WebHistoryItem.cpp:
(WebKit::WebHistoryItem::getReferencedFilePaths): Extracts selected and posted file paths from a document state.
(WebKit):

Source/WebKit2: FormController, WebHistoryItem: Enable reading selected file names from document state
https://bugs.webkit.org/show_bug.cgi?id=91231

Patch by Marja Hölttä <[email protected]> on 2012-08-16
Reviewed by Jochen Eisinger.

This change enables Chromium to set up file permissions properly when
the session restore feature restores a page with selected files.

* win/WebKit2.def: Exported FormController::getReferencedFilePaths and HistoryController::saveDocumentAndScrollState.

LayoutTests: FormController: Enable reading selected file names from document state
https://bugs.webkit.org/show_bug.cgi?id=91231

Patch by Marja Hölttä <[email protected]> on 2012-08-16
Reviewed by Jochen Eisinger.

This change enables Chromium to set up file permissions properly when
the session restore feature restores a page with selected files.

* fast/forms/file/selected-files-from-history-state-expected.txt: Added.
* fast/forms/file/selected-files-from-history-state.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/ChangeLog (125758 => 125759)


--- trunk/ChangeLog	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/ChangeLog	2012-08-16 08:52:25 UTC (rev 125759)
@@ -1,3 +1,15 @@
+2012-08-16  Marja Hölttä  <[email protected]>
+
+        FormController, WebHistoryItem: Enable reading selected file names from document state
+        https://bugs.webkit.org/show_bug.cgi?id=91231
+
+        Reviewed by Jochen Eisinger.
+
+        This change enables Chromium to set up file permissions properly when
+        the session restore feature restores a page with selected files.
+
+        * Source/autotools/symbols.filter: Exported FormController::getReferencedFilePaths and HistoryController::saveDocumentAndScrollState.
+
 2012-08-15  Kent Tamura  <[email protected]>
 
         Calendar Picker: Localize numbers in a calendar picker

Modified: trunk/LayoutTests/ChangeLog (125758 => 125759)


--- trunk/LayoutTests/ChangeLog	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/LayoutTests/ChangeLog	2012-08-16 08:52:25 UTC (rev 125759)
@@ -1,3 +1,16 @@
+2012-08-16  Marja Hölttä  <[email protected]>
+
+        FormController: Enable reading selected file names from document state
+        https://bugs.webkit.org/show_bug.cgi?id=91231
+
+        Reviewed by Jochen Eisinger.
+
+        This change enables Chromium to set up file permissions properly when
+        the session restore feature restores a page with selected files.
+
+        * fast/forms/file/selected-files-from-history-state-expected.txt: Added.
+        * fast/forms/file/selected-files-from-history-state.html: Added.
+
 2012-08-15  Shawn Singh  <[email protected]>
 
         [chromium] set scissorRect per quad so that quads are correctly clipped

Added: trunk/LayoutTests/fast/forms/file/selected-files-from-history-state-expected.txt (0 => 125759)


--- trunk/LayoutTests/fast/forms/file/selected-files-from-history-state-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/file/selected-files-from-history-state-expected.txt	2012-08-16 08:52:25 UTC (rev 125759)
@@ -0,0 +1,9 @@
+Tests that selected files in file input elements are correctly retrieved by FormController::getReferencedFilePaths.
+
+
+
+PASS 
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/forms/file/selected-files-from-history-state.html (0 => 125759)


--- trunk/LayoutTests/fast/forms/file/selected-files-from-history-state.html	                        (rev 0)
+++ trunk/LayoutTests/fast/forms/file/selected-files-from-history-state.html	2012-08-16 08:52:25 UTC (rev 125759)
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src=""
+<script>
+window.jsTestIsAsync = true;
+function onLoad() {
+    setTimeout(runTest, 0);
+}
+
+function runTest() {
+    if (!window.internals) {
+        testFailed('This test requires window.internals.');
+        return;
+    }
+
+    var _onChangeFired_ = 0;
+    var input1 = document.getElementById('fileinput1');
+    input1._onchange_ = function() {
+        ++onChangeFired;
+    };
+    var input2 = document.getElementById('fileinput2');
+    input2._onchange_ = function() {
+        ++onChangeFired;
+    };
+
+    eventSender.beginDragWithFiles(['/home/user/testfile.txt']);
+    var centerX = input1.offsetLeft + input1.offsetWidth / 2;
+    var centerY = input1.offsetTop + input1.offsetHeight / 2;
+    eventSender.mouseMoveTo(centerX, centerY);
+    eventSender.mouseUp();
+
+    eventSender.beginDragWithFiles(['/home/user/testfile2.txt']);
+    centerX = input2.offsetLeft + input2.offsetWidth / 2;
+    centerY = input2.offsetTop + input2.offsetHeight / 2;
+    eventSender.mouseMoveTo(centerX, centerY);
+    eventSender.mouseUp();
+
+    if (onChangeFired != 2) {
+        testFailed('onchange fired unexpected times: ' + onChangeFired);
+    }
+
+    var files = internals.getReferencedFilePaths();
+    if (files.length == 2 &&
+        ((files[0] == '/home/user/testfile.txt' && files[1] == '/home/user/testfile2.txt') ||
+         (files[1] == '/home/user/testfile.txt' && files[0] == '/home/user/testfile2.txt'))) {
+        testPassed('');
+    } else {
+        testFailed('Unexpected files: ' + files);
+    }
+    finishJSTest();
+}
+</script>
+</head>
+<body _onload_="onLoad();">
+<p id="description">Tests that selected files in file input elements are correctly retrieved by FormController::getReferencedFilePaths.</p>
+<div id="container">
+<form id="form1">
+<input id="fileinput1" type="file" />
+</form>
+<form id="form2">
+<input id="fileinput2" type="file" />
+</form>
+</div>
+<div id="console"></div>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (125758 => 125759)


--- trunk/Source/WebCore/ChangeLog	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/ChangeLog	2012-08-16 08:52:25 UTC (rev 125759)
@@ -1,3 +1,43 @@
+2012-08-16  Marja Hölttä  <[email protected]>
+
+        FormController, FileInputType: Enable reading selected file names from document state
+        https://bugs.webkit.org/show_bug.cgi?id=91231
+
+        Reviewed by Jochen Eisinger.
+
+        This change enables Chromium to set up file permissions properly when
+        the session restore feature restores a page with selected files.
+
+        Test: fast/forms/file/selected-files-from-history-state.html
+
+        * WebCore.exp.in: Exported FormController::getReferencedFilePaths.
+        * html/FileInputType.cpp:
+        (WebCore::FileInputType::filesFromFormControlState): Added. Extracts FileChooserFileInfos from a FormControlState.
+        (WebCore):
+        (WebCore::FileInputType::restoreFormControlState): Refactored to use filesFromFormControlState.
+        * html/FileInputType.h:
+        (FileInputType): Added filesFromFormControlState.
+        * html/FormController.cpp:
+        (SavedFormState): Added getReferencedFilePaths.
+        (WebCore::SavedFormState::getReferencedFilePaths): Added. Extracts selected file paths from SavedFormState.
+        (WebCore):
+        (WebCore::FormController::setStateForNewFormElements): Refactored to use formStatesFromStateVector.
+        (WebCore::FormController::formStatesFromStateVector):
+        (WebCore::FormController::getReferencedFilePaths): Added. Static. Extracts selected file paths from a document state.
+        * html/FormController.h:
+        (FormController): Added getReferencedFilePaths and formStatesFromStateVector.
+        * html/HTMLInputElement.cpp:
+        (WebCore::HTMLInputElement::filesFromFileInputFormControlState): Added. Delegates to FileInputType::filesFromFormControlState.
+        (WebCore):
+        * html/HTMLInputElement.h: Added filesFromFileInputFormControlState.
+        (HTMLInputElement):
+        * testing/Internals.cpp:
+        (WebCore::Internals::getReferencedFilePaths): Calls FormController::getReferencedFilePaths.
+        (WebCore):
+        * testing/Internals.h:
+        (Internals): Added getReferencedFilePaths.
+        * testing/Internals.idl: Added binding for getReferencedFilePaths.
+
 2012-08-15  Shawn Singh  <[email protected]>
 
         [chromium] set scissorRect per quad so that quads are correctly clipped

Modified: trunk/Source/WebCore/WebCore.exp.in (125758 => 125759)


--- trunk/Source/WebCore/WebCore.exp.in	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/WebCore.exp.in	2012-08-16 08:52:25 UTC (rev 125759)
@@ -253,6 +253,7 @@
 __ZNK7WebCore14DocumentLoader17reportMemoryUsageEPNS_16MemoryObjectInfoE
 __ZN7WebCore14DocumentWriter11setEncodingERKN3WTF6StringEb
 __ZN7WebCore14FileIconLoader14notifyFinishedEN3WTF10PassRefPtrINS_4IconEEE
+__ZN7WebCore14FormController22getReferencedFilePathsERKN3WTF6VectorINS1_6StringELm0EEE
 __ZN7WebCore14FrameSelection10setFocusedEb
 __ZN7WebCore14FrameSelection12setSelectionERKNS_16VisibleSelectionEjNS0_19CursorAlignOnScrollENS_15TextGranularityE
 __ZN7WebCore14FrameSelection15revealSelectionERKNS_15ScrollAlignmentENS_18RevealExtentOptionE

Modified: trunk/Source/WebCore/html/FileInputType.cpp (125758 => 125759)


--- trunk/Source/WebCore/html/FileInputType.cpp	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/html/FileInputType.cpp	2012-08-16 08:52:25 UTC (rev 125759)
@@ -96,6 +96,18 @@
     return adoptPtr(new FileInputType(element));
 }
 
+Vector<FileChooserFileInfo> FileInputType::filesFromFormControlState(const FormControlState& state)
+{
+    Vector<FileChooserFileInfo> files;
+    for (size_t i = 0; i < state.valueSize(); i += 2) {
+        if (!state[i + 1].isEmpty())
+            files.append(FileChooserFileInfo(state[i], state[i + 1]));
+        else
+            files.append(FileChooserFileInfo(state[i]));
+    }
+    return files;
+}
+
 const AtomicString& FileInputType::formControlType() const
 {
     return InputTypeNames::file();
@@ -118,14 +130,7 @@
 {
     if (state.valueSize() % 2)
         return;
-    Vector<FileChooserFileInfo> files;
-    for (size_t i = 0; i < state.valueSize(); i += 2) {
-        if (!state[i + 1].isEmpty())
-            files.append(FileChooserFileInfo(state[i], state[i + 1]));
-        else
-            files.append(FileChooserFileInfo(state[i]));
-    }
-    filesChosen(files);
+    filesChosen(filesFromFormControlState(state));
 }
 
 bool FileInputType::appendFormData(FormDataList& encoding, bool multipart) const

Modified: trunk/Source/WebCore/html/FileInputType.h (125758 => 125759)


--- trunk/Source/WebCore/html/FileInputType.h	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/html/FileInputType.h	2012-08-16 08:52:25 UTC (rev 125759)
@@ -45,6 +45,7 @@
 class FileInputType : public BaseClickableWithKeyInputType, private FileChooserClient, private FileIconLoaderClient {
 public:
     static PassOwnPtr<InputType> create(HTMLInputElement*);
+    static Vector<FileChooserFileInfo> filesFromFormControlState(const FormControlState&);
 
 private:
     FileInputType(HTMLInputElement*);

Modified: trunk/Source/WebCore/html/FormController.cpp (125758 => 125759)


--- trunk/Source/WebCore/html/FormController.cpp	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/html/FormController.cpp	2012-08-16 08:52:25 UTC (rev 125759)
@@ -21,8 +21,10 @@
 #include "config.h"
 #include "FormController.h"
 
+#include "FileChooser.h"
 #include "HTMLFormControlElementWithState.h"
 #include "HTMLFormElement.h"
+#include "HTMLInputElement.h"
 #include <wtf/text/StringBuilder.h>
 
 namespace WebCore {
@@ -180,6 +182,8 @@
     void appendControlState(const AtomicString& name, const AtomicString& type, const FormControlState&);
     FormControlState takeControlState(const AtomicString& name, const AtomicString& type);
 
+    Vector<String> getReferencedFilePaths() const;
+
 private:
     SavedFormState() : m_controlStateCount(0) { }
 
@@ -263,6 +267,23 @@
     return state;
 }
 
+Vector<String> SavedFormState::getReferencedFilePaths() const
+{
+    Vector<String> toReturn;
+    for (FormElementStateMap::const_iterator it = m_stateForNewFormElements.begin(); it != m_stateForNewFormElements.end(); ++it) {
+        const FormElementKey& key = it->first;
+        if (AtomicString(key.type()) != AtomicString("file"))
+            continue;
+        const Deque<FormControlState>& queue = it->second;
+        for (Deque<FormControlState>::const_iterator queIterator = queue.begin(); queIterator != queue.end(); ++queIterator) {
+            const Vector<FileChooserFileInfo>& selectedFiles = HTMLInputElement::filesFromFileInputFormControlState(*queIterator);
+            for (size_t i = 0; i < selectedFiles.size(); ++i)
+                toReturn.append(selectedFiles[i].path);
+        }
+    }
+    return toReturn;
+}
+
 // ----------------------------------------------------------------------------
 
 class FormKeyGenerator {
@@ -408,23 +429,7 @@
 
 void FormController::setStateForNewFormElements(const Vector<String>& stateVector)
 {
-    m_formElementsWithState.clear();
-
-    size_t i = 0;
-    if (stateVector.size() < 1 || stateVector[i++] != formStateSignature())
-        return;
-
-    while (i + 1 < stateVector.size()) {
-        AtomicString formKey = stateVector[i++];
-        OwnPtr<SavedFormState> state = SavedFormState::deserialize(stateVector, i);
-        if (!state) {
-            i = 0;
-            break;
-        }
-        m_savedFormStateMap.add(formKey.impl(), state.release());
-    }
-    if (i != stateVector.size())
-        m_savedFormStateMap.clear();
+    formStatesFromStateVector(stateVector, m_savedFormStateMap);
 }
 
 FormControlState FormController::takeStateForFormElement(const HTMLFormControlElementWithState& control)
@@ -442,6 +447,27 @@
     return state;
 }
 
+void FormController::formStatesFromStateVector(const Vector<String>& stateVector, SavedFormStateMap& map)
+{
+    map.clear();
+
+    size_t i = 0;
+    if (stateVector.size() < 1 || stateVector[i++] != formStateSignature())
+        return;
+
+    while (i + 1 < stateVector.size()) {
+        AtomicString formKey = stateVector[i++];
+        OwnPtr<SavedFormState> state = SavedFormState::deserialize(stateVector, i);
+        if (!state) {
+            i = 0;
+            break;
+        }
+        map.add(formKey.impl(), state.release());
+    }
+    if (i != stateVector.size())
+        map.clear();
+}
+
 void FormController::willDeleteForm(HTMLFormElement* form)
 {
     if (m_formKeyGenerator)
@@ -479,5 +505,14 @@
     }
 }
 
+Vector<String> FormController::getReferencedFilePaths(const Vector<String>& stateVector)
+{
+    Vector<String> toReturn;
+    SavedFormStateMap map;
+    formStatesFromStateVector(stateVector, map);
+    for (SavedFormStateMap::const_iterator it = map.begin(); it != map.end(); ++it)
+        toReturn.append(it->second->getReferencedFilePaths());
+    return toReturn;
+}
+
 } // namespace WebCore
-

Modified: trunk/Source/WebCore/html/FormController.h (125758 => 125759)


--- trunk/Source/WebCore/html/FormController.h	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/html/FormController.h	2012-08-16 08:52:25 UTC (rev 125759)
@@ -92,6 +92,8 @@
     void restoreControlStateFor(HTMLFormControlElementWithState&);
     void restoreControlStateIn(HTMLFormElement&);
 
+    static Vector<String> getReferencedFilePaths(const Vector<String>& stateVector);
+
 private:
     typedef ListHashSet<HTMLFormControlElementWithState*, 64> FormElementListHashSet;
     typedef HashMap<RefPtr<AtomicStringImpl>, OwnPtr<SavedFormState> > SavedFormStateMap;
@@ -99,6 +101,7 @@
     FormController();
     static PassOwnPtr<SavedFormStateMap> createSavedFormStateMap(const FormElementListHashSet&);
     FormControlState takeStateForFormElement(const HTMLFormControlElementWithState&);
+    static void formStatesFromStateVector(const Vector<String>&, SavedFormStateMap&);
 
     CheckedRadioButtons m_checkedRadioButtons;
     FormElementListHashSet m_formElementsWithState;

Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (125758 => 125759)


--- trunk/Source/WebCore/html/HTMLInputElement.cpp	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp	2012-08-16 08:52:25 UTC (rev 125759)
@@ -36,6 +36,7 @@
 #include "Document.h"
 #include "EventNames.h"
 #include "ExceptionCode.h"
+#include "FileInputType.h"
 #include "FileList.h"
 #include "FormController.h"
 #include "Frame.h"
@@ -159,6 +160,11 @@
     return m_name.isNull() ? emptyAtom : m_name;
 }
 
+Vector<FileChooserFileInfo> HTMLInputElement::filesFromFileInputFormControlState(const FormControlState& state)
+{
+    return FileInputType::filesFromFormControlState(state);
+}
+
 HTMLElement* HTMLInputElement::containerElement() const
 {
     return m_inputType->containerElement();

Modified: trunk/Source/WebCore/html/HTMLInputElement.h (125758 => 125759)


--- trunk/Source/WebCore/html/HTMLInputElement.h	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/html/HTMLInputElement.h	2012-08-16 08:52:25 UTC (rev 125759)
@@ -25,6 +25,7 @@
 #ifndef HTMLInputElement_h
 #define HTMLInputElement_h
 
+#include "FileChooser.h"
 #include "HTMLTextFormControlElement.h"
 #include "ImageLoaderClient.h"
 #include "StepRange.h"
@@ -277,6 +278,8 @@
 
     virtual const AtomicString& name() const OVERRIDE;
 
+    static Vector<FileChooserFileInfo> filesFromFileInputFormControlState(const FormControlState&);
+
 protected:
     HTMLInputElement(const QualifiedName&, Document*, HTMLFormElement*, bool createdByParser);
     void createShadowSubtree();

Modified: trunk/Source/WebCore/testing/Internals.cpp (125758 => 125759)


--- trunk/Source/WebCore/testing/Internals.cpp	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/testing/Internals.cpp	2012-08-16 08:52:25 UTC (rev 125759)
@@ -26,6 +26,7 @@
 #include "config.h"
 #include "Internals.h"
 
+#include "BackForwardController.h"
 #include "CachedResourceLoader.h"
 #include "ClientRect.h"
 #include "ClientRectList.h"
@@ -37,6 +38,7 @@
 #include "Element.h"
 #include "ElementShadow.h"
 #include "ExceptionCode.h"
+#include "FormController.h"
 #include "Frame.h"
 #include "FrameView.h"
 #include "HTMLContentElement.h"
@@ -1188,4 +1190,14 @@
     return MallocStatistics::create();
 }
 
+PassRefPtr<DOMStringList> Internals::getReferencedFilePaths() const
+{
+    RefPtr<DOMStringList> stringList = DOMStringList::create();
+    frame()->loader()->history()->saveDocumentAndScrollState();
+    const Vector<String>& filePaths = FormController::getReferencedFilePaths(frame()->loader()->history()->currentItem()->documentState());
+    for (size_t i = 0; i < filePaths.size(); ++i)
+        stringList->append(filePaths[i]);
+    return stringList.release();
 }
+
+}

Modified: trunk/Source/WebCore/testing/Internals.h (125758 => 125759)


--- trunk/Source/WebCore/testing/Internals.h	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/testing/Internals.h	2012-08-16 08:52:25 UTC (rev 125759)
@@ -210,6 +210,8 @@
 
     PassRefPtr<MallocStatistics> mallocStatistics() const;
 
+    PassRefPtr<DOMStringList> getReferencedFilePaths() const;
+
 private:
     explicit Internals(Document*);
     Document* contextDocument() const;

Modified: trunk/Source/WebCore/testing/Internals.idl (125758 => 125759)


--- trunk/Source/WebCore/testing/Internals.idl	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebCore/testing/Internals.idl	2012-08-16 08:52:25 UTC (rev 125759)
@@ -186,6 +186,8 @@
         void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(in DOMString scheme);
 
         MallocStatistics mallocStatistics();
+
+        DOMString[] getReferencedFilePaths();
     };
 }
 

Modified: trunk/Source/WebKit/chromium/ChangeLog (125758 => 125759)


--- trunk/Source/WebKit/chromium/ChangeLog	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebKit/chromium/ChangeLog	2012-08-16 08:52:25 UTC (rev 125759)
@@ -1,3 +1,19 @@
+2012-08-16  Marja Hölttä  <[email protected]>
+
+        WebHistoryItem: Enable reading selected file names from document state
+        https://bugs.webkit.org/show_bug.cgi?id=91231
+
+        Reviewed by Jochen Eisinger.
+
+        This change enables Chromium to set up file permissions properly when
+        the session restore feature restores a page with selected files.
+
+        * public/WebHistoryItem.h:
+        (WebHistoryItem): Added getReferencedFilePaths.
+        * src/WebHistoryItem.cpp:
+        (WebKit::WebHistoryItem::getReferencedFilePaths): Extracts selected and posted file paths from a document state.
+        (WebKit):
+
 2012-08-15  Shawn Singh  <[email protected]>
 
         [chromium] set scissorRect per quad so that quads are correctly clipped

Modified: trunk/Source/WebKit/chromium/public/WebHistoryItem.h (125758 => 125759)


--- trunk/Source/WebKit/chromium/public/WebHistoryItem.h	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebKit/chromium/public/WebHistoryItem.h	2012-08-16 08:52:25 UTC (rev 125759)
@@ -124,6 +124,8 @@
     WEBKIT_EXPORT void setChildren(const WebVector<WebHistoryItem>&);
     WEBKIT_EXPORT void appendToChildren(const WebHistoryItem&);
 
+    WEBKIT_EXPORT WebVector<WebString> getReferencedFilePaths() const;
+
 #if WEBKIT_IMPLEMENTATION
     WebHistoryItem(const WTF::PassRefPtr<WebCore::HistoryItem>&);
     WebHistoryItem& operator=(const WTF::PassRefPtr<WebCore::HistoryItem>&);

Modified: trunk/Source/WebKit/chromium/src/WebHistoryItem.cpp (125758 => 125759)


--- trunk/Source/WebKit/chromium/src/WebHistoryItem.cpp	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebKit/chromium/src/WebHistoryItem.cpp	2012-08-16 08:52:25 UTC (rev 125759)
@@ -31,6 +31,7 @@
 #include "config.h"
 #include "WebHistoryItem.h"
 
+#include "FormController.h"
 #include "FormData.h"
 #include "HistoryItem.h"
 #include "KURL.h"
@@ -287,6 +288,23 @@
     m_private->addChildItem(item);
 }
 
+WebVector<WebString> WebHistoryItem::getReferencedFilePaths() const
+{
+    Vector<WebString> filePaths;
+    const FormData* formData = m_private->formData();
+    if (formData) {
+        for (size_t i = 0; i < formData->elements().size(); ++i) {
+            const FormDataElement& element = formData->elements()[i];
+            if (element.m_type == FormDataElement::encodedFile)
+                filePaths.append(element.m_filename);
+        }
+    }
+    const Vector<String>& selectedFilePaths = WebCore::FormController::getReferencedFilePaths(m_private->documentState());
+    for (size_t i = 0; i < selectedFilePaths.size(); ++i)
+        filePaths.append(selectedFilePaths[i]);
+    return filePaths;
+}
+
 WebHistoryItem::WebHistoryItem(const PassRefPtr<HistoryItem>& item)
     : m_private(item)
 {

Modified: trunk/Source/WebKit2/ChangeLog (125758 => 125759)


--- trunk/Source/WebKit2/ChangeLog	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebKit2/ChangeLog	2012-08-16 08:52:25 UTC (rev 125759)
@@ -1,3 +1,15 @@
+2012-08-16  Marja Hölttä  <[email protected]>
+
+        FormController, WebHistoryItem: Enable reading selected file names from document state
+        https://bugs.webkit.org/show_bug.cgi?id=91231
+
+        Reviewed by Jochen Eisinger.
+
+        This change enables Chromium to set up file permissions properly when
+        the session restore feature restores a page with selected files.
+
+        * win/WebKit2.def: Exported FormController::getReferencedFilePaths and HistoryController::saveDocumentAndScrollState.
+
 2012-08-15  Ryosuke Niwa  <[email protected]>
 
         Update manual tests and comments to refer to TestRunner instead of LayoutTestController

Modified: trunk/Source/WebKit2/win/WebKit2.def (125758 => 125759)


--- trunk/Source/WebKit2/win/WebKit2.def	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/WebKit2/win/WebKit2.def	2012-08-16 08:52:25 UTC (rev 125759)
@@ -181,6 +181,7 @@
         ?getElementById@TreeScope@WebCore@@QBEPAVElement@2@ABVAtomicString@WTF@@@Z
         ?getHighlight@InspectorController@WebCore@@QBEXPAUHighlight@2@@Z
         ?getLocationAndLengthFromRange@TextIterator@WebCore@@SA_NPAVElement@2@PBVRange@2@AAI2@Z
+        ?getReferencedFilePaths@FormController@WebCore@@SA?AV?$Vector@VString@WTF@@$0A@@WTF@@ABV34@@Z
         ?inputTag@HTMLNames@WebCore@@3VQualifiedName@2@B
         ?instrumentingAgentsForPage@InspectorInstrumentation@WebCore@@CAPAVInstrumentingAgents@2@PAVPage@2@@Z
         ?isActiveInsertionPoint@WebCore@@YA_NPBVNode@1@@Z
@@ -207,6 +208,7 @@
         ?removedLastRef@Node@WebCore@@AAEXXZ
         ?reverseFind@StringImpl@WTF@@QAEI_WI@Z
         ?s_frontendCounter@InspectorInstrumentation@WebCore@@0HA
+        ?saveDocumentAndScrollState@HistoryController@WebCore@@QAEXXZ
         ?scriptExecutionContext@JSDOMGlobalObject@WebCore@@QBEPAVScriptExecutionContext@2@XZ
         ?scriptNameToCode@WebCore@@YA?AW4UScriptCode@@ABVString@WTF@@@Z
         ?scrollElementToRect@FrameView@WebCore@@QAEXPAVElement@2@ABVIntRect@2@@Z

Modified: trunk/Source/autotools/symbols.filter (125758 => 125759)


--- trunk/Source/autotools/symbols.filter	2012-08-16 08:50:21 UTC (rev 125758)
+++ trunk/Source/autotools/symbols.filter	2012-08-16 08:52:25 UTC (rev 125759)
@@ -60,6 +60,7 @@
 _ZN7WebCore14ClientRectListC1ERKN3WTF6VectorINS_9FloatQuadELm0EEE;
 _ZN7WebCore14ClientRectListC1Ev;
 _ZN7WebCore14ClientRectListD1Ev;
+_ZN7WebCore14FormController22getReferencedFilePathsERKN3WTF6VectorINS1_6StringELm0EEE;
 _ZN7WebCore14FrameSelection19absoluteCaretBoundsEv;
 _ZN7WebCore14SchemeRegistry49registerURLSchemeAsBypassingContentSecurityPolicyERKN3WTF6StringE;
 _ZN7WebCore14SchemeRegistry57removeURLSchemeRegisteredAsBypassingContentSecurityPolicyERKN3WTF6StringE;
@@ -70,6 +71,7 @@
 _ZN7WebCore16jsStringSlowCaseEPN3JSC9ExecStateERN3WTF7HashMapIPNS3_10StringImplENS0_4WeakINS0_8JSStringEEENS3_7PtrHashIS6_EENS3_10HashTraitsIS6_EENSC_IS9_EEEES6_;
 _ZN7WebCore16scriptNameToCodeERKN3WTF6StringE;
 _ZN7WebCore17cacheDOMStructureEPNS_17JSDOMGlobalObjectEPN3JSC9StructureEPKNS2_9ClassInfoE;
+_ZN7WebCore17HistoryController26saveDocumentAndScrollStateEv;
 _ZN7WebCore17InspectorCounters12counterValueENS0_11CounterTypeE;
 _ZN7WebCore18HTMLContentElement6createEPNS_8DocumentE;
 _ZN7WebCore19InspectorController39setResourcesDataSizeLimitsFromInternalsEii;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to