| Index: Source/core/html/forms/FileInputType.cpp
 | 
| diff --git a/Source/core/html/forms/FileInputType.cpp b/Source/core/html/forms/FileInputType.cpp
 | 
| index 8894af15656b17c55243b801eb2dd29518852516..2a2be023b4ff52c08110b3833ad6cdfc3d6e8d17 100644
 | 
| --- a/Source/core/html/forms/FileInputType.cpp
 | 
| +++ b/Source/core/html/forms/FileInputType.cpp
 | 
| @@ -48,13 +48,13 @@ namespace WebCore {
 | 
|  using WebKit::WebLocalizedString;
 | 
|  using namespace HTMLNames;
 | 
|  
 | 
| -inline FileInputType::FileInputType(HTMLInputElement* element)
 | 
| +inline FileInputType::FileInputType(HTMLInputElement& element)
 | 
|      : BaseClickableWithKeyInputType(element)
 | 
|      , m_fileList(FileList::create())
 | 
|  {
 | 
|  }
 | 
|  
 | 
| -PassRefPtr<InputType> FileInputType::create(HTMLInputElement* element)
 | 
| +PassRefPtr<InputType> FileInputType::create(HTMLInputElement& element)
 | 
|  {
 | 
|      return adoptRef(new FileInputType(element));
 | 
|  }
 | 
| @@ -98,7 +98,7 @@ void FileInputType::restoreFormControlState(const FormControlState& state)
 | 
|  
 | 
|  bool FileInputType::appendFormData(FormDataList& encoding, bool multipart) const
 | 
|  {
 | 
| -    FileList* fileList = element()->files();
 | 
| +    FileList* fileList = element().files();
 | 
|      unsigned numFiles = fileList->length();
 | 
|      if (!multipart) {
 | 
|          // Send only the basenames.
 | 
| @@ -109,35 +109,35 @@ bool FileInputType::appendFormData(FormDataList& encoding, bool multipart) const
 | 
|          // submission of file inputs, and Firefox doesn't add "name=" query
 | 
|          // parameter.
 | 
|          for (unsigned i = 0; i < numFiles; ++i)
 | 
| -            encoding.appendData(element()->name(), fileList->item(i)->name());
 | 
| +            encoding.appendData(element().name(), fileList->item(i)->name());
 | 
|          return true;
 | 
|      }
 | 
|  
 | 
|      // If no filename at all is entered, return successful but empty.
 | 
|      // Null would be more logical, but Netscape posts an empty file. Argh.
 | 
|      if (!numFiles) {
 | 
| -        encoding.appendBlob(element()->name(), File::create(""));
 | 
| +        encoding.appendBlob(element().name(), File::create(""));
 | 
|          return true;
 | 
|      }
 | 
|  
 | 
|      for (unsigned i = 0; i < numFiles; ++i)
 | 
| -        encoding.appendBlob(element()->name(), fileList->item(i));
 | 
| +        encoding.appendBlob(element().name(), fileList->item(i));
 | 
|      return true;
 | 
|  }
 | 
|  
 | 
|  bool FileInputType::valueMissing(const String& value) const
 | 
|  {
 | 
| -    return element()->isRequired() && value.isEmpty();
 | 
| +    return element().isRequired() && value.isEmpty();
 | 
|  }
 | 
|  
 | 
|  String FileInputType::valueMissingText() const
 | 
|  {
 | 
| -    return locale().queryString(element()->multiple() ? WebLocalizedString::ValidationValueMissingForMultipleFile : WebLocalizedString::ValidationValueMissingForFile);
 | 
| +    return locale().queryString(element().multiple() ? WebLocalizedString::ValidationValueMissingForMultipleFile : WebLocalizedString::ValidationValueMissingForFile);
 | 
|  }
 | 
|  
 | 
|  void FileInputType::handleDOMActivateEvent(Event* event)
 | 
|  {
 | 
| -    if (element()->isDisabledFormControl())
 | 
| +    if (element().isDisabledFormControl())
 | 
|          return;
 | 
|  
 | 
|      if (!UserGestureIndicator::processingUserGesture())
 | 
| @@ -145,23 +145,23 @@ void FileInputType::handleDOMActivateEvent(Event* event)
 | 
|  
 | 
|      if (Chrome* chrome = this->chrome()) {
 | 
|          FileChooserSettings settings;
 | 
| -        HTMLInputElement* input = element();
 | 
| -        settings.allowsDirectoryUpload = RuntimeEnabledFeatures::directoryUploadEnabled() && input->fastHasAttribute(webkitdirectoryAttr);
 | 
| -        settings.allowsMultipleFiles = settings.allowsDirectoryUpload || input->fastHasAttribute(multipleAttr);
 | 
| -        settings.acceptMIMETypes = input->acceptMIMETypes();
 | 
| -        settings.acceptFileExtensions = input->acceptFileExtensions();
 | 
| +        HTMLInputElement& input = element();
 | 
| +        settings.allowsDirectoryUpload = RuntimeEnabledFeatures::directoryUploadEnabled() && input.fastHasAttribute(webkitdirectoryAttr);
 | 
| +        settings.allowsMultipleFiles = settings.allowsDirectoryUpload || input.fastHasAttribute(multipleAttr);
 | 
| +        settings.acceptMIMETypes = input.acceptMIMETypes();
 | 
| +        settings.acceptFileExtensions = input.acceptFileExtensions();
 | 
|          settings.selectedFiles = m_fileList->paths();
 | 
|  #if ENABLE(MEDIA_CAPTURE)
 | 
| -        settings.useMediaCapture = input->capture();
 | 
| +        settings.useMediaCapture = input.capture();
 | 
|  #endif
 | 
| -        chrome->runOpenPanel(input->document().frame(), newFileChooser(settings));
 | 
| +        chrome->runOpenPanel(input.document().frame(), newFileChooser(settings));
 | 
|      }
 | 
|      event->setDefaultHandled();
 | 
|  }
 | 
|  
 | 
|  RenderObject* FileInputType::createRenderer(RenderStyle*) const
 | 
|  {
 | 
| -    return new RenderFileUploadControl(element());
 | 
| +    return new RenderFileUploadControl(&element());
 | 
|  }
 | 
|  
 | 
|  bool FileInputType::canSetStringValue() const
 | 
| @@ -203,7 +203,7 @@ bool FileInputType::getTypeSpecificValue(String& value)
 | 
|  void FileInputType::setValue(const String&, bool, TextFieldEventBehavior)
 | 
|  {
 | 
|      m_fileList->clear();
 | 
| -    element()->setNeedsStyleRecalc();
 | 
| +    element().setNeedsStyleRecalc();
 | 
|  }
 | 
|  
 | 
|  PassRefPtr<FileList> FileInputType::createFileList(const Vector<FileChooserFileInfo>& files) const
 | 
| @@ -214,7 +214,7 @@ PassRefPtr<FileList> FileInputType::createFileList(const Vector<FileChooserFileI
 | 
|      // If a directory is being selected, the UI allows a directory to be chosen
 | 
|      // and the paths provided here share a root directory somewhere up the tree;
 | 
|      // we want to store only the relative paths from that point.
 | 
| -    if (size && element()->fastHasAttribute(webkitdirectoryAttr) && RuntimeEnabledFeatures::directoryUploadEnabled()) {
 | 
| +    if (size && element().fastHasAttribute(webkitdirectoryAttr) && RuntimeEnabledFeatures::directoryUploadEnabled()) {
 | 
|          // Find the common root path.
 | 
|          String rootPath = directoryName(files[0].path);
 | 
|          for (size_t i = 1; i < size; i++) {
 | 
| @@ -246,26 +246,26 @@ bool FileInputType::isFileUpload() const
 | 
|  
 | 
|  void FileInputType::createShadowSubtree()
 | 
|  {
 | 
| -    ASSERT(element()->shadow());
 | 
| -    RefPtr<HTMLInputElement> button = HTMLInputElement::create(inputTag, element()->document(), 0, false);
 | 
| +    ASSERT(element().shadow());
 | 
| +    RefPtr<HTMLInputElement> button = HTMLInputElement::create(inputTag, element().document(), 0, false);
 | 
|      button->setType(InputTypeNames::button());
 | 
| -    button->setAttribute(valueAttr, locale().queryString(element()->multiple() ? WebLocalizedString::FileButtonChooseMultipleFilesLabel : WebLocalizedString::FileButtonChooseFileLabel));
 | 
| +    button->setAttribute(valueAttr, locale().queryString(element().multiple() ? WebLocalizedString::FileButtonChooseMultipleFilesLabel : WebLocalizedString::FileButtonChooseFileLabel));
 | 
|      button->setPart(AtomicString("-webkit-file-upload-button", AtomicString::ConstructFromLiteral));
 | 
| -    element()->userAgentShadowRoot()->appendChild(button.release());
 | 
| +    element().userAgentShadowRoot()->appendChild(button.release());
 | 
|  }
 | 
|  
 | 
|  void FileInputType::disabledAttributeChanged()
 | 
|  {
 | 
| -    ASSERT(element()->shadow());
 | 
| -    if (Element* button = toElement(element()->userAgentShadowRoot()->firstChild()))
 | 
| -        button->setBooleanAttribute(disabledAttr, element()->isDisabledFormControl());
 | 
| +    ASSERT(element().shadow());
 | 
| +    if (Element* button = toElement(element().userAgentShadowRoot()->firstChild()))
 | 
| +        button->setBooleanAttribute(disabledAttr, element().isDisabledFormControl());
 | 
|  }
 | 
|  
 | 
|  void FileInputType::multipleAttributeChanged()
 | 
|  {
 | 
| -    ASSERT(element()->shadow());
 | 
| -    if (Element* button = toElement(element()->userAgentShadowRoot()->firstChild()))
 | 
| -        button->setAttribute(valueAttr, locale().queryString(element()->multiple() ? WebLocalizedString::FileButtonChooseMultipleFilesLabel : WebLocalizedString::FileButtonChooseFileLabel));
 | 
| +    ASSERT(element().shadow());
 | 
| +    if (Element* button = toElement(element().userAgentShadowRoot()->firstChild()))
 | 
| +        button->setAttribute(valueAttr, locale().queryString(element().multiple() ? WebLocalizedString::FileButtonChooseMultipleFilesLabel : WebLocalizedString::FileButtonChooseFileLabel));
 | 
|  }
 | 
|  
 | 
|  void FileInputType::setFiles(PassRefPtr<FileList> files)
 | 
| @@ -273,7 +273,7 @@ void FileInputType::setFiles(PassRefPtr<FileList> files)
 | 
|      if (!files)
 | 
|          return;
 | 
|  
 | 
| -    RefPtr<HTMLInputElement> input = element();
 | 
| +    RefPtr<HTMLInputElement> input(element());
 | 
|  
 | 
|      bool pathsChanged = false;
 | 
|      if (files->length() != m_fileList->length()) {
 | 
| @@ -317,12 +317,12 @@ void FileInputType::receiveDropForDirectoryUpload(const Vector<String>& paths)
 | 
|  {
 | 
|      if (Chrome* chrome = this->chrome()) {
 | 
|          FileChooserSettings settings;
 | 
| -        HTMLInputElement* input = element();
 | 
| +        HTMLInputElement& input = element();
 | 
|          settings.allowsDirectoryUpload = true;
 | 
|          settings.allowsMultipleFiles = true;
 | 
|          settings.selectedFiles.append(paths[0]);
 | 
| -        settings.acceptMIMETypes = input->acceptMIMETypes();
 | 
| -        settings.acceptFileExtensions = input->acceptFileExtensions();
 | 
| +        settings.acceptMIMETypes = input.acceptMIMETypes();
 | 
| +        settings.acceptFileExtensions = input.acceptFileExtensions();
 | 
|          chrome->enumerateChosenDirectory(newFileChooser(settings));
 | 
|      }
 | 
|  }
 | 
| @@ -334,8 +334,8 @@ bool FileInputType::receiveDroppedFiles(const DragData* dragData)
 | 
|      if (paths.isEmpty())
 | 
|          return false;
 | 
|  
 | 
| -    HTMLInputElement* input = element();
 | 
| -    if (input->fastHasAttribute(webkitdirectoryAttr) && RuntimeEnabledFeatures::directoryUploadEnabled()) {
 | 
| +    HTMLInputElement& input = element();
 | 
| +    if (input.fastHasAttribute(webkitdirectoryAttr) && RuntimeEnabledFeatures::directoryUploadEnabled()) {
 | 
|          receiveDropForDirectoryUpload(paths);
 | 
|          return true;
 | 
|      }
 | 
| @@ -346,7 +346,7 @@ bool FileInputType::receiveDroppedFiles(const DragData* dragData)
 | 
|      for (unsigned i = 0; i < paths.size(); ++i)
 | 
|          files.append(FileChooserFileInfo(paths[i]));
 | 
|  
 | 
| -    if (input->fastHasAttribute(multipleAttr)) {
 | 
| +    if (input.fastHasAttribute(multipleAttr)) {
 | 
|          filesChosen(files);
 | 
|      } else {
 | 
|          Vector<FileChooserFileInfo> firstFileOnly;
 | 
| 
 |