<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>33253</bug_id>
          
          <creation_ts>2010-01-06 05:51:44 -0800</creation_ts>
          <short_desc>Want access to &lt;label&gt; element associated with &lt;input&gt;</short_desc>
          <delta_ts>2023-12-23 09:23:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Android</rep_platform>
          <op_sys>Android</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter>scroggo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>annevk</cc>
    
    <cc>darin</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yael</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177573</commentid>
    <comment_count>0</comment_count>
    <who name="">scroggo</who>
    <bug_when>2010-01-06 05:51:44 -0800</bug_when>
    <thetext>On Android, we want to use the text in the &lt;label&gt; element as a hint for an &lt;input&gt; element.  Although the information is freely available, I found myself copying labelForElement() in AccessibilityRenderObject.cpp.  Would it be possible to make this a public function?  That way we can call the same function, and if WebKit changes we will not need to make any changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177583</commentid>
    <comment_count>1</comment_count>
      <attachid>45962</attachid>
    <who name="">scroggo</who>
    <bug_when>2010-01-06 07:00:58 -0800</bug_when>
    <thetext>Created attachment 45962
Patch making labelForElement a public static function in HTMLLabelElement</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177626</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 09:52:10 -0800</bug_when>
    <thetext>Attachment 45962 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Traceback (most recent call last):
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 98, in &lt;module&gt;
    main()
  File &quot;WebKitTools/Scripts/check-webkit-style&quot;, line 62, in main
    defaults = style.ArgumentDefaults(style.DEFAULT_OUTPUT_FORMAT,
AttributeError: &apos;module&apos; object has no attribute &apos;ArgumentDefaults&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177628</commentid>
    <comment_count>3</comment_count>
      <attachid>45962</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 09:58:38 -0800</bug_when>
    <thetext>Comment on attachment 45962
Patch making labelForElement a public static function in HTMLLabelElement

I&apos;m not entirely sure this is a good change.

&gt; +HTMLLabelElement* HTMLLabelElement::labelForElement(Element* element)
&gt; +{
&gt; +    RefPtr&lt;NodeList&gt; list = element-&gt;document()-&gt;getElementsByTagName(&quot;label&quot;);

I know you&apos;re just moving the above code, but I&apos;ll note that using the NodeList is a quite-inefficient way to iterate all the label elements -- it&apos;s the public DOM API for JavaScript use, but inside the engine it&apos;s not a great idea.

It would be straightforward to just iterate all the nodes in the document looking for label elements instead. It&apos;s also really strange that this function uses a node list created by getElementsByTagName but then still checks the tag name of each element in the list. That makes no sense.

You just moved the code, but it&apos;s not great code.

The only real value in having this function in the header would be knowing that the algorithm used is exactly the same one used by HTMLLabelElement itself. And yet I see no evidence that this is true. The function was used only in the accessibility code. It&apos;s inefficient to iterate an entire document, so using this function would typically not be encouraged.

And it&apos;s straightforward to implement this in terms of already existing public functions.

&gt; +    unsigned len = list-&gt;length();

As long as you&apos;re moving the code, it would be good to use &quot;length&quot; instead of &quot;len&quot;. We prefer words to abbreviations.

&gt; Index: WebCore/html/HTMLLabelElement.h
&gt; ===================================================================
&gt; --- WebCore/html/HTMLLabelElement.h	(revision 52806)
&gt; +++ WebCore/html/HTMLLabelElement.h	(working copy)
&gt; @@ -56,6 +56,7 @@ public:
&gt;  
&gt;      void focus(bool restorePreviousSelection = true);
&gt;  
&gt; +    static HTMLLabelElement* labelForElement(Element* element);
&gt;   private:
&gt;      String m_formElementID;

There should be a blank line after it so this function isn&apos;t paragraphed with the private members below.

The argument name &quot;element&quot; should be omitted.

I assume you want to make this function public for some kind of Chromium use. Could you be more clear about the specifics? Typically, if there&apos;s a function that is not used anywhere in the WebKit source tree people will feel free to refactor so it&apos;s private again. So I think it would be best to add the use of the function at the same time you make it public.

review- for now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177629</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 09:59:34 -0800</bug_when>
    <thetext>Ah, not Chromium, Android.

It&apos;s OK to make this public, but it&apos;s also trivial to do this code in WebKit. I&apos;m not entirely sure making this a public function is a good idea. If this was an important operation we&apos;d probably want a more sophisticated approach so we didn&apos;t have to iterate the entire document each time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177699</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-01-06 12:19:59 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; It&apos;s OK to make this public, but it&apos;s also trivial to do this code in WebKit.

In the WebKit layer rather than in WebCore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2001747</commentid>
    <comment_count>6</comment_count>
    <who name="Anne van Kesteren">annevk</who>
    <bug_when>2023-12-23 09:23:20 -0800</bug_when>
    <thetext>This is now available through IDL.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45962</attachid>
            <date>2010-01-06 07:00:58 -0800</date>
            <delta_ts>2010-06-11 11:57:34 -0700</delta_ts>
            <desc>Patch making labelForElement a public static function in HTMLLabelElement</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>4027</size>
            <attacher>scroggo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAJKHJldmlzaW9uIDUyODA2KQorKysgV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0Fj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OTAsMjEgKzk5
MCw2IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphcmlhTGEKICAgICAKICAg
ICByZXR1cm4gYWNjZXNzaWJpbGl0eURlc2NyaXB0aW9uRm9yRWxlbWVudHMoZWxlbWVudHMpOwog
fQotCi1zdGF0aWMgSFRNTExhYmVsRWxlbWVudCogbGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVs
ZW1lbnQpCi17Ci0gICAgUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZWxlbWVudC0+ZG9jdW1lbnQo
KS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxhYmVsIik7Ci0gICAgdW5zaWduZWQgbGVuID0gbGlz
dC0+bGVuZ3RoKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0g
ICAgICAgIGlmIChsaXN0LT5pdGVtKGkpLT5oYXNUYWdOYW1lKGxhYmVsVGFnKSkgewotICAgICAg
ICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBzdGF0aWNfY2FzdDxIVE1MTGFiZWxFbGVt
ZW50Kj4obGlzdC0+aXRlbShpKSk7Ci0gICAgICAgICAgICBpZiAobGFiZWwtPmNvcnJlc3BvbmRp
bmdDb250cm9sKCkgPT0gZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbGFiZWw7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIDA7Ci19CiAgICAgCiBIVE1MTGFiZWxF
bGVtZW50KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpsYWJlbEVsZW1lbnRDb250YWluZXIo
KSBjb25zdAogewpAQCAtMTA1MSw3ICsxMDM2LDcgQEAgU3RyaW5nIEFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6OnRpdGxlKAogICAgIH0KICAgICAKICAgICBpZiAoaXNJbnB1dFRhZyB8fCBBY2Nl
c3NpYmlsaXR5T2JqZWN0Ojppc0FSSUFJbnB1dChhcmlhUm9sZSkgfHwgaXNDb250cm9sKCkpIHsK
LSAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwgPSBsYWJlbEZvckVsZW1lbnQoc3RhdGlj
X2Nhc3Q8RWxlbWVudCo+KG5vZGUpKTsKKyAgICAgICAgSFRNTExhYmVsRWxlbWVudCogbGFiZWwg
PSBIVE1MTGFiZWxFbGVtZW50OjpsYWJlbEZvckVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KG5vZGUpKTsKICAgICAgICAgaWYgKGxhYmVsICYmICF0aXRsZVVJRWxlbWVudCgpKQogICAgICAg
ICAgICAgcmV0dXJuIGxhYmVsLT5pbm5lclRleHQoKTsKICAgICAgICAgCkBAIC0xMTY0LDcgKzEx
NDksNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmNoZWNrCiAgICAgaWYg
KCFtX3JlbmRlcmVyKQogICAgICAgICByZXR1cm4gSW50UmVjdCgpOwogICAgIAotICAgIEhUTUxM
YWJlbEVsZW1lbnQqIGxhYmVsID0gbGFiZWxGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQq
PihtX3JlbmRlcmVyLT5ub2RlKCkpKTsKKyAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IEhU
TUxMYWJlbEVsZW1lbnQ6OmxhYmVsRm9yRWxlbWVudChzdGF0aWNfY2FzdDxFbGVtZW50Kj4obV9y
ZW5kZXJlci0+bm9kZSgpKSk7CiAgICAgaWYgKCFsYWJlbCB8fCAhbGFiZWwtPnJlbmRlcmVyKCkp
CiAgICAgICAgIHJldHVybiBib3VuZGluZ0JveFJlY3QoKTsKICAgICAKQEAgLTEzNzcsNyArMTM2
Miw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXIKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgTm9kZSogZWxlbWVudCA9IG1fcmVuZGVyZXItPm5vZGUoKTsK
LSAgICBIVE1MTGFiZWxFbGVtZW50KiBsYWJlbCA9IGxhYmVsRm9yRWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oZWxlbWVudCkpOworICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gSFRN
TExhYmVsRWxlbWVudDo6bGFiZWxGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihlbGVt
ZW50KSk7CiAgICAgaWYgKGxhYmVsICYmIGxhYmVsLT5yZW5kZXJlcigpKQogICAgICAgICByZXR1
cm4gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShsYWJlbC0+cmVuZGVyZXIoKSk7CiAKQEAg
LTI1NTYsNyArMjU0MSw3IEBAIEFjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5k
ZXIKIAogICAgIE5vZGUqIG5vZGUgPSBtX3JlbmRlcmVyLT5ub2RlKCk7CiAgICAgaWYgKG5vZGUg
JiYgbm9kZS0+aXNIVE1MRWxlbWVudCgpKSB7Ci0gICAgICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxh
YmVsID0gbGFiZWxGb3JFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7CisgICAg
ICAgIEhUTUxMYWJlbEVsZW1lbnQqIGxhYmVsID0gSFRNTExhYmVsRWxlbWVudDo6bGFiZWxGb3JF
bGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKSk7CiAgICAgICAgIGlmIChsYWJlbCkK
ICAgICAgICAgICAgIHJldHVybiBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGxhYmVsLT5y
ZW5kZXJlcigpKTsKICAgICB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZp
c2lvbiA1MjgwNikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNs
dWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJOb2RlTGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTE2MSw0ICsxNjIsMTkg
QEAgdm9pZCBIVE1MTGFiZWxFbGVtZW50OjpzZXRIdG1sRm9yKGNvbnN0IAogICAgIHNldEF0dHJp
YnV0ZShmb3JBdHRyLCB2YWx1ZSk7CiB9CiAKK0hUTUxMYWJlbEVsZW1lbnQqIEhUTUxMYWJlbEVs
ZW1lbnQ6OmxhYmVsRm9yRWxlbWVudChFbGVtZW50KiBlbGVtZW50KQoreworICAgIFJlZlB0cjxO
b2RlTGlzdD4gbGlzdCA9IGVsZW1lbnQtPmRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJsYWJlbCIpOworICAgIHVuc2lnbmVkIGxlbiA9IGxpc3QtPmxlbmd0aCgpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgICAgICBpZiAobGlzdC0+aXRlbShp
KS0+aGFzVGFnTmFtZShsYWJlbFRhZykpIHsKKyAgICAgICAgICAgIEhUTUxMYWJlbEVsZW1lbnQq
IGxhYmVsID0gc3RhdGljX2Nhc3Q8SFRNTExhYmVsRWxlbWVudCo+KGxpc3QtPml0ZW0oaSkpOwor
ICAgICAgICAgICAgaWYgKGxhYmVsLT5jb3JyZXNwb25kaW5nQ29udHJvbCgpID09IGVsZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGxhYmVsOworICAgICAgICB9CisgICAgfQorCisgICAg
cmV0dXJuIDA7Cit9CisKIH0gLy8gbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExh
YmVsRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50
LmgJKHJldmlzaW9uIDUyODA2KQorKysgV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNTYsNiArNTYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZvY3Vz
KGJvb2wgcmVzdG9yZVByZXZpb3VzU2VsZWN0aW9uID0gdHJ1ZSk7CiAKKyAgICBzdGF0aWMgSFRN
TExhYmVsRWxlbWVudCogbGFiZWxGb3JFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQpOwogIHByaXZh
dGU6CiAgICAgU3RyaW5nIG1fZm9ybUVsZW1lbnRJRDsKIH07Cg==
</data>
<flag name="review"
          id="28153"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>