Reviewed by Adele.
authorkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Mar 2007 22:38:17 +0000 (22:38 +0000)
committerkdecker <kdecker@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 6 Mar 2007 22:38:17 +0000 (22:38 +0000)
        Fixed: <rdar://problem/5041660> REGRESSION: <keygen> element broken, prevents users from signing up for Thawte email certs

        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap): Added <keygen> to the DOM bindings so it can be accessed from Objective-C.
        * css/html4.css: Apply the look of the <select> element to <keygen>.
        * html/HTMLElementFactory.cpp:
        (WebCore::keygenConstructor): Added.
        (WebCore::createFunctionMap): Added keygen.
        * html/HTMLSelectElement.cpp: Made const typeAheadTimeout variable static const.
        (WebCore::HTMLSelectElement::HTMLSelectElement):  Fix both HTMLSelectElement constructors to initialize the
         same number of member variables. The fact that some fields were not initialized could (and would) crash the
         keygen element when selecting different items. Also removed m_typedString(String()) from the constructor
         initialization because this is not needed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@19988 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/html/keygen-expected.txt [new file with mode: 0644]
LayoutTests/fast/html/keygen.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/bindings/objc/DOM.mm
WebCore/css/html4.css
WebCore/html/HTMLElementFactory.cpp
WebCore/html/HTMLSelectElement.cpp

index 7b7192a..eed51c5 100644 (file)
@@ -1,3 +1,12 @@
+2007-03-06  Kevin Decker <kdecker@apple.com>
+
+        Reviewed by Adele.
+        
+        <rdar://problem/5041660>
+        When we made the switch to non-NSView form controls, <keygen> was accidentally left behind.
+        * fast/html/keygen-expected.txt: Added.
+        * fast/html/keygen.html: Added.
+
 2007-03-06  Nikolas Zimmermann  <zimmermann@kde.org>
 
         Reviewed by Mitz.
diff --git a/LayoutTests/fast/html/keygen-expected.txt b/LayoutTests/fast/html/keygen-expected.txt
new file mode 100644 (file)
index 0000000..2fb3dfd
--- /dev/null
@@ -0,0 +1,11 @@
+layer at (0,0) size 800x600
+  RenderView at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderMenuList {KEYGEN} at (2,2) size 148x18 [bgcolor=#FFFFFF]
+        RenderBlock (anonymous) at (8,2) size 117x13
+          RenderText at (0,0) size 99x13
+            text run at (0,0) width 99: "2048 (High Grade)"
+      RenderText {#text} at (0,0) size 0x0
+      RenderText {#text} at (0,0) size 0x0
diff --git a/LayoutTests/fast/html/keygen.html b/LayoutTests/fast/html/keygen.html
new file mode 100644 (file)
index 0000000..5520b8b
--- /dev/null
@@ -0,0 +1,5 @@
+<html>
+<!--<rdar://problem/5041660> REGRESSION: <keygen> element broken, prevents users from signing up for thawte email certs -->
+<keygen id="keygen" name="spkac" challange="9uXv8BxtVEKAed34">            
+</html>
+
index 3736b37..dd218f1 100644 (file)
@@ -1,3 +1,22 @@
+2007-03-06  Kevin Decker  <kdecker@apple.com>
+
+        Reviewed by Adele.
+
+        Fixed: <rdar://problem/5041660> REGRESSION: <keygen> element broken, prevents users from signing up for Thawte email certs
+        
+        * bindings/objc/DOM.mm:
+        (WebCore::createElementClassMap): Added <keygen> to the DOM bindings so it can be accessed from Objective-C.
+        * css/html4.css: Apply the look of the <select> element to <keygen>.
+        * html/HTMLElementFactory.cpp:
+        (WebCore::keygenConstructor): Added. 
+        (WebCore::createFunctionMap): Added keygen.
+        * html/HTMLSelectElement.cpp: Made const typeAheadTimeout variable static const. 
+        (WebCore::HTMLSelectElement::HTMLSelectElement):  Fix both HTMLSelectElement constructors to initialize the
+         same number of member variables. The fact that some fields were not initialized could (and would) crash the
+         keygen element when selecting different items. Also removed m_typedString(String()) from the constructor
+         initialization because this is not needed.
+
+
 2007-03-06  Kevin McCullough  <kmccullough@apple.com>
 
         Reviewed by Darin.
index 68f4a00..02fe30e 100644 (file)
@@ -164,6 +164,7 @@ static void createElementClassMap()
     addElementClass(HTMLNames::preTag, [DOMHTMLPreElement class]);
     addElementClass(HTMLNames::qTag, [DOMHTMLQuoteElement class]);
     addElementClass(HTMLNames::scriptTag, [DOMHTMLScriptElement class]);
+    addElementClass(HTMLNames::keygenTag, [DOMHTMLSelectElement class]);
     addElementClass(HTMLNames::selectTag, [DOMHTMLSelectElement class]);
     addElementClass(HTMLNames::styleTag, [DOMHTMLStyleElement class]);
     addElementClass(HTMLNames::tableTag, [DOMHTMLTableElement class]);
index cde85a7..69edb25 100644 (file)
@@ -298,7 +298,7 @@ button {
     -webkit-appearance: button;
 }
 
-input, textarea, select, button, isindex {
+input, textarea, keygen, select, button, isindex {
     margin: 0__qem;
     font: -webkit-small-control;
     color: initial;
@@ -412,7 +412,7 @@ input[type="range"]::-webkit-slider-thumb {
     -webkit-user-select: ignore
 }
 
-input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled, input[type="file"]:disabled::-webkit-file-upload-button, button:disabled, select:disabled, optgroup:disabled, option:disabled {
+input[type="button"]:disabled, input[type="submit"]:disabled, input[type="reset"]:disabled, input[type="file"]:disabled::-webkit-file-upload-button, button:disabled, select:disabled, keygen:disabled, optgroup:disabled, option:disabled {
     color: GrayText
 }
 
@@ -424,7 +424,7 @@ input[type="button"]:active:disabled, input[type="submit"]:active:disabled, inpu
     border-style: outset
 }
 
-select, button, input[type="button"], input[type="image"], input[type="submit"], input[type="reset"], input[type="checkbox"], input[type="radio"], input[type="file"]::-webkit-file-upload-button, img {
+select, keygen, button, input[type="button"], input[type="image"], input[type="submit"], input[type="reset"], input[type="checkbox"], input[type="radio"], input[type="file"]::-webkit-file-upload-button, img {
     -webkit-user-select: ignore
 }
 
@@ -442,7 +442,7 @@ input[type="radio"] {
     box-sizing: border-box;
 }
 
-select {
+keygen, select {
     -webkit-appearance: menulist;
     box-sizing: border-box;
     -webkit-box-align: center;
@@ -463,7 +463,7 @@ select[size][multiple] {
     -webkit-border-radius: initial;
     white-space: initial;
 }
+
 select[size="0"],
 select[size="1"] {
     -webkit-appearance: menulist;
@@ -549,7 +549,7 @@ html:focus, body:focus, input[readonly]:focus {
     outline: none
 }
   
-input:focus, textarea:focus, isindex:focus, select:focus {
+input:focus, textarea:focus, isindex:focus, keygen:focus, select:focus {
     outline-offset: -2px
 }
 
index 7678be6..5cf34cb 100644 (file)
@@ -50,6 +50,7 @@
 #include "HTMLIFrameElement.h"
 #include "HTMLImageElement.h"
 #include "HTMLIsIndexElement.h"
+#include "HTMLKeygenElement.h"
 #include "HTMLLabelElement.h"
 #include "HTMLLegendElement.h"
 #include "HTMLLIElement.h"
@@ -169,6 +170,11 @@ static PassRefPtr<HTMLElement> fieldsetConstructor(const AtomicString&, Document
     return new HTMLFieldSetElement(doc, form);
 }
 
+static PassRefPtr<HTMLElement> keygenConstructor(const AtomicString&, Document* doc, HTMLFormElement* form, bool)
+{
+    return new HTMLKeygenElement(doc, form);
+}
+
 static PassRefPtr<HTMLElement> labelConstructor(const AtomicString&, Document* doc, HTMLFormElement*, bool)
 {
     return new HTMLLabelElement(doc);
@@ -422,6 +428,7 @@ static void createFunctionMap()
     addTag(inputTag, inputConstructor);
     addTag(insTag, modConstructor);
     addTag(isindexTag, isindexConstructor);
+    addTag(keygenTag, keygenConstructor);
     addTag(labelTag, labelConstructor);
     addTag(legendTag, legendConstructor);
     addTag(liTag, liConstructor);
index 91042cc..0e9968b 100644 (file)
@@ -60,7 +60,7 @@ namespace WebCore {
 using namespace EventNames;
 using namespace HTMLNames;
 
-const DOMTimeStamp typeAheadTimeout = 1000;
+static const DOMTimeStamp typeAheadTimeout = 1000;
 
 HTMLSelectElement::HTMLSelectElement(Document* doc, HTMLFormElement* f)
     : HTMLGenericFormElement(selectTag, doc, f)
@@ -74,13 +74,22 @@ HTMLSelectElement::HTMLSelectElement(Document* doc, HTMLFormElement* f)
     , m_activeSelectionState(false)
     , m_repeatingChar(0)
     , m_lastCharTime(0)
-    , m_typedString(String())
 {
     document()->registerFormElementWithState(this);
 }
 
 HTMLSelectElement::HTMLSelectElement(const QualifiedName& tagName, Document* doc, HTMLFormElement* f)
-    : HTMLGenericFormElement(tagName, doc, f), m_minwidth(0), m_size(0), m_multiple(false), m_recalcListItems(false)
+    : HTMLGenericFormElement(tagName, doc, f)
+    , m_minwidth(0)
+    , m_size(0)
+    , m_multiple(false)
+    , m_recalcListItems(false)
+    , m_lastOnChangeIndex(-1)
+    , m_activeSelectionAnchorIndex(-1)
+    , m_activeSelectionEndIndex(-1)
+    , m_activeSelectionState(false)
+    , m_repeatingChar(0)
+    , m_lastCharTime(0)
 {
     document()->registerFormElementWithState(this);
 }