1 /* 2 * Copyright (C) 2010 Google Inc. All rights reserved. 3 * Copyright (C) 2011 Apple Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #include "config.h" 33 #include "core/html/HiddenInputType.h" 34 35 #include "HTMLNames.h" 36 #include "core/html/FormController.h" 37 #include "core/html/FormDataList.h" 38 #include "core/html/HTMLInputElement.h" 39 #include "core/html/InputTypeNames.h" 40 #include "wtf/PassOwnPtr.h" 41 42 namespace WebCore { 43 44 using namespace HTMLNames; 45 46 PassOwnPtr<InputType> HiddenInputType::create(HTMLInputElement* element) 47 { 48 return adoptPtr(new HiddenInputType(element)); 49 } 50 51 const AtomicString& HiddenInputType::formControlType() const 52 { 53 return InputTypeNames::hidden(); 54 } 55 56 FormControlState HiddenInputType::saveFormControlState() const 57 { 58 // valueAttributeWasUpdatedAfterParsing() never be true for form 59 // controls create by createElement() or cloneNode(). It's ok for 60 // now because we restore values only to form controls created by 61 // parsing. 62 return element()->valueAttributeWasUpdatedAfterParsing() ? FormControlState(element()->value()) : FormControlState(); 63 } 64 65 void HiddenInputType::restoreFormControlState(const FormControlState& state) 66 { 67 element()->setAttribute(valueAttr, state[0]); 68 } 69 70 bool HiddenInputType::supportsValidation() const 71 { 72 return false; 73 } 74 75 RenderObject* HiddenInputType::createRenderer(RenderStyle*) const 76 { 77 ASSERT_NOT_REACHED(); 78 return 0; 79 } 80 81 void HiddenInputType::accessKeyAction(bool) 82 { 83 } 84 85 bool HiddenInputType::rendererIsNeeded() 86 { 87 return false; 88 } 89 90 bool HiddenInputType::storesValueSeparateFromAttribute() 91 { 92 return false; 93 } 94 95 void HiddenInputType::setValue(const String& sanitizedValue, bool, TextFieldEventBehavior) 96 { 97 element()->setAttribute(valueAttr, sanitizedValue); 98 } 99 100 bool HiddenInputType::isHiddenType() const 101 { 102 return true; 103 } 104 105 bool HiddenInputType::appendFormData(FormDataList& encoding, bool isMultipartForm) const 106 { 107 if (equalIgnoringCase(element()->name(), "_charset_")) { 108 encoding.appendData(element()->name(), String(encoding.encoding().name())); 109 return true; 110 } 111 return InputType::appendFormData(encoding, isMultipartForm); 112 } 113 114 bool HiddenInputType::shouldRespectHeightAndWidthAttributes() 115 { 116 return true; 117 } 118 119 } // namespace WebCore 120