<?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>62621</bug_id>
          
          <creation_ts>2011-06-13 22:10:59 -0700</creation_ts>
          <short_desc>Span ID duplicated when pressing enter at beginning of span</short_desc>
          <delta_ts>2011-06-15 10:06:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</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>1</everconfirmed>
          <reporter name="Annie Sullivan">sullivan</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adele</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>420216</commentid>
    <comment_count>0</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-13 22:10:59 -0700</bug_when>
    <thetext>Put the following in a contenteditable div:

&lt;span id=&quot;dupe&quot;&gt;a&lt;/span&gt;

Put the cursor before &quot;a&quot; and press enter. Result:

&lt;span id=&quot;dupe&quot;&gt;&lt;div&gt;&lt;span id=&quot;dupe&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/div&gt;a&lt;/span&gt;

The id of the span should not be duplicated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420780</commentid>
    <comment_count>1</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 15:38:44 -0700</bug_when>
    <thetext>Ryosuke, in comment #7 of bug 61594, you suggested that before fixing this issue, we should merge InsertParagraphSeparatorCommand::cloneHierarchyUnderNewBlock() with CompositeEditCommand::cloneParagraphUnderNewElement() since they are very similar functions. I started looking into this, but several differences in functionality tripped me up:

1. The InsertParagraphSeparator version actually operates as two functions paired together: getAncestorsInsideBlock() collects the ancestors and then cloneHierarchyUnderNewBlock() clones them. There doesn&apos;t appear to be much reason for this, so it should be okay to change.

2. For listing the ancestors, getAncestorsInsideBlock takes an insertion Node and an outer block Element. It excludes both these nodes from the list of ancestors, only appending the elements between them. By contrast, cloneParagraphUnderNewElement() takes a start Position and an outer Node, and includes the position.deprecatedNode() and the outer node in the list of ancestors. Swapping between using positions and using nodes, counting ancestors differently, and keeping lists of Nodes instead of Elements is a bigger change in behavior. We also end up with another dependency on deprecatedNode.

3. cloneParagraphUnderNewElement() has no return value. cloneHierarchyUnderNewBlock() returns the deepest Element in the ancestor list that was cloned. We&apos;d need to add this functionality into cloneParagraphUnderNewElement(), but it seems like an arbitrary return value to add.

Do you still think that merging these functions is the right thing to do? I am working on a patch to do this, but because of the differences in functionality I&apos;m having a lot of trouble getting the arguments to cloneParagraphUnderNewElement correct. Each time I fix a layout test, a different layout test breaks with a slightly different problem.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420784</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 15:43:37 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; 1. The InsertParagraphSeparator version actually operates as two functions paired together: getAncestorsInsideBlock() collects the ancestors and then cloneHierarchyUnderNewBlock() clones them. There doesn&apos;t appear to be much reason for this, so it should be okay to change.

Just having one function that collects and clones ancestors should work.

&gt; 2. For listing the ancestors, getAncestorsInsideBlock takes an insertion Node and an outer block Element. It excludes both these nodes from the list of ancestors, only appending the elements between them. By contrast, cloneParagraphUnderNewElement() takes a start Position and an outer Node, and includes the position.deprecatedNode() and the outer node in the list of ancestors. Swapping between using positions and using nodes, counting ancestors differently, and keeping lists of Nodes instead of 
Elements is a bigger change in behavior. We also end up with another dependency on deprecatedNode.

The merged function should take a starting Position and the outer block node.  We may need to get rid of deprecatedNode dependency in a separate bug.

&gt; 3. cloneParagraphUnderNewElement() has no return value. cloneHierarchyUnderNewBlock() returns the deepest Element in the ancestor list that was cloned. We&apos;d need to add this functionality into cloneParagraphUnderNewElement(), but it seems like an arbitrary return value to add.

I agree. I&apos;m curious why we&apos;d need that.

&gt; Do you still think that merging these functions is the right thing to do? I am working on a patch to do this, but because of the differences in functionality I&apos;m having a lot of trouble getting the arguments to cloneParagraphUnderNewElement correct. Each time I fix a layout test, a different layout test breaks with a slightly different problem.

I think we should eventually merge these two functions, but that isn&apos;t really a requirement for you to fix other bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420793</commentid>
    <comment_count>3</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 15:54:44 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; &gt; 2. For listing the ancestors, getAncestorsInsideBlock takes an insertion Node and an outer block Element. It excludes both these nodes from the list of ancestors, only appending the elements between them. By contrast, cloneParagraphUnderNewElement() takes a start Position and an outer Node, and includes the position.deprecatedNode() and the outer node in the list of ancestors. Swapping between using positions and using nodes, counting ancestors differently, and keeping lists of Nodes instead of 
&gt; Elements is a bigger change in behavior. We also end up with another dependency on deprecatedNode.
&gt; 
&gt; The merged function should take a starting Position and the outer block node.  We may need to get rid of deprecatedNode dependency in a separate bug.

CompositeEditCommand::cloneParagraphUnderNewElement() also takes an end position (in case there are also sibling nodes to clone) and a block element (to clone the paragraph under). I think both of these are needed as well.

&gt; &gt; 3. cloneParagraphUnderNewElement() has no return value. cloneHierarchyUnderNewBlock() returns the deepest Element in the ancestor list that was cloned. We&apos;d need to add this functionality into cloneParagraphUnderNewElement(), but it seems like an arbitrary return value to add.
&gt; 
&gt; I agree. I&apos;m curious why we&apos;d need that.

I think InsertParagraphSeparatorCommand is the only caller that would need it. The reason is that it inserts the actual line break by calling appendBlockPlaceholder() on that deepest cloned node. Maybe there is a better way to do this, like creating the block placeholder before cloning?

&gt; &gt; Do you still think that merging these functions is the right thing to do? I am working on a patch to do this, but because of the differences in functionality I&apos;m having a lot of trouble getting the arguments to cloneParagraphUnderNewElement correct. Each time I fix a layout test, a different layout test breaks with a slightly different problem.
&gt; 
&gt; I think we should eventually merge these two functions, but that isn&apos;t really a requirement for you to fix other bugs.

The whole thing seems pretty fragile; the existing code calls deprecatedNode() in both places and it seems like we&apos;d want to get rid of those before we do a bigger refactor. But I think just getting rid of IDs when cloning can be done in a much simpler change that doesn&apos;t require any refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420843</commentid>
    <comment_count>4</comment_count>
      <attachid>97191</attachid>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 16:37:52 -0700</bug_when>
    <thetext>Created attachment 97191
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420848</commentid>
    <comment_count>5</comment_count>
      <attachid>97191</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 16:42:37 -0700</bug_when>
    <thetext>Comment on attachment 97191
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97191&amp;action=review

&gt; Source/WebCore/editing/InsertParagraphSeparatorCommand.cpp:139
&gt; +        // Delete id attribute from the cloned child element because the same id cannot be used for more than one element

I don&apos;t think this comment is necessary.  It&apos;s self-evident.
More interesting question to ask is whether if we&apos;d ever delete the original element after cloning hierarchy, in which case we shouldn&apos;t be removing id attribute.

&gt; Source/WebCore/editing/InsertParagraphSeparatorCommand.cpp:141
&gt; +        child-&gt;removeAttribute(HTMLNames::idAttr, ec);

Do you really need &quot;HTMLNames::&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420850</commentid>
    <comment_count>6</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 16:48:04 -0700</bug_when>
    <thetext>(In reply to comment #5)

Will create a patch to address the rest of the comments soon, wanted to answer this one right away in case I&apos;m missing something:

&gt; More interesting question to ask is whether if we&apos;d ever delete the original element after cloning hierarchy, in which case we shouldn&apos;t be removing id attribute.

This function is called from two places in InsertParagraphCommand, and they both look like this:

        appendBlockPlaceholder(cloneHierarchyUnderNewBlock(ancestors, blockToInsert));

        // In this case, we need to set the new ending selection.
        setEndingSelection(VisibleSelection(insertionPosition, DOWNSTREAM));
        return;

Neither appendBlockPlaceholder nor setEndingSelection ever delete any nodes, so I think we&apos;re safe here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420853</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 16:49:40 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; &gt; More interesting question to ask is whether if we&apos;d ever delete the original element after cloning hierarchy, in which case we shouldn&apos;t be removing id attribute.
&gt; 
&gt; This function is called from two places in InsertParagraphCommand, and they both look like this:
&gt; 
&gt;         appendBlockPlaceholder(cloneHierarchyUnderNewBlock(ancestors, blockToInsert));
&gt; 
&gt;         // In this case, we need to set the new ending selection.
&gt;         setEndingSelection(VisibleSelection(insertionPosition, DOWNSTREAM));
&gt;         return;
&gt; 
&gt; Neither appendBlockPlaceholder nor setEndingSelection ever delete any nodes, so I think we&apos;re safe here.

Right, and that&apos;ll be a useful comment to have.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420859</commentid>
    <comment_count>8</comment_count>
      <attachid>97197</attachid>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 17:05:31 -0700</bug_when>
    <thetext>Created attachment 97197
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420873</commentid>
    <comment_count>9</comment_count>
      <attachid>97197</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 17:18:28 -0700</bug_when>
    <thetext>Comment on attachment 97197
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97197&amp;action=review

&gt; LayoutTests/editing/inserting/return-key-span-start-expected.txt:7
&gt; +| &lt;span&gt;
&gt; +|   id=&quot;dupe&quot;
&gt; +|   &lt;div&gt;
&gt; +|     &lt;span&gt;
&gt; +|       &lt;br&gt;

Wow!  Why are we nesting div inside span?  Can we fix this?

&gt; Source/WebCore/editing/InsertParagraphSeparatorCommand.cpp:140
&gt; +        // It should always be okay to delete the id of cloned elements, because the codepaths that call this method
&gt; +        // only call appendBlockPlaceholder and setEndingSelection afterward, which never delete the original node.

I&apos;m sad that there&apos;s no way to assert this.  Also this comment might be too verbose.  What matters is the fact we don&apos;t delete the cloned elements or the original elements, not the fact we call appendBlockPlaceholder and setEndingSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420874</commentid>
    <comment_count>10</comment_count>
      <attachid>97197</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 17:18:29 -0700</bug_when>
    <thetext>Comment on attachment 97197
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=97197&amp;action=review

&gt; LayoutTests/editing/inserting/return-key-span-start-expected.txt:7
&gt; +| &lt;span&gt;
&gt; +|   id=&quot;dupe&quot;
&gt; +|   &lt;div&gt;
&gt; +|     &lt;span&gt;
&gt; +|       &lt;br&gt;

Wow!  Why are we nesting div inside span?  Can we fix this?

&gt; Source/WebCore/editing/InsertParagraphSeparatorCommand.cpp:140
&gt; +        // It should always be okay to delete the id of cloned elements, because the codepaths that call this method
&gt; +        // only call appendBlockPlaceholder and setEndingSelection afterward, which never delete the original node.

I&apos;m sad that there&apos;s no way to assert this.  Also this comment might be too verbose.  What matters is the fact we don&apos;t delete the cloned elements or the original elements, not the fact we call appendBlockPlaceholder and setEndingSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420905</commentid>
    <comment_count>11</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 17:56:46 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 97197 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=97197&amp;action=review
&gt; 
&gt; &gt; LayoutTests/editing/inserting/return-key-span-start-expected.txt:7
&gt; &gt; +| &lt;span&gt;
&gt; &gt; +|   id=&quot;dupe&quot;
&gt; &gt; +|   &lt;div&gt;
&gt; &gt; +|     &lt;span&gt;
&gt; &gt; +|       &lt;br&gt;
&gt; 
&gt; Wow!  Why are we nesting div inside span?  Can we fix this?

This is the current behavior, and my change hasn&apos;t affected it. If you look at InsertParagraphSeparatorCommand::doApply(), we have started with the following tree:

&lt;div contenteditable&gt;
  &lt;span&gt;
    hello

startBlock gets set to the contenteditable div. The code falls into the &quot;// Handle case when position is in the first visible position in its block..&quot; block that starts on line 250 of my patch. That code looks for a refNode to insert the new div before:

        if (isFirstInBlock &amp;&amp; !nestNewBlock)
            refNode = startBlock;
        else if (insertionPosition.deprecatedNode() == startBlock &amp;&amp; nestNewBlock) {
            refNode = startBlock-&gt;childNode(insertionPosition.deprecatedEditingOffset());
            ASSERT(refNode); // must be true or we&apos;d be in the end of block case
        } else
            refNode = insertionPosition.deprecatedNode();

nestNewBlock is true and the insertion position is at the start of the text node (not the startBlock), so it falls through to the &quot;refNode = insertionPosition.deprecatedNode();&quot; line. So the div gets inserted right before the &quot;hello&quot; text, as a child of the span.

We know that if we&apos;ve fallen into this code path, and isFirstInBlock and nestNewBlock are true, that the insertion position is in the first visible position in the block. So I think we want to modify the code in that case to always insert the new div as this first child of startBlock. Does that sound right? In this case, we&apos;d end up with:

&lt;div contenteditable&gt;
  &lt;div&gt;
    &lt;span&gt;
      &lt;br&gt;
  &lt;span&gt;
    hello

It seems like something that should be done in a separate patch. I know my layout test result looks strange, but other than that it doesn&apos;t seem to have much to do with this patch. So does that fix need to block this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420906</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 17:59:52 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; (In reply to comment #10)
&gt; This is the current behavior, and my change hasn&apos;t affected it. If you look at InsertParagraphSeparatorCommand::doApply(), we have started with the following tree:

Oh sure, I didn&apos;t meant that your patch broke it.

&gt; startBlock gets set to the contenteditable div. The code falls into the &quot;// Handle case when position is in the first visible position in its block..&quot; block that starts on line 250 of my patch. That code looks for a refNode to insert the new div before:
&gt; 
&gt;         if (isFirstInBlock &amp;&amp; !nestNewBlock)
&gt;             refNode = startBlock;
&gt;         else if (insertionPosition.deprecatedNode() == startBlock &amp;&amp; nestNewBlock) {
&gt;             refNode = startBlock-&gt;childNode(insertionPosition.deprecatedEditingOffset());
&gt;             ASSERT(refNode); // must be true or we&apos;d be in the end of block case
&gt;         } else
&gt;             refNode = insertionPosition.deprecatedNode();
&gt; 
&gt; nestNewBlock is true and the insertion position is at the start of the text node (not the startBlock), so it falls through to the &quot;refNode = insertionPosition.deprecatedNode();&quot; line. So the div gets inserted right before the &quot;hello&quot; text, as a child of the span.
&gt; 
&gt; We know that if we&apos;ve fallen into this code path, and isFirstInBlock and nestNewBlock are true, that the insertion position is in the first visible position in the block. So I think we want to modify the code in that case to always insert the new div as this first child of startBlock. Does that sound right? In this case, we&apos;d end up with:

I see. There&apos;s a code in ReplaceSelectionCommand enrica recently added and I subsequently modified that deals with similar situation.  We may want to extract that up into CompositeEditCommand and share code if possible.

&gt; It seems like something that should be done in a separate patch. I know my layout test result looks strange, but other than that it doesn&apos;t seem to have much to do with this patch. So does that fix need to block this one?

Fixing it in a separate patch sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420907</commentid>
    <comment_count>13</comment_count>
      <attachid>97197</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 18:00:43 -0700</bug_when>
    <thetext>Comment on attachment 97197
Patch

I&apos;d say r+ although you may want to consider revising the comment in cloneHierarchyUnderNewBlock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420908</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 18:01:16 -0700</bug_when>
    <thetext>Let me know if you want to revise the comment or rather land the patch as is.  I&apos;m fine either way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420911</commentid>
    <comment_count>15</comment_count>
      <attachid>97208</attachid>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 18:03:25 -0700</bug_when>
    <thetext>Created attachment 97208
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420913</commentid>
    <comment_count>16</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-14 18:03:49 -0700</bug_when>
    <thetext>(In reply to comment #15)
&gt; Created an attachment (id=97208) [details]
&gt; Patch

Added a shorter comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420914</commentid>
    <comment_count>17</comment_count>
      <attachid>97208</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 18:04:29 -0700</bug_when>
    <thetext>Comment on attachment 97208
Patch

Thanks for revising the comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420915</commentid>
    <comment_count>18</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 18:06:39 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #15)
&gt; &gt; Created an attachment (id=97208) [details] [details]
&gt; &gt; Patch
&gt; 
&gt; Added a shorter comment.

By the way, I think you can do webkit-patch --no-obsolete --commit-queue to leave r+ on old patch intact and ask for cq+ on new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420945</commentid>
    <comment_count>19</comment_count>
      <attachid>97208</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 18:52:05 -0700</bug_when>
    <thetext>Comment on attachment 97208
Patch

Clearing flags on attachment: 97208

Committed r88890: &lt;http://trac.webkit.org/changeset/88890&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420946</commentid>
    <comment_count>20</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-14 18:52:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420992</commentid>
    <comment_count>21</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 20:46:22 -0700</bug_when>
    <thetext>Added the test to Mac WebKit2&apos;s skipped list in http://trac.webkit.org/changeset/88902
since TestRunner doesn&apos;t support eventSender.keyDown.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>420995</commentid>
    <comment_count>22</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-14 20:52:20 -0700</bug_when>
    <thetext>Ugh... I should have realized this during the review but you should have done document.execCommand(&apos;InsertParagraph&apos;, false, null) instead of eventSender.keyDown(&apos;\n&apos;).  Then this test would have worked on all ports.

Annie, could you post a patch to fix this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421380</commentid>
    <comment_count>23</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-06-15 09:42:59 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Ugh... I should have realized this during the review but you should have done document.execCommand(&apos;InsertParagraph&apos;, false, null) instead of eventSender.keyDown(&apos;\n&apos;).  Then this test would have worked on all ports.
&gt; 
&gt; Annie, could you post a patch to fix this?

Sure. I&apos;ll try to fix editing/inserting/return-key-in-hidden-field.html as well, which is what I used as an example. Thanks for skipping the test in the meantime!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>421404</commentid>
    <comment_count>24</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-15 10:06:37 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Sure. I&apos;ll try to fix editing/inserting/return-key-in-hidden-field.html as well, which is what I used as an example. Thanks for skipping the test in the meantime!

Great!  Thanks for the follow up.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97191</attachid>
            <date>2011-06-14 16:37:52 -0700</date>
            <delta_ts>2011-06-14 17:05:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62621-20110614163751.patch</filename>
            <type>text/plain</type>
            <size>4068</size>
            <attacher name="Annie Sullivan">sullivan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg4NjYKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyYjgwMzY2MDMxYTg5MzFkOWZkY2Yy
Mzk2NzljOTNjMjg5OGJiMDNkLi5hMzEzMzA1ZjI5NTY1Y2JkNWIwOTNkMjg1NmE1YjRiNDJmMWYw
OWU5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTEtMDYtMTQgIEFubmllIFN1bGxpdmFuICA8
c3VsbGl2YW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwYW4gSUQgZHVwbGljYXRlZCB3aGVuIHByZXNzaW5nIGVudGVyIGF0
IGJlZ2lubmluZyBvZiBzcGFuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjYyMQorCisgICAgICAgIEFkZGVkIHRlc3QgZm9yIHNwYW4gaWQgbm90IGdl
dHRpbmcgZHVwbGljYXRlZCB3aGVuIHNwYW4gaXMgY2xvbmVkLgorCisgICAgICAgICogZWRpdGlu
Zy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0Lmh0bWw6IEFk
ZGVkLgorCiAyMDExLTA2LTE0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUdXJucyBvdXQsIGluc3BlY3Rvci9jb29raWUtcGFy
c2VyLmh0bWwgY2FuIHRpbWVvdXQgb3V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjdmYmEwNjJkZTg3YWUwYTM1OWUxY2FjODE5YzQ3NTNjN2IxNzZjMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXkt
c3Bhbi1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitUaGlzIHNldHMgdGhlIHNl
bGVjdGlvbiB0byB0aGUgc3RhcnQgb2YgYSBzcGFuLCBhbmQgaGl0cyB0aGUgZW50ZXIga2V5Lgor
RXhwZWN0ZWQgYmVoYXZpb3I6IHdoZW4gdGhlIHNwYW4gaXMgc3BsaXQsIGl0cyBJRCBzaG91bGQg
bm90IGJlIGR1cGxpY2F0ZWQuIFNlZSBidWcgNjI2MjEuCit8IDxzcGFuPgorfCAgIGlkPSJkdXBl
IgorfCAgIDxkaXY+Cit8ICAgICA8c3Bhbj4KK3wgICAgICAgPGJyPgorfCAgICI8I3NlbGVjdGlv
bi1jYXJldD5oZWxsbyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5n
L3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRp
bmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNkYTA4MWNhMTA5NTgy
NjBlMDQzNTY4OTQwODU5NWNhZDU4MzM2YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sCkBAIC0wLDAgKzEs
MTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgY29udGVudGVkaXRh
YmxlIGlkPSJyb290Ij48c3BhbiBpZD0iZHVwZSI+aGVsbG88L3NwYW4+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Cit2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworc2VsLnNldFBvc2l0aW9uKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdXBlIiksIDApOworZXZlbnRTZW5kZXIua2V5RG93bigi
XG4iKTsKK01hcmt1cC5kZXNjcmlwdGlvbigiVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gdG8gdGhl
IHN0YXJ0IG9mIGEgc3BhbiwgYW5kIGhpdHMgdGhlIGVudGVyIGtleS5cbiIKKyAgICArICJFeHBl
Y3RlZCBiZWhhdmlvcjogd2hlbiB0aGUgc3BhbiBpcyBzcGxpdCwgaXRzIElEIHNob3VsZCBub3Qg
YmUgZHVwbGljYXRlZC4gU2VlIGJ1ZyA2MjYyMS4iKTsKK01hcmt1cC5kdW1wKHJvb3QpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWNlNzJiYzE2MDg2MzAzOTJj
MDA3Y2UxNTM0NWJkYWY0MjhhYWRlNC4uN2UyOGM5MDlmOTU4Mzc2ZjQ3OTlhMDI0NTI1ZTIwZDVh
ZGE4OTIxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA2LTE0ICBBbm5pZSBT
dWxsaXZhbiAgPHN1bGxpdmFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTcGFuIElEIGR1cGxpY2F0ZWQgd2hlbiBwcmVzc2lu
ZyBlbnRlciBhdCBiZWdpbm5pbmcgb2Ygc3BhbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjI2MjEKKworICAgICAgICBTdHJpcCBpZCBmcm9tIGNsb25l
ZCBzcGFuLCBzbyB0aGF0IGl0IGlzIG5vdCBkdXBsaWNhdGVkLgorCisgICAgICAgIFRlc3Q6IGVk
aXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sCisKKyAgICAgICAgKiBl
ZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZDo6Y2xvbmVIaWVyYXJjaHlVbmRl
ck5ld0Jsb2NrKToKKwogMjAxMS0wNi0xNCAgSmVmZnJleSBQZmF1ICA8anBmYXVAYXBwbGUuY29t
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIEh5YXR0LgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAK
aW5kZXggODM4NGYzMDY5MDY0NGI0OTA0NzU5NjJmNzNhYzVhMjRhZjZhMzFlOS4uZjg2MDk4NmRj
MDA1YWIyMTI5NTUxZGRhMDg2NGQwNzBlZjIxM2FmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCkBA
IC0xMzYsNiArMTM2LDEwIEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gSW5zZXJ0UGFyYWdyYXBoU2Vw
YXJhdG9yQ29tbWFuZDo6Y2xvbmVIaWVyYXJjaHlVbmRlck5ld0Jsb2NrCiAgICAgUmVmUHRyPEVs
ZW1lbnQ+IHBhcmVudCA9IGJsb2NrVG9JbnNlcnQ7CiAgICAgZm9yIChzaXplX3QgaSA9IGFuY2Vz
dG9ycy5zaXplKCk7IGkgIT0gMDsgLS1pKSB7CiAgICAgICAgIFJlZlB0cjxFbGVtZW50PiBjaGls
ZCA9IGFuY2VzdG9yc1tpIC0gMV0tPmNsb25lRWxlbWVudFdpdGhvdXRDaGlsZHJlbigpOworICAg
ICAgICAvLyBEZWxldGUgaWQgYXR0cmlidXRlIGZyb20gdGhlIGNsb25lZCBjaGlsZCBlbGVtZW50
IGJlY2F1c2UgdGhlIHNhbWUgaWQgY2Fubm90IGJlIHVzZWQgZm9yIG1vcmUgdGhhbiBvbmUgZWxl
bWVudAorICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgY2hpbGQtPnJlbW92
ZUF0dHJpYnV0ZShIVE1MTmFtZXM6OmlkQXR0ciwgZWMpOworICAgICAgICBBU1NFUlQoIWVjKTsK
ICAgICAgICAgYXBwZW5kTm9kZShjaGlsZCwgcGFyZW50KTsKICAgICAgICAgcGFyZW50ID0gY2hp
bGQucmVsZWFzZSgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97197</attachid>
            <date>2011-06-14 17:05:31 -0700</date>
            <delta_ts>2011-06-14 18:03:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62621-20110614170530.patch</filename>
            <type>text/plain</type>
            <size>4201</size>
            <attacher name="Annie Sullivan">sullivan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg4NzMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyYjgwMzY2MDMxYTg5MzFkOWZkY2Yy
Mzk2NzljOTNjMjg5OGJiMDNkLi44MGVlZGZiNGI3MTkwZmQ4NjQ0MzRiOWZhZjg4OTQ3MzRhZjMw
MTdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTQgIEFubmllIFN1bGxpdmFuICA8
c3VsbGl2YW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwYW4gSUQgZHVwbGljYXRlZCB3aGVuIHByZXNzaW5nIGVudGVyIGF0
IGJlZ2lubmluZyBvZiBzcGFuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjYyMQorCisgICAgICAgIEFkZGVkIHRlc3QgZm9yIHNwYW4gaWQgbm90IGdl
dHRpbmcgZHVwbGljYXRlZCB3aGVuIHNwYW4gaXMgY2xvbmVkLgorCisgICAgICAgICogZWRpdGlu
Zy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0Lmh0bWw6IEFk
ZGVkLgorCiAyMDExLTA2LTE0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUdXJucyBvdXQsIGluc3BlY3Rvci9jb29raWUtcGFy
c2VyLmh0bWwgY2FuIHRpbWVvdXQgb3V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjdmYmEwNjJkZTg3YWUwYTM1OWUxY2FjODE5YzQ3NTNjN2IxNzZjMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXkt
c3Bhbi1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitUaGlzIHNldHMgdGhlIHNl
bGVjdGlvbiB0byB0aGUgc3RhcnQgb2YgYSBzcGFuLCBhbmQgaGl0cyB0aGUgZW50ZXIga2V5Lgor
RXhwZWN0ZWQgYmVoYXZpb3I6IHdoZW4gdGhlIHNwYW4gaXMgc3BsaXQsIGl0cyBJRCBzaG91bGQg
bm90IGJlIGR1cGxpY2F0ZWQuIFNlZSBidWcgNjI2MjEuCit8IDxzcGFuPgorfCAgIGlkPSJkdXBl
IgorfCAgIDxkaXY+Cit8ICAgICA8c3Bhbj4KK3wgICAgICAgPGJyPgorfCAgICI8I3NlbGVjdGlv
bi1jYXJldD5oZWxsbyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5n
L3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRp
bmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNkYTA4MWNhMTA5NTgy
NjBlMDQzNTY4OTQwODU5NWNhZDU4MzM2YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sCkBAIC0wLDAgKzEs
MTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgY29udGVudGVkaXRh
YmxlIGlkPSJyb290Ij48c3BhbiBpZD0iZHVwZSI+aGVsbG88L3NwYW4+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Cit2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworc2VsLnNldFBvc2l0aW9uKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdXBlIiksIDApOworZXZlbnRTZW5kZXIua2V5RG93bigi
XG4iKTsKK01hcmt1cC5kZXNjcmlwdGlvbigiVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gdG8gdGhl
IHN0YXJ0IG9mIGEgc3BhbiwgYW5kIGhpdHMgdGhlIGVudGVyIGtleS5cbiIKKyAgICArICJFeHBl
Y3RlZCBiZWhhdmlvcjogd2hlbiB0aGUgc3BhbiBpcyBzcGxpdCwgaXRzIElEIHNob3VsZCBub3Qg
YmUgZHVwbGljYXRlZC4gU2VlIGJ1ZyA2MjYyMS4iKTsKK01hcmt1cC5kdW1wKHJvb3QpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDU3NjNmMmI5NTI5MjViZmQ0
MGU5ZjFmNWFmMzMwN2I1ZDZmZGMwYy4uN2MwZWE5ZjMzMTg4NGViZDU0ZDE0OWE3YjliMTI5MDk3
OTJkMGE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA2LTE0ICBBbm5pZSBT
dWxsaXZhbiAgPHN1bGxpdmFuQGNocm9taXVtLm9yZz4KKyAgICAgICAgCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwYW4gSUQgZHVwbGljYXRlZCB3aGVu
IHByZXNzaW5nIGVudGVyIGF0IGJlZ2lubmluZyBvZiBzcGFuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMQorCisgICAgICAgIFN0cmlwIGlkIGZy
b20gY2xvbmVkIHNwYW4sIHNvIHRoYXQgaXQgaXMgbm90IGR1cGxpY2F0ZWQuCisgICAgICAgIAor
ICAgICAgICBUZXN0OiBlZGl0aW5nL2luc2VydGluZy9yZXR1cm4ta2V5LXNwYW4tc3RhcnQuaHRt
bAorICAgICAgICAKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6Y2xvbmVIaWVyYXJjaHlVbmRlck5ld0Jsb2NrKToKKwogMjAxMS0wNi0xNCAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb3Nl
cGggUGVjb3Jhcm8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCA4Mzg0ZjMwNjkwNjQ0YjQ5MDQ3
NTk2MmY3M2FjNWEyNGFmNmEzMWU5Li5iODBjZTljN2MyMzIwNWQxMWJkMzhiYzEyZGMzNjNlOTlk
MjY4NTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFw
aFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTEzNiw2ICsxMzYsMTEgQEAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjbG9uZUhpZXJh
cmNoeVVuZGVyTmV3QmxvY2sKICAgICBSZWZQdHI8RWxlbWVudD4gcGFyZW50ID0gYmxvY2tUb0lu
c2VydDsKICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaSAhPSAwOyAtLWkp
IHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGNoaWxkID0gYW5jZXN0b3JzW2kgLSAxXS0+Y2xv
bmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgICAgIC8vIEl0IHNob3VsZCBhbHdheXMg
YmUgb2theSB0byBkZWxldGUgdGhlIGlkIG9mIGNsb25lZCBlbGVtZW50cywgYmVjYXVzZSB0aGUg
Y29kZXBhdGhzIHRoYXQgY2FsbCB0aGlzIG1ldGhvZAorICAgICAgICAvLyBvbmx5IGNhbGwgYXBw
ZW5kQmxvY2tQbGFjZWhvbGRlciBhbmQgc2V0RW5kaW5nU2VsZWN0aW9uIGFmdGVyd2FyZCwgd2hp
Y2ggbmV2ZXIgZGVsZXRlIHRoZSBvcmlnaW5hbCBub2RlLgorICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgY2hpbGQtPnJlbW92ZUF0dHJpYnV0ZShpZEF0dHIsIGVjKTsKKyAg
ICAgICAgQVNTRVJUKCFlYyk7CiAgICAgICAgIGFwcGVuZE5vZGUoY2hpbGQsIHBhcmVudCk7CiAg
ICAgICAgIHBhcmVudCA9IGNoaWxkLnJlbGVhc2UoKTsKICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>97208</attachid>
            <date>2011-06-14 18:03:25 -0700</date>
            <delta_ts>2011-06-14 18:52:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62621-20110614180324.patch</filename>
            <type>text/plain</type>
            <size>4079</size>
            <attacher name="Annie Sullivan">sullivan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODg4NzMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCAyYjgwMzY2MDMxYTg5MzFkOWZkY2Yy
Mzk2NzljOTNjMjg5OGJiMDNkLi44MGVlZGZiNGI3MTkwZmQ4NjQ0MzRiOWZhZjg4OTQ3MzRhZjMw
MTdiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDYtMTQgIEFubmllIFN1bGxpdmFuICA8
c3VsbGl2YW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFNwYW4gSUQgZHVwbGljYXRlZCB3aGVuIHByZXNzaW5nIGVudGVyIGF0
IGJlZ2lubmluZyBvZiBzcGFuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02MjYyMQorCisgICAgICAgIEFkZGVkIHRlc3QgZm9yIHNwYW4gaWQgbm90IGdl
dHRpbmcgZHVwbGljYXRlZCB3aGVuIHNwYW4gaXMgY2xvbmVkLgorCisgICAgICAgICogZWRpdGlu
Zy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0LWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0Lmh0bWw6IEFk
ZGVkLgorCiAyMDExLTA2LTE0ICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBUdXJucyBvdXQsIGluc3BlY3Rvci9jb29raWUtcGFy
c2VyLmh0bWwgY2FuIHRpbWVvdXQgb3V0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGlu
Zy9pbnNlcnRpbmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0LWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjdmYmEwNjJkZTg3YWUwYTM1OWUxY2FjODE5YzQ3NTNjN2IxNzZjMQotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXkt
c3Bhbi1zdGFydC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw4IEBACitUaGlzIHNldHMgdGhlIHNl
bGVjdGlvbiB0byB0aGUgc3RhcnQgb2YgYSBzcGFuLCBhbmQgaGl0cyB0aGUgZW50ZXIga2V5Lgor
RXhwZWN0ZWQgYmVoYXZpb3I6IHdoZW4gdGhlIHNwYW4gaXMgc3BsaXQsIGl0cyBJRCBzaG91bGQg
bm90IGJlIGR1cGxpY2F0ZWQuIFNlZSBidWcgNjI2MjEuCit8IDxzcGFuPgorfCAgIGlkPSJkdXBl
IgorfCAgIDxkaXY+Cit8ICAgICA8c3Bhbj4KK3wgICAgICAgPGJyPgorfCAgICI8I3NlbGVjdGlv
bi1jYXJldD5oZWxsbyIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5n
L3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRp
bmcvcmV0dXJuLWtleS1zcGFuLXN0YXJ0Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTNkYTA4MWNhMTA5NTgy
NjBlMDQzNTY4OTQwODU5NWNhZDU4MzM2YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL3JldHVybi1rZXktc3Bhbi1zdGFydC5odG1sCkBAIC0wLDAgKzEs
MTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8Ym9keT4KKzxkaXYgY29udGVudGVkaXRh
YmxlIGlkPSJyb290Ij48c3BhbiBpZD0iZHVwZSI+aGVsbG88L3NwYW4+PC9kaXY+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2R1bXAtYXMtbWFya3VwLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQ+Cit2YXIgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOworc2VsLnNldFBvc2l0aW9uKGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJkdXBlIiksIDApOworZXZlbnRTZW5kZXIua2V5RG93bigi
XG4iKTsKK01hcmt1cC5kZXNjcmlwdGlvbigiVGhpcyBzZXRzIHRoZSBzZWxlY3Rpb24gdG8gdGhl
IHN0YXJ0IG9mIGEgc3BhbiwgYW5kIGhpdHMgdGhlIGVudGVyIGtleS5cbiIKKyAgICArICJFeHBl
Y3RlZCBiZWhhdmlvcjogd2hlbiB0aGUgc3BhbiBpcyBzcGxpdCwgaXRzIElEIHNob3VsZCBub3Qg
YmUgZHVwbGljYXRlZC4gU2VlIGJ1ZyA2MjYyMS4iKTsKK01hcmt1cC5kdW1wKHJvb3QpOworPC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDU3NjNmMmI5NTI5MjViZmQ0
MGU5ZjFmNWFmMzMwN2I1ZDZmZGMwYy4uN2MwZWE5ZjMzMTg4NGViZDU0ZDE0OWE3YjliMTI5MDk3
OTJkMGE0NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDExLTA2LTE0ICBBbm5pZSBT
dWxsaXZhbiAgPHN1bGxpdmFuQGNocm9taXVtLm9yZz4KKyAgICAgICAgCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNwYW4gSUQgZHVwbGljYXRlZCB3aGVu
IHByZXNzaW5nIGVudGVyIGF0IGJlZ2lubmluZyBvZiBzcGFuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MjYyMQorCisgICAgICAgIFN0cmlwIGlkIGZy
b20gY2xvbmVkIHNwYW4sIHNvIHRoYXQgaXQgaXMgbm90IGR1cGxpY2F0ZWQuCisgICAgICAgIAor
ICAgICAgICBUZXN0OiBlZGl0aW5nL2luc2VydGluZy9yZXR1cm4ta2V5LXNwYW4tc3RhcnQuaHRt
bAorICAgICAgICAKKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29t
bWFuZDo6Y2xvbmVIaWVyYXJjaHlVbmRlck5ld0Jsb2NrKToKKwogMjAxMS0wNi0xNCAgTWljaGFl
bCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBKb3Nl
cGggUGVjb3Jhcm8uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBh
cmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9JbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAppbmRleCA4Mzg0ZjMwNjkwNjQ0YjQ5MDQ3
NTk2MmY3M2FjNWEyNGFmNmEzMWU5Li5hM2I3NzYxYmZkZDgyY2NlNjAyMTY4NDk5NTUzZjJiNTYy
MmE0YjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFw
aFNlcGFyYXRvckNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKQEAgLTEzNiw2ICsxMzYsMTAgQEAgUGFzc1Jl
ZlB0cjxFbGVtZW50PiBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpjbG9uZUhpZXJh
cmNoeVVuZGVyTmV3QmxvY2sKICAgICBSZWZQdHI8RWxlbWVudD4gcGFyZW50ID0gYmxvY2tUb0lu
c2VydDsKICAgICBmb3IgKHNpemVfdCBpID0gYW5jZXN0b3JzLnNpemUoKTsgaSAhPSAwOyAtLWkp
IHsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IGNoaWxkID0gYW5jZXN0b3JzW2kgLSAxXS0+Y2xv
bmVFbGVtZW50V2l0aG91dENoaWxkcmVuKCk7CisgICAgICAgIC8vIEl0IHNob3VsZCBhbHdheXMg
YmUgb2theSB0byByZW1vdmUgaWQgZnJvbSB0aGUgY2xvbmVkIGVsZW1lbnRzLCBzaW5jZSB0aGUg
b3JpZ2luYWxzIGFyZSBub3QgZGVsZXRlZC4KKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgIGNoaWxkLT5yZW1vdmVBdHRyaWJ1dGUoaWRBdHRyLCBlYyk7CisgICAgICAgIEFT
U0VSVCghZWMpOwogICAgICAgICBhcHBlbmROb2RlKGNoaWxkLCBwYXJlbnQpOwogICAgICAgICBw
YXJlbnQgPSBjaGlsZC5yZWxlYXNlKCk7CiAgICAgfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>