18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2005, 2006, 2008 Apple Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is free software; you can redistribute it and/or
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modify it under the terms of the GNU Library General Public
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * License as published by the Free Software Foundation; either
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * version 2 of the License, or (at your option) any later version.
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This library is distributed in the hope that it will be useful,
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * but WITHOUT ANY WARRANTY; without even the implied warranty of
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Library General Public License for more details.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * You should have received a copy of the GNU Library General Public License
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * along with this library; see the file COPYING.LIB.  If not, write to
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Boston, MA 02110-1301, USA.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef FormDataList_h
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define FormDataList_h
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
24dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Blob.h"
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "TextEncoding.h"
26dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch#include <wtf/Forward.h>
27dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <wtf/text/CString.h>
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore {
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass FormDataList {
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic:
335ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    class Item {
345ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    public:
355ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        Item() { }
365ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        Item(const WTF::CString& data) : m_data(data) { }
375ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        Item(PassRefPtr<Blob> blob) : m_blob(blob) { }
385ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
395ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        const WTF::CString& data() const { return m_data; }
405ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        Blob* blob() const { return m_blob.get(); }
415ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
425ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    private:
435ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        WTF::CString m_data;
445ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        RefPtr<Blob> m_blob;
455ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    };
465ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    FormDataList(const TextEncoding&);
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void appendData(const String& key, const String& value)
50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
51dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        appendString(key);
52dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        appendString(value);
53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
54dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void appendData(const String& key, const CString& value)
55dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
56dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        appendString(key);
57dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        appendString(value);
58dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void appendData(const String& key, int value)
60dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    {
61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        appendString(key);
62dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block        appendString(String::number(value));
63dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    }
645ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    void appendBlob(const String& key, PassRefPtr<Blob> blob)
655ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    {
665ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        appendString(key);
675ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen        appendBlob(blob);
685ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    }
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
705ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    const Vector<Item>& items() const { return m_items; }
71dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block    const TextEncoding& encoding() const { return m_encoding; }
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectprivate:
74dd8bb3de4f353a81954234999f1fea748aee2ea9Ben Murdoch    void appendString(const CString&);
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    void appendString(const String&);
765ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    void appendBlob(PassRefPtr<Blob>);
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project    TextEncoding m_encoding;
795ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen    Vector<Item> m_items;
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project};
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // FormDataList_h
85