<?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>71771</bug_id>
          
          <creation_ts>2011-11-07 23:27:23 -0800</creation_ts>
          <short_desc>Inserting empty html moves caret</short_desc>
          <delta_ts>2012-04-19 23:19:08 -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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>antaryami.pandia</cc>
    
    <cc>enrica</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>497773</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-11-07 23:27:23 -0800</bug_when>
    <thetext>Reduction:
&lt;button id=&quot;button&quot;&gt;Click on the text below, place your cursor somewhere in the middle of the text and press me&lt;/button&gt;&lt;div id=&quot;content&quot;&gt;testtesttesttesttesttesttesttest&lt;/div&gt;
&lt;script&gt;
    document.getElementById(&quot;content&quot;).contentEditable = true;
    document.getElementById(&quot;button&quot;).onclick = function(){
        document.execCommand(&apos;InsertHTML&apos;, false, &quot;&quot;);
    };
&lt;/script&gt;

http://crbug.com/97999</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598053</commentid>
    <comment_count>1</comment_count>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-04-08 12:36:11 -0700</bug_when>
    <thetext>To find the issue I tried to compare the scenerios when we add a and non-empty string and when add an empty string.Below is my analysis:- 

Case 1. Insert a non-empty string
When we add a non-empty string the method &quot;createFragmentFromMarkup&quot; creates a fragments with child having the value of the string to be inserted.And then &quot;executeInsertFragment&quot; method is called. This method in turns calls the &quot;ReplaceSelectionCommand::performTrivialReplace&quot; method, which actually insert the string directly into the text node. Then it calculates the caret rect accordingly. If I have placed the cursor in 16th pos and clicked the button then it adds the string and calculates the width till 17th character and places the caret. Point to note is that while calculating the caret position the start position of the text node (to which the string is inserted) is considered. So if the start pos is (0,0) then the caret position should be (0+width of 17 characters, 0).

Case 2. Insert empty string 
When we add a empty string the method &quot;createFragmentFromMarkup&quot; creates a fragments with the child being set to false. In &quot;ReplaceSelectionCommand::performTrivialReplace&quot; there is a check for child of the fragments. Since the child is not there it return false. And the flow progress to call the &quot;CompositeEditCommand::splitTextNode&quot; method, which goes on and creates another rendertext with 16 characters(I have placed the cursor in 16th position and click on the button).

Because of this new text run, while calculating rect for the caret rather then considering the start position as the start of the text node (to which the empty string is inserted), it takes the end position of this new text run as the start position. say if the width of 16 charactes is 80px then, it takes the start pos as (80, 0). Hence it cacluates the caret position as (80 + width of 16 characters, 0) or (160, 0) which should be actually (80, 0).

Hence the caret is drawn on the wrong position.

I think the &quot;DocumentFragment&quot; plays a role  in deciding the flow of inserting a empty/non-empty string. So can we have a check for the child of documentfragment before proceeding with the &quot;InsertHTML&quot; command, say in &quot;executeInsertFragment&quot; method.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598545</commentid>
    <comment_count>2</comment_count>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-04-09 13:02:03 -0700</bug_when>
    <thetext>Got disconnected while discussing with rniwa on IRC. So puting some queries here.

When I insert a character no new rendertext is created, it simply inserted into the existing text.But when I click on the middle of the text run (say 16th pos) and insert the empty string by clicking on the button, a new text run of 16 characters is created. Is this expected?

This new rendertext is craeted by a call to &quot;splitTextNode&quot; method. The &quot;splitTextNode&quot; method is called because the &quot;performTrivialReplace&quot; return false when we add an empty string. We do have a check for fragment.firstChild(), but I think the call to &quot;splitTextNode&quot; changes the behavior.

There is a code to check firstChild in &quot;performTrivialReplace&quot;:-
    if (!fragment.firstChild() || fragment.firstChild() != fragment.lastChild() || !fragment.firstChild()-&gt;isTextNode())
        return false;

Is there any other case when the firstchild be null other then the case when inserting empty string?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>598555</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-09 13:18:26 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; There is a code to check firstChild in &quot;performTrivialReplace&quot;:-
&gt;     if (!fragment.firstChild() || fragment.firstChild() != fragment.lastChild() || !fragment.firstChild()-&gt;isTextNode())
&gt;         return false;
&gt; 
&gt; Is there any other case when the firstchild be null other then the case when inserting empty string?

Maybe when the inserted text wasn&apos;t empty but some event listener modified the text to be inserted? e.g. &lt;input maxlength=0&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>602917</commentid>
    <comment_count>4</comment_count>
      <attachid>137281</attachid>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-04-15 23:31:13 -0700</bug_when>
    <thetext>Created attachment 137281
Patch for discussion.

As I have mentioned earlier, when we try to insert an empty string, the method &quot;ReplaceSelectionCommand::performTrivialReplace&quot; return false. And the flow progress to call the &quot;CompositeEditCommand::splitTextNode&quot; method. This method the calls &quot;SplitTextNodeCommand::doApply&quot; to perform next step. It is in this method that the DOm tree is modified.

In &quot;SplitTextNodeCommand::doApply&quot; first a substring is created till the current caret position. Means if the caret was at posion 16 when I click the button to insert empty string, then a substring is created with first 16 characters. Code snippet:-
    String prefixText = m_text2-&gt;substringData(0, m_offset, ec); 

After that a text node is craeted with that substring. Code snippet:-
    m_text1 = Text::create(document(), prefixText);

After crating the text node, it calls the &quot;insertText1AndTrimText2&quot; method. This method inserts the new text node before the actual text node.
    m_text2-&gt;parentNode()-&gt;insertBefore(m_text1.get(), m_text2.get(), ec);

The call to &quot;splitTextNode&quot; was added in http://wkbug.com/65824. It replaces the call to &quot;splitTextNodeContainingElement&quot;, which was added in http://wkbug.com/56874.
And this block (in http://wkbug.com/56874 containing &quot;splitTextNodeContainingElement&quot;) was placed before the check for fragment.

As per my understanding if we place the cursor in the middle of a text node and try to insert some text between, then we split text node. But in this case we have nothing to insert i.e the string to be inserted is empty. So I think check for fragments should precedes the call to code block containing splitTextNode. I am attaching the code change for discussion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>605407</commentid>
    <comment_count>5</comment_count>
      <attachid>137853</attachid>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-04-18 23:46:30 -0700</bug_when>
    <thetext>Created attachment 137853
Patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606370</commentid>
    <comment_count>6</comment_count>
      <attachid>137853</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2012-04-19 22:46:24 -0700</bug_when>
    <thetext>Comment on attachment 137853
Patch.

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

&gt; LayoutTests/editing/inserting/insert-empty-html.html:6
&gt; +&lt;head&gt;
&gt; +&lt;script src=&quot;../../fast/js/resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
&gt; +&lt;/head&gt;
&gt; +

You don&apos;t need to have a head for this. You can just move js-test-pre.js to body.

&gt; LayoutTests/editing/inserting/insert-empty-html.html:19
&gt; +    var sel = window.getSelection();

Please don&apos;t use abbreviations like sel.

&gt; LayoutTests/editing/inserting/insert-empty-html.html:23
&gt; +    // Set the caret position

This comment repeats the code. Please remove.

&gt; LayoutTests/editing/inserting/insert-empty-html.html:26
&gt; +    // Insert the empty html

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606377</commentid>
    <comment_count>7</comment_count>
      <attachid>138045</attachid>
    <who name="Antaryami Pandia (apandia)">antaryami.pandia</who>
    <bug_when>2012-04-19 23:01:35 -0700</bug_when>
    <thetext>Created attachment 138045
Updated patch.

Patch with review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606383</commentid>
    <comment_count>8</comment_count>
      <attachid>138045</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-19 23:19:03 -0700</bug_when>
    <thetext>Comment on attachment 138045
Updated patch.

Clearing flags on attachment: 138045

Committed r114718: &lt;http://trac.webkit.org/changeset/114718&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>606384</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-04-19 23:19:08 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137281</attachid>
            <date>2012-04-15 23:31:13 -0700</date>
            <delta_ts>2012-04-15 23:31:13 -0700</delta_ts>
            <desc>Patch for discussion.</desc>
            <filename>71771.diff</filename>
            <type>text/plain</type>
            <size>1339</size>
            <attacher name="Antaryami Pandia (apandia)">antaryami.pandia</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCShyZXZpc2lvbiAxMTM1NjEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
cGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTE3LDYgKzkxNywx
MCBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KCkKIAogICAgIGJvb2wg
aGFuZGxlZFN0eWxlU3BhbnMgPSBoYW5kbGVTdHlsZVNwYW5zQmVmb3JlSW5zZXJ0aW9uKGZyYWdt
ZW50LCBpbnNlcnRpb25Qb3MpOwogCisgICAgLy8gV2UncmUgZmluaXNoZWQgaWYgdGhlcmUgaXMg
bm90aGluZyB0byBhZGQuCisgICAgaWYgKGZyYWdtZW50LmlzRW1wdHkoKSB8fCAhZnJhZ21lbnQu
Zmlyc3RDaGlsZCgpKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBJZiB3ZSBhcmUgbm90IHRy
eWluZyB0byBtYXRjaCB0aGUgZGVzdGluYXRpb24gc3R5bGUgd2UgcHJlZmVyIGEgcG9zaXRpb24K
ICAgICAvLyB0aGF0IGlzIG91dHNpZGUgaW5saW5lIGVsZW1lbnRzIHRoYXQgcHJvdmlkZSBzdHls
ZS4KICAgICAvLyBUaGlzIHdheSB3ZSBjYW4gcHJvZHVjZSBhIGxlc3MgdmVyYm9zZSBtYXJrdXAu
CkBAIC05NDAsMTAgKzk0NCw2IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBw
bHkoKQogICAgIC8vIEZJWE1FOiBXaGVuIHBhc3RpbmcgcmljaCBjb250ZW50IHdlJ3JlIG9mdGVu
IHByZXZlbnRlZCBmcm9tIGhlYWRpbmcgZG93biB0aGUgZmFzdCBwYXRoIGJ5IHN0eWxlIHNwYW5z
LiAgVHJ5CiAgICAgLy8gYWdhaW4gaGVyZSBpZiB0aGV5J3ZlIGJlZW4gcmVtb3ZlZC4KICAgICAK
LSAgICAvLyBXZSdyZSBmaW5pc2hlZCBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZC4KLSAgICBp
ZiAoZnJhZ21lbnQuaXNFbXB0eSgpIHx8ICFmcmFnbWVudC5maXJzdENoaWxkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKICAgICAvLyAxKSBJbnNlcnQgdGhlIGNvbnRlbnQuCiAgICAgLy8gMikg
UmVtb3ZlIHJlZHVuZGFudCBzdHlsZXMgYW5kIHN0eWxlIHRhZ3MsIHRoaXMgaW5uZXIgPGI+IGZv
ciBleGFtcGxlOiA8Yj5mb28gPGI+YmFyPC9iPiBiYXo8L2I+LgogICAgIC8vIDMpIE1lcmdlIHRo
ZSBzdGFydCBvZiB0aGUgYWRkZWQgY29udGVudCB3aXRoIHRoZSBjb250ZW50IGJlZm9yZSB0aGUg
cG9zaXRpb24gYmVpbmcgcGFzdGVkIGludG8uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>137853</attachid>
            <date>2012-04-18 23:46:30 -0700</date>
            <delta_ts>2012-04-19 23:01:35 -0700</delta_ts>
            <desc>Patch.</desc>
            <filename>71771.diff</filename>
            <type>text/plain</type>
            <size>4904</size>
            <attacher name="Antaryami Pandia (apandia)">antaryami.pandia</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDYxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTE4ICBBbnRhcnlh
bWkgUGFuZGlhICA8YW50YXJ5YW1pLnBhbmRpYUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgSW5z
ZXJ0aW5nIGVtcHR5IGh0bWwgbW92ZXMgY2FyZXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTc3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgcGxhY2UgdGhlIGN1cnNvciBpbiB0aGUgbWlk
ZGxlIG9mIGEgdGV4dCBub2RlIGFuZCB0cnkgdG8gaW5zZXJ0IHNvbWUgdGV4dAorICAgICAgICBi
ZXR3ZWVuLCB0aGVuIHdlIHNwbGl0IHRleHQgbm9kZS4gQnV0IGluIHRoaXMgY2FzZSB3ZSBoYXZl
IG5vdGhpbmcgdG8gaW5zZXJ0IHNpbmNlCisgICAgICAgIHRoZSBzdHJpbmcgdG8gYmUgaW5zZXJ0
ZWQgaXMgZW1wdHkuIFNvIHRoZSBjaGVjayBmb3IgZnJhZ21lbnRzIHNob3VsZCBwcmVjZWRlcyB0
aGUKKyAgICAgICAgY2FsbCB0byBjb2RlIGJsb2NrIGNvbnRhaW5pbmcgc3BsaXRUZXh0Tm9kZS4K
KworICAgICAgICBUZXN0OiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtZW1wdHktaHRtbC5odG1s
CisKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKwogMjAxMi0w
NC0xOCAgRW1pbCBBIEVrbHVuZCAgPGVhZUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVtb3Zl
IHVubmVjZXNzYXJ5IHJvdW5kaW5nL2NvbnZlcnNpb25zIGluIFJlbmRlckJveE1vZGVsT2JqZWN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmNwcAkocmV2aXNpb24gMTE0NjA4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkxOCw2ICs5MTgs
MTAgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6ZG9BcHBseSgpCiAKICAgICBib29s
IGhhbmRsZWRTdHlsZVNwYW5zID0gaGFuZGxlU3R5bGVTcGFuc0JlZm9yZUluc2VydGlvbihmcmFn
bWVudCwgaW5zZXJ0aW9uUG9zKTsKIAorICAgIC8vIFdlJ3JlIGZpbmlzaGVkIGlmIHRoZXJlIGlz
IG5vdGhpbmcgdG8gYWRkLgorICAgIGlmIChmcmFnbWVudC5pc0VtcHR5KCkgfHwgIWZyYWdtZW50
LmZpcnN0Q2hpbGQoKSkKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gSWYgd2UgYXJlIG5vdCB0
cnlpbmcgdG8gbWF0Y2ggdGhlIGRlc3RpbmF0aW9uIHN0eWxlIHdlIHByZWZlciBhIHBvc2l0aW9u
CiAgICAgLy8gdGhhdCBpcyBvdXRzaWRlIGlubGluZSBlbGVtZW50cyB0aGF0IHByb3ZpZGUgc3R5
bGUuCiAgICAgLy8gVGhpcyB3YXkgd2UgY2FuIHByb2R1Y2UgYSBsZXNzIHZlcmJvc2UgbWFya3Vw
LgpAQCAtOTQwLDExICs5NDQsNyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0Fw
cGx5KCkKIAogICAgIC8vIEZJWE1FOiBXaGVuIHBhc3RpbmcgcmljaCBjb250ZW50IHdlJ3JlIG9m
dGVuIHByZXZlbnRlZCBmcm9tIGhlYWRpbmcgZG93biB0aGUgZmFzdCBwYXRoIGJ5IHN0eWxlIHNw
YW5zLiAgVHJ5CiAgICAgLy8gYWdhaW4gaGVyZSBpZiB0aGV5J3ZlIGJlZW4gcmVtb3ZlZC4KLSAg
ICAKLSAgICAvLyBXZSdyZSBmaW5pc2hlZCBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZC4KLSAg
ICBpZiAoZnJhZ21lbnQuaXNFbXB0eSgpIHx8ICFmcmFnbWVudC5maXJzdENoaWxkKCkpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKKwogICAgIC8vIDEpIEluc2VydCB0aGUgY29udGVudC4KICAgICAv
LyAyKSBSZW1vdmUgcmVkdW5kYW50IHN0eWxlcyBhbmQgc3R5bGUgdGFncywgdGhpcyBpbm5lciA8
Yj4gZm9yIGV4YW1wbGU6IDxiPmZvbyA8Yj5iYXI8L2I+IGJhejwvYj4uCiAgICAgLy8gMykgTWVy
Z2UgdGhlIHN0YXJ0IG9mIHRoZSBhZGRlZCBjb250ZW50IHdpdGggdGhlIGNvbnRlbnQgYmVmb3Jl
IHRoZSBwb3NpdGlvbiBiZWluZyBwYXN0ZWQgaW50by4KSW5kZXg6IExheW91dFRlc3RzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDYx
MikKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDEyLTA0LTE4ICBBbnRhcnlhbWkgUGFuZGlhICA8YW50YXJ5YW1pLnBhbmRpYUBtb3Rv
cm9sYS5jb20+CisKKyAgICAgICAgSW5zZXJ0aW5nIGVtcHR5IGh0bWwgbW92ZXMgY2FyZXQuCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTc3MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3QgaW5zZXJ0
aW5nIGVtcHR5IGh0bWwuCisKKyAgICAgICAgKiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtZW1w
dHktaHRtbC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvaW5zZXJ0aW5n
L2luc2VydC1lbXB0eS1odG1sLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA0LTE4ICBUYWthc2hpIFRv
eW9zaGltYSAgPHRveW9zaGltQGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmllZGVkLCBy
ZWJhc2VsaW5lIHN2Zy9hcy1pbWFnZS9pbWctcHJlc2VydmVBc3BlY3RSYXRpby1zdXBwb3J0LTEu
aHRtbApJbmRleDogTGF5b3V0VGVzdHMvZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWVtcHR5LWh0
bWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0
aW5nL2luc2VydC1lbXB0eS1odG1sLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1lbXB0eS1odG1sLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACitUaGlzIHRlc3QgZW5zdXJlcyBpbnNlcnRpbmcg
ZW1wdHkgc3RyaW5nIGRvZXMgbm90IG1vdmUgdGhlIGNhcmV0LgorCitUaGUgY2FyZXQgaXMgcGxh
Y2VkIGF0IDV0aCBwb3MgYW5kIHRoZSBlbXB0eSBodG1sIGlzIGFkZGVkLiBUaGUgdGVzdCBwYXNz
ZXMgaWYgdGhlIGNhcmV0IGlzIHBvc2l0aW9uZWQgYXQgdGhlIHNhbWUgcG9zaXRpb24gYWZ0ZXIg
dGhlIGV4ZWN1dGlvbiBpbnNlcnRpb24gY29tbWFuZC4KKworYWJjZGVmZ2hpamtsbW5vcHFyc3R1
dnd4eXoKK1BBU1Mgd2luZG93LmdldFNlbGVjdGlvbigpLmJhc2VPZmZzZXQgaXMgNQorCkluZGV4
OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtZW1wdHktaHRtbC5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1lbXB0eS1o
dG1sLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9p
bnNlcnQtZW1wdHktaHRtbC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1IEBACis8IURP
Q1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vZmFzdC9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxw
PlRoaXMgdGVzdCBlbnN1cmVzIGluc2VydGluZyBlbXB0eSBzdHJpbmcgZG9lcyBub3QgbW92ZSB0
aGUgY2FyZXQuPC9wPgorPHA+VGhlIGNhcmV0IGlzIHBsYWNlZCBhdCA1dGggcG9zIGFuZCB0aGUg
ZW1wdHkgaHRtbCBpcyBhZGRlZC4gVGhlIHRlc3QgcGFzc2VzIGlmIHRoZSBjYXJldCBpcyBwb3Np
dGlvbmVkIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFmdGVyIHRoZSBleGVjdXRpb24gaW5zZXJ0aW9u
IGNvbW1hbmQuPC9wPgorCis8ZGl2IGlkPSJjb250ZW50IiBjb250ZW50ZWRpdGFibGU9InRydWUi
PmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rp
dj4KKworPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
IGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHZhciBzZWwgPSB3aW5k
b3cuZ2V0U2VsZWN0aW9uKCk7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb250ZW50Iik7CisgICAgdmFyIHRleHQgPSBkaXYuZmlyc3RDaGlsZDsKKworICAgIC8vIFNl
dCB0aGUgY2FyZXQgcG9zaXRpb24KKyAgICBzZWwuc2V0UG9zaXRpb24odGV4dCwgNSk7CisKKyAg
ICAvLyBJbnNlcnQgdGhlIGVtcHR5IGh0bWwKKyAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnSW5z
ZXJ0SFRNTCcsIGZhbHNlLCAiIik7CisKKyAgICBzaG91bGRCZSgid2luZG93LmdldFNlbGVjdGlv
bigpLmJhc2VPZmZzZXQiLCAiNSIpOworfQorCis8L3NjcmlwdD4KKworPC9ib2R5PgorPC9odG1s
Pgo=
</data>
<flag name="review"
          id="143034"
          type_id="1"
          status="-"
          setter="rniwa"
    />
    <flag name="commit-queue"
          id="143035"
          type_id="3"
          status="-"
          setter="rniwa"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>138045</attachid>
            <date>2012-04-19 23:01:35 -0700</date>
            <delta_ts>2012-04-19 23:19:03 -0700</delta_ts>
            <desc>Updated patch.</desc>
            <filename>71771-updated.diff</filename>
            <type>text/plain</type>
            <size>4812</size>
            <attacher name="Antaryami Pandia (apandia)">antaryami.pandia</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNDcxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDEyLTA0LTE5ICBBbnRhcnlh
bWkgUGFuZGlhICA8YW50YXJ5YW1pLnBhbmRpYUBtb3Rvcm9sYS5jb20+CisKKyAgICAgICAgSW5z
ZXJ0aW5nIGVtcHR5IGh0bWwgbW92ZXMgY2FyZXQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD03MTc3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdoZW4gd2UgcGxhY2UgdGhlIGN1cnNvciBpbiB0aGUgbWlk
ZGxlIG9mIGEgdGV4dCBub2RlIGFuZCB0cnkgdG8gaW5zZXJ0IHNvbWUgdGV4dAorICAgICAgICBi
ZXR3ZWVuLCB0aGVuIHdlIHNwbGl0IHRleHQgbm9kZS4gQnV0IGluIHRoaXMgY2FzZSB3ZSBoYXZl
IG5vdGhpbmcgdG8gaW5zZXJ0IHNpbmNlCisgICAgICAgIHRoZSBzdHJpbmcgdG8gYmUgaW5zZXJ0
ZWQgaXMgZW1wdHkuIFNvIHRoZSBjaGVjayBmb3IgZnJhZ21lbnRzIHNob3VsZCBwcmVjZWRlcyB0
aGUKKyAgICAgICAgY2FsbCB0byBjb2RlIGJsb2NrIGNvbnRhaW5pbmcgc3BsaXRUZXh0Tm9kZS4K
KworICAgICAgICBUZXN0OiBlZGl0aW5nL2luc2VydGluZy9pbnNlcnQtZW1wdHktaHRtbC5odG1s
CisKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpkb0FwcGx5KToKKwogMjAxMi0w
NC0xOSAgVGF5IEdyaWdnICA8dGdyaWdnQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnld
IFVwZGF0ZSBIVFRQIGNvbm5lY3Rpb24gcGVyIGhvc3QgbGltaXQgaW4gUmVzb3VyY2VSZXF1ZXN0
QmxhY2tCZXJyeQpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9u
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAJKHJldmlzaW9uIDExNDYwOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MTgsNiArOTE4LDEwIEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmRvQXBwbHkoKQog
CiAgICAgYm9vbCBoYW5kbGVkU3R5bGVTcGFucyA9IGhhbmRsZVN0eWxlU3BhbnNCZWZvcmVJbnNl
cnRpb24oZnJhZ21lbnQsIGluc2VydGlvblBvcyk7CiAKKyAgICAvLyBXZSdyZSBmaW5pc2hlZCBp
ZiB0aGVyZSBpcyBub3RoaW5nIHRvIGFkZC4KKyAgICBpZiAoZnJhZ21lbnQuaXNFbXB0eSgpIHx8
ICFmcmFnbWVudC5maXJzdENoaWxkKCkpCisgICAgICAgIHJldHVybjsKKwogICAgIC8vIElmIHdl
IGFyZSBub3QgdHJ5aW5nIHRvIG1hdGNoIHRoZSBkZXN0aW5hdGlvbiBzdHlsZSB3ZSBwcmVmZXIg
YSBwb3NpdGlvbgogICAgIC8vIHRoYXQgaXMgb3V0c2lkZSBpbmxpbmUgZWxlbWVudHMgdGhhdCBw
cm92aWRlIHN0eWxlLgogICAgIC8vIFRoaXMgd2F5IHdlIGNhbiBwcm9kdWNlIGEgbGVzcyB2ZXJi
b3NlIG1hcmt1cC4KQEAgLTk0MCwxMSArOTQ0LDcgQEAgdm9pZCBSZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZDo6ZG9BcHBseSgpCiAKICAgICAvLyBGSVhNRTogV2hlbiBwYXN0aW5nIHJpY2ggY29udGVu
dCB3ZSdyZSBvZnRlbiBwcmV2ZW50ZWQgZnJvbSBoZWFkaW5nIGRvd24gdGhlIGZhc3QgcGF0aCBi
eSBzdHlsZSBzcGFucy4gIFRyeQogICAgIC8vIGFnYWluIGhlcmUgaWYgdGhleSd2ZSBiZWVuIHJl
bW92ZWQuCi0gICAgCi0gICAgLy8gV2UncmUgZmluaXNoZWQgaWYgdGhlcmUgaXMgbm90aGluZyB0
byBhZGQuCi0gICAgaWYgKGZyYWdtZW50LmlzRW1wdHkoKSB8fCAhZnJhZ21lbnQuZmlyc3RDaGls
ZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICAvLyAxKSBJbnNlcnQgdGhlIGNvbnRl
bnQuCiAgICAgLy8gMikgUmVtb3ZlIHJlZHVuZGFudCBzdHlsZXMgYW5kIHN0eWxlIHRhZ3MsIHRo
aXMgaW5uZXIgPGI+IGZvciBleGFtcGxlOiA8Yj5mb28gPGI+YmFyPC9iPiBiYXo8L2I+LgogICAg
IC8vIDMpIE1lcmdlIHRoZSBzdGFydCBvZiB0aGUgYWRkZWQgY29udGVudCB3aXRoIHRoZSBjb250
ZW50IGJlZm9yZSB0aGUgcG9zaXRpb24gYmVpbmcgcGFzdGVkIGludG8uCkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMTQ3MTcpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNSBAQAorMjAxMi0wNC0xOSAgQW50YXJ5YW1pIFBhbmRpYSAgPGFudGFyeWFtaS5w
YW5kaWFAbW90b3JvbGEuY29tPgorCisgICAgICAgIEluc2VydGluZyBlbXB0eSBodG1sIG1vdmVz
IGNhcmV0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NzE3NzEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
ZXN0IGluc2VydGluZyBlbXB0eSBodG1sLgorCisgICAgICAgICogZWRpdGluZy9pbnNlcnRpbmcv
aW5zZXJ0LWVtcHR5LWh0bWwtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBlZGl0aW5n
L2luc2VydGluZy9pbnNlcnQtZW1wdHktaHRtbC5odG1sOiBBZGRlZC4KKwogMjAxMi0wNC0xOSAg
RG1pdHJ5IFRpdG92ICA8ZGltaWNoQGNocm9taXVtLm9yZz4KIAogICAgICAgICBOb3QgcmV2aWV3
ZWQsIHJlLXVwZGF0ZSBiYXNlbGluZXMgZm9yIG5ldyB0ZXN0cwpJbmRleDogTGF5b3V0VGVzdHMv
ZWRpdGluZy9pbnNlcnRpbmcvaW5zZXJ0LWVtcHR5LWh0bWwtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1lbXB0eS1odG1sLWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2VkaXRpbmcvaW5zZXJ0aW5n
L2luc2VydC1lbXB0eS1odG1sLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
IEBACitUaGlzIHRlc3QgZW5zdXJlcyBpbnNlcnRpbmcgZW1wdHkgc3RyaW5nIGRvZXMgbm90IG1v
dmUgdGhlIGNhcmV0LgorCitUaGUgY2FyZXQgaXMgcGxhY2VkIGF0IDV0aCBwb3MgYW5kIHRoZSBl
bXB0eSBodG1sIGlzIGFkZGVkLiBUaGUgdGVzdCBwYXNzZXMgaWYgdGhlIGNhcmV0IGlzIHBvc2l0
aW9uZWQgYXQgdGhlIHNhbWUgcG9zaXRpb24gYWZ0ZXIgdGhlIGV4ZWN1dGlvbiBpbnNlcnRpb24g
Y29tbWFuZC4KKworYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoKK1BBU1Mgd2luZG93LmdldFNl
bGVjdGlvbigpLmJhc2VPZmZzZXQgaXMgNQorCkluZGV4OiBMYXlvdXRUZXN0cy9lZGl0aW5nL2lu
c2VydGluZy9pbnNlcnQtZW1wdHktaHRtbC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2VkaXRpbmcvaW5zZXJ0aW5nL2luc2VydC1lbXB0eS1odG1sLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9lZGl0aW5nL2luc2VydGluZy9pbnNlcnQtZW1wdHktaHRtbC5odG1sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorCis8
Ym9keT4KKzxwPlRoaXMgdGVzdCBlbnN1cmVzIGluc2VydGluZyBlbXB0eSBzdHJpbmcgZG9lcyBu
b3QgbW92ZSB0aGUgY2FyZXQuPC9wPgorPHA+VGhlIGNhcmV0IGlzIHBsYWNlZCBhdCA1dGggcG9z
IGFuZCB0aGUgZW1wdHkgaHRtbCBpcyBhZGRlZC4gVGhlIHRlc3QgcGFzc2VzIGlmIHRoZSBjYXJl
dCBpcyBwb3NpdGlvbmVkIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGFmdGVyIHRoZSBleGVjdXRpb24g
aW5zZXJ0aW9uIGNvbW1hbmQuPC9wPgorCis8ZGl2IGlkPSJjb250ZW50IiBjb250ZW50ZWRpdGFi
bGU9InRydWUiPmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6PC9kaXY+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKyAg
ICB2YXIgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOworICAgIHZhciBkaXYgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29udGVudCIpOworICAgIHZhciB0ZXh0ID0gZGl2LmZp
cnN0Q2hpbGQ7CisKKyAgICBzZWxlY3Rpb24uc2V0UG9zaXRpb24odGV4dCwgNSk7CisgICAgZG9j
dW1lbnQuZXhlY0NvbW1hbmQoJ0luc2VydEhUTUwnLCBmYWxzZSwgIiIpOworCisgICAgc2hvdWxk
QmUoIndpbmRvdy5nZXRTZWxlY3Rpb24oKS5iYXNlT2Zmc2V0IiwgIjUiKTsKK30KKworPC9zY3Jp
cHQ+CisKKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>