15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2010 Google Inc. All rights reserved. 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Samsung Electronics. All rights reserved. 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is free software; you can redistribute it and/or 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modify it under the terms of the GNU Library General Public 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * License as published by the Free Software Foundation; either 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * version 2 of the License, or (at your option) any later version. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * This library is distributed in the hope that it will be useful, 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * but WITHOUT ANY WARRANTY; without even the implied warranty of 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Library General Public License for more details. 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * You should have received a copy of the GNU Library General Public License 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * along with this library; see the file COPYING.LIB. If not, write to 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Boston, MA 02110-1301, USA. 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 2406f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/html/forms/ImageInputType.h" 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/HTMLNames.h" 275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/InputTypeNames.h" 2806f816c7c76bc45a15e452ade8a34e8af077693eTorne (Richard Coles)#include "core/events/MouseEvent.h" 29e1f1df5f01594c0e62e751e4b46e779b85c2faa5Torne (Richard Coles)#include "core/fetch/ImageResource.h" 30bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "core/html/FormDataList.h" 3153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLFormElement.h" 3253e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLImageLoader.h" 3353e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/HTMLInputElement.h" 3453e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/html/parser/HTMLParserIdioms.h" 3553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "core/rendering/RenderImage.h" 36e69819bd8e388ea4ad1636a19aa6b2eed4952191Ben Murdoch#include "wtf/PassOwnPtr.h" 37bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "wtf/text/StringBuilder.h" 385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 39c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)using namespace HTMLNames; 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)inline ImageInputType::ImageInputType(HTMLInputElement& element) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : BaseButtonInputType(element) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles)PassRefPtrWillBeRawPtr<InputType> ImageInputType::create(HTMLInputElement& element) 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 50323480423219ecd77329f8326dc5e0e3b50926d4Torne (Richard Coles) return adoptRefWillBeNoop(new ImageInputType(element)); 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)const AtomicString& ImageInputType::formControlType() const 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5551b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) return InputTypeNames::image; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::isFormDataAppendable() const 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::appendFormData(FormDataList& encoding, bool) const 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 65bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) if (!element().isActivatedSubmit()) 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 67bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) const AtomicString& name = element().name(); 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (name.isEmpty()) { 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) encoding.appendData("x", m_clickLocation.x()); 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) encoding.appendData("y", m_clickLocation.y()); 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 743c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch DEFINE_STATIC_LOCAL(String, dotXString, (".x")); 753c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch DEFINE_STATIC_LOCAL(String, dotYString, (".y")); 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) encoding.appendData(name + dotXString, m_clickLocation.x()); 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) encoding.appendData(name + dotYString, m_clickLocation.y()); 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 79bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) if (!element().value().isEmpty()) 80bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) encoding.appendData(name, element().value()); 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 84bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)String ImageInputType::resultForDialogSubmit() const 85bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 86bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) StringBuilder result; 87bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) result.appendNumber(m_clickLocation.x()); 889e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) result.append(','); 89bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) result.appendNumber(m_clickLocation.y()); 90bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return result.toString(); 91bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 92bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::supportsValidation() const 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 98bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)static IntPoint extractClickLocation(Event* event) 99bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles){ 100bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) if (!event->underlyingEvent() || !event->underlyingEvent()->isMouseEvent()) 101bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return IntPoint(); 102bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) MouseEvent* mouseEvent = toMouseEvent(event->underlyingEvent()); 103bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) if (mouseEvent->isSimulated()) 104bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return IntPoint(); 105bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) return IntPoint(mouseEvent->offsetX(), mouseEvent->offsetY()); 106bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)} 107bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ImageInputType::handleDOMActivateEvent(Event* event) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 110d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> element(this->element()); 11153e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) if (element->isDisabledFormControl() || !element->form()) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element->setActivatedSubmit(true); 114bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) m_clickLocation = extractClickLocation(event); 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element->form()->prepareForSubmission(event); // Event handlers can run. 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) element->setActivatedSubmit(false); 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) event->setDefaultHandled(); 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 120591b958dee2cf159d33a0b931e6231072eaf38d5Ben MurdochRenderObject* ImageInputType::createRenderer(RenderStyle*) const 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 122bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) RenderImage* image = new RenderImage(&element()); 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) image->setImageResource(RenderImageResource::create()); 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return image; 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ImageInputType::altAttributeChanged() 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 129bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) RenderImage* image = toRenderImage(element().renderer()); 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!image) 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) image->updateAltText(); 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)void ImageInputType::srcAttributeChanged() 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 137bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) if (!element().renderer()) 1385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 139197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch element().imageLoader()->updateFromElement(ImageLoader::UpdateIgnorePreviousError); 1405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 14251b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles)void ImageInputType::startResourceLoading() 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 14451b2906e11752df6c18351cf520e30522d3b53a1Torne (Richard Coles) BaseButtonInputType::startResourceLoading(); 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 146bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) HTMLImageLoader* imageLoader = element().imageLoader(); 147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) imageLoader->updateFromElement(); 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 149bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles) RenderImage* renderer = toRenderImage(element().renderer()); 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!renderer) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderImageResource* imageResource = renderer->imageResource(); 1543c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch imageResource->setImageResource(imageLoader->image()); 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If we have no image at all because we have no src attribute, set 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // image height and width for the alt text instead. 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!imageLoader->image() && !imageResource->cachedImage()) 1595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) renderer->setImageSizeForAltText(); 1605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::shouldRespectAlignAttribute() 1635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::canBeSuccessfulSubmitButton() 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::isEnumeratable() 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return false; 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)bool ImageInputType::shouldRespectHeightAndWidthAttributes() 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return true; 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned ImageInputType::height() const 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 184d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> element(this->element()); 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element->renderer()) { 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Check the attribute first for an explicit pixel value. 1885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned height; 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (parseHTMLNonNegativeInteger(element->fastGetAttribute(heightAttr), height)) 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return height; 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the image is available, use its height. 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (element->hasImageLoader()) { 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLImageLoader* imageLoader = element->imageLoader(); 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (imageLoader->image()) 196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return imageLoader->image()->imageSizeForRenderer(element->renderer(), 1).height(); 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2008abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) element->document().updateLayout(); 2015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBox* box = element->renderBox(); 2035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return box ? adjustForAbsoluteZoom(box->contentHeight(), box) : 0; 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned ImageInputType::width() const 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 208d6cdb82654e8f3343a693ca752d5c4cee0324e17Torne (Richard Coles) RefPtrWillBeRawPtr<HTMLInputElement> element(this->element()); 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!element->renderer()) { 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // Check the attribute first for an explicit pixel value. 2125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) unsigned width; 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (parseHTMLNonNegativeInteger(element->fastGetAttribute(widthAttr), width)) 2145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return width; 2155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // If the image is available, use its width. 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (element->hasImageLoader()) { 218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) HTMLImageLoader* imageLoader = element->imageLoader(); 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (imageLoader->image()) 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return imageLoader->image()->imageSizeForRenderer(element->renderer(), 1).width(); 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 2225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2248abfc5808a4e34d6e03867af8bc440dee641886fTorne (Richard Coles) element->document().updateLayout(); 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) RenderBox* box = element->renderBox(); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return box ? adjustForAbsoluteZoom(box->contentWidth(), box) : 0; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 23043e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)bool ImageInputType::hasLegalLinkAttribute(const QualifiedName& name) const 23143e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 23243e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return name == srcAttr || BaseButtonInputType::hasLegalLinkAttribute(name); 23343e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)} 23443e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 23543e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)const QualifiedName& ImageInputType::subResourceAttributeName() const 23643e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles){ 23743e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) return srcAttr; 23843e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles)} 23943e7502580f146aa5b3db8267ba6dbb5c733a489Torne (Richard Coles) 240c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 241