Home | History | Annotate | Download | only in html
      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 #ifndef FileInputType_h
     33 #define FileInputType_h
     34 
     35 #include "core/html/BaseClickableWithKeyInputType.h"
     36 #include "core/platform/FileChooser.h"
     37 #include "wtf/RefPtr.h"
     38 
     39 namespace WebCore {
     40 
     41 class DragData;
     42 class FileList;
     43 
     44 class FileInputType : public BaseClickableWithKeyInputType, private FileChooserClient {
     45 public:
     46     static PassOwnPtr<InputType> create(HTMLInputElement*);
     47     static Vector<FileChooserFileInfo> filesFromFormControlState(const FormControlState&);
     48 
     49 private:
     50     FileInputType(HTMLInputElement*);
     51     virtual const AtomicString& formControlType() const OVERRIDE;
     52     virtual FormControlState saveFormControlState() const OVERRIDE;
     53     virtual void restoreFormControlState(const FormControlState&) OVERRIDE;
     54     virtual bool appendFormData(FormDataList&, bool) const OVERRIDE;
     55     virtual bool valueMissing(const String&) const OVERRIDE;
     56     virtual String valueMissingText() const OVERRIDE;
     57     virtual void handleDOMActivateEvent(Event*) OVERRIDE;
     58     virtual RenderObject* createRenderer(RenderStyle*) const OVERRIDE;
     59     virtual bool canSetStringValue() const OVERRIDE;
     60     virtual bool canChangeFromAnotherType() const OVERRIDE;
     61     virtual FileList* files() OVERRIDE;
     62     virtual void setFiles(PassRefPtr<FileList>) OVERRIDE;
     63     virtual bool canSetValue(const String&) OVERRIDE;
     64     virtual bool getTypeSpecificValue(String&) OVERRIDE; // Checked first, before internal storage or the value attribute.
     65     virtual void setValue(const String&, bool valueChanged, TextFieldEventBehavior) OVERRIDE;
     66     virtual bool receiveDroppedFiles(const DragData*) OVERRIDE;
     67     virtual String droppedFileSystemId() OVERRIDE;
     68     virtual bool isFileUpload() const OVERRIDE;
     69     virtual void createShadowSubtree() OVERRIDE;
     70     virtual void disabledAttributeChanged() OVERRIDE;
     71     virtual void multipleAttributeChanged() OVERRIDE;
     72     virtual String defaultToolTip() const OVERRIDE;
     73 
     74     // FileChooserClient implementation.
     75     virtual void filesChosen(const Vector<FileChooserFileInfo>&) OVERRIDE;
     76 
     77     PassRefPtr<FileList> createFileList(const Vector<FileChooserFileInfo>& files) const;
     78     void receiveDropForDirectoryUpload(const Vector<String>&);
     79 
     80     RefPtr<FileList> m_fileList;
     81 
     82     String m_droppedFileSystemId;
     83 };
     84 
     85 } // namespace WebCore
     86 
     87 #endif // FileInputType_h
     88