2011-06-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Convert file <input> to use the new shadow DOM model
        https://bugs.webkit.org/show_bug.cgi?id=59005

        Refactoring, covered by existing tests.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId): Removed FILE_UPLOAD_BUTTON pseudoId and all references to it.
        (WebCore::nameToPseudoTypeMap): Ditto.
        (WebCore::CSSSelector::extractPseudoType): Ditto.
        * css/CSSSelector.h: Ditto.
        * css/html.css:
        (input[type="button"], input[type="submit"], input[type="reset"]): Moved -webkit-file-upload-button to its own rule.
        (input[type="file"]::-webkit-file-upload-button): Added and moved all previously hard-coded properties there.
        * html/FileInputType.cpp:
        (WebCore::UploadButtonElement::create): Added.
        (WebCore::UploadButtonElement::UploadButtonElement): Added.
        (WebCore::UploadButtonElement::shadowPseudoId): Added.
        (WebCore::FileInputType::createShadowSubtree): Added.
        * html/FileInputType.h: Added createShadowSubtree decl.
        * page/DragController.cpp:
        (WebCore::asFileInput): Changed the logic to use new shadow DOM.
        * rendering/RenderFileUploadControl.cpp: Removed UploadButton class.
        (WebCore::RenderFileUploadControl::~RenderFileUploadControl): Removed initializer for m_button.
        (WebCore::RenderFileUploadControl::updateFromElement): Removed attachment logic that's no longer necessary.
        (WebCore::nodeWidth): Added a helper.
        (WebCore::RenderFileUploadControl::maxFilenameWidth): Changed to use uploadButton and nodeWidth.
        (WebCore::RenderFileUploadControl::paintObject): Ditto.
        (WebCore::RenderFileUploadControl::uploadButton): Added a helper to retrieve the button.
        (WebCore::RenderFileUploadControl::buttonValue): Changed to use uploadButton.
        * rendering/RenderFileUploadControl.h: Changed decls.
        * rendering/style/RenderStyleConstants.h: Removed FILE_UPLOAD_BUTTON decls.

git-svn-id: svn://svn.chromium.org/blink/trunk@88115 bbb929c8-8fbe-4397-9dbb-9b2b20218538
diff --git a/Source/WebCore/css/html.css b/Source/WebCore/css/html.css
index 11d9cdd..f9aafea 100644
--- a/Source/WebCore/css/html.css
+++ b/Source/WebCore/css/html.css
@@ -517,11 +517,17 @@
     border: initial;
 }
 
-input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button {
+input[type="button"], input[type="submit"], input[type="reset"] {
     -webkit-appearance: push-button;
     white-space: pre
 }
 
+input[type="file"]::-webkit-file-upload-button {
+    -webkit-appearance: push-button;
+    white-space: nowrap;
+    margin: 0;
+}
+
 input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button {
     -webkit-box-align: center;
     text-align: center;