106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen/* 206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Copyright (C) 2010 Google Inc. All rights reserved. 306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * Redistribution and use in source and binary forms, with or without 506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * modification, are permitted provided that the following conditions are 606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * met: 706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * * Redistributions of source code must retain the above copyright 906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * notice, this list of conditions and the following disclaimer. 1006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * * Redistributions in binary form must reproduce the above 1106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * copyright notice, this list of conditions and the following disclaimer 1206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * in the documentation and/or other materials provided with the 1306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * distribution. 1406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * * Neither the name of Google Inc. nor the names of its 1506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * contributors may be used to endorse or promote products derived from 1606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * this software without specific prior written permission. 1706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * 1806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 2206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 2306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 2406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 2506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 2606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 2706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 2806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 2906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen */ 3006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 3106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#ifndef FormSubmission_h 3206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define FormSubmission_h 3306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 340617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen#include "FormState.h" 3506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "KURL.h" 3606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 3706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsennamespace WebCore { 3806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 390617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenclass Document; 4006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass Event; 4106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass FormData; 4206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenstruct FrameLoadRequest; 430617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenclass HTMLFormElement; 440617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenclass TextEncoding; 4506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 4606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass FormSubmission : public RefCounted<FormSubmission> { 4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenpublic: 480617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen enum Method { GetMethod, PostMethod }; 490617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 50ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch class Attributes { 51ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_NONCOPYABLE(Attributes); 520617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen public: 530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen Attributes() 540617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen : m_method(GetMethod) 550617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen , m_isMultiPartForm(false) 560617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen , m_encodingType("application/x-www-form-urlencoded") 570617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen { 580617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen } 590617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 600617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen Method method() const { return m_method; } 610617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen void parseMethodType(const String&); 620617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 630617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String& action() const { return m_action; } 640617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen void parseAction(const String&); 650617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 660617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String& target() const { return m_target; } 670617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen void setTarget(const String& target) { m_target = target; } 680617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 690617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String& encodingType() const { return m_encodingType; } 700617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen void parseEncodingType(const String&); 710617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen bool isMultiPartForm() const { return m_isMultiPartForm; } 720617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 730617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String& acceptCharset() const { return m_acceptCharset; } 740617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen void setAcceptCharset(const String& value) { m_acceptCharset = value; } 750617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 766b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void copyFrom(const Attributes&); 776b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner 780617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen private: 790617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen Method m_method; 800617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen bool m_isMultiPartForm; 810617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 820617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen String m_action; 830617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen String m_target; 840617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen String m_encodingType; 850617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen String m_acceptCharset; 8606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen }; 8706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 880617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen static PassRefPtr<FormSubmission> create(HTMLFormElement*, const Attributes&, PassRefPtr<Event> event, bool lockHistory, FormSubmissionTrigger); 8906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 9006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void populateFrameLoadRequest(FrameLoadRequest&); 91f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick 92f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick KURL requestURL() const; 9306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 9406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen Method method() const { return m_method; } 9506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const KURL& action() const { return m_action; } 960617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String& target() const { return m_target; } 9706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void clearTarget() { m_target = String(); } 980617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String& contentType() const { return m_contentType; } 9906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen FormState* state() const { return m_formState.get(); } 10006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen FormData* data() const { return m_formData.get(); } 1010617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen const String boundary() const { return m_boundary; } 10206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen bool lockHistory() const { return m_lockHistory; } 10306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen Event* event() const { return m_event.get(); } 10406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 10506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const String& referrer() const { return m_referrer; } 10606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void setReferrer(const String& referrer) { m_referrer = referrer; } 10706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen const String& origin() const { return m_origin; } 10806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void setOrigin(const String& origin) { m_origin = origin; } 10906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 11006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenprivate: 11106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen FormSubmission(Method, const KURL& action, const String& target, const String& contentType, PassRefPtr<FormState>, PassRefPtr<FormData>, const String& boundary, bool lockHistory, PassRefPtr<Event>); 11206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1130617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen // FIXME: Hold an instance of Attributes instead of individual members. 11406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen Method m_method; 11506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen KURL m_action; 11606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen String m_target; 11706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen String m_contentType; 11806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RefPtr<FormState> m_formState; 11906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RefPtr<FormData> m_formData; 12006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen String m_boundary; 12106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen bool m_lockHistory; 12206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RefPtr<Event> m_event; 12306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen String m_referrer; 12406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen String m_origin; 12506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen}; 12606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 12706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 12806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 12906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#endif // FormSubmission_h 130