<?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>56421</bug_id>
          
          <creation_ts>2011-03-15 15:30:47 -0700</creation_ts>
          <short_desc>Devirtualize isContentEditable and isRichlyContentEditable</short_desc>
          <delta_ts>2011-03-17 11:51:32 -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>DOM</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>56372</dependson>
          <blocked>54290</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>367992</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 15:30:47 -0700</bug_when>
    <thetext>This is a cleanup mentioned in the bug 56372.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368016</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-15 16:07:10 -0700</bug_when>
    <thetext>It’s also a little strange that an element like &quot;&lt;custom&gt;&quot; always returns false from isContentEditable. Devirtualizing in the most obvious way might change that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368022</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 16:15:33 -0700</bug_when>
    <thetext>I&apos;d say the strangest thing is that Node::isContentEditable/isContentRichlyEditable call parentOrHostNode() instead of parentNode().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368025</commentid>
    <comment_count>3</comment_count>
      <attachid>85870</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 16:19:31 -0700</bug_when>
    <thetext>Created attachment 85870
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368027</commentid>
    <comment_count>4</comment_count>
      <attachid>85870</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 16:21:19 -0700</bug_when>
    <thetext>Comment on attachment 85870
work in progress

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

&gt; Source/WebCore/dom/Node.cpp:720
&gt; +    if (document()-&gt;inDesignMode())
&gt; +        return true;

This is a very expensive call.  It&apos;ll traverse all parent frames.  Given that this function walks the nodes up, isContentEditable is O(nk) where n is the number of nodes in the current document and k is the number of parent documents.  I don&apos;t think this is acceptable.  We should make it O(n+k).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368104</commentid>
    <comment_count>5</comment_count>
      <attachid>85888</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 18:03:41 -0700</bug_when>
    <thetext>Created attachment 85888
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368105</commentid>
    <comment_count>6</comment_count>
      <attachid>85888</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 18:05:37 -0700</bug_when>
    <thetext>Comment on attachment 85888
cleanup

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

&gt; Source/WebCore/dom/Node.h:331
&gt; +    bool isContentEditable() const { return isContentEditable(false); }
&gt; +    bool isContentRichlyEditable() const { return isContentEditable(true); }

I&apos;m not happy about the fact these two functions call isContentEditable with true/false but I wasn&apos;t sure about it&apos;s worth adding an enum just so that these two functions can use it.  Given that isContentEditable is Node&apos;s private function, it seems okay to use raw boolean values here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368117</commentid>
    <comment_count>7</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 18:21:58 -0700</bug_when>
    <thetext>Oops, I had forgotten that C++ allows enum declaration to appear later than it&apos;s first referenced within a class declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368118</commentid>
    <comment_count>8</comment_count>
      <attachid>85891</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 18:22:51 -0700</bug_when>
    <thetext>Created attachment 85891
Use enum instead of boolean</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368134</commentid>
    <comment_count>9</comment_count>
      <attachid>85891</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-15 19:10:01 -0700</bug_when>
    <thetext>Comment on attachment 85891
Use enum instead of boolean

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

&gt; Source/WebCore/dom/Node.cpp:719
&gt; +    // Ideally we&apos;d call ASSERT!needsStyleRecalc()) here, but

Missing parenthesis. I know you just moved this, but still.

&gt; Source/WebCore/dom/Node.cpp:724
&gt; +    const Node* node = this;
&gt; +    while (node) {

I’d write this as a for loop. That will work really well if both sides end up doing node-&gt;parentNode, but it’s OK even without that.

    for (const Node* node = this; node; )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368136</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 19:14:51 -0700</bug_when>
    <thetext>Thanks for the review as always.

(In reply to comment #9)
&gt; (From update of attachment 85891 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=85891&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/Node.cpp:719
&gt; &gt; +    // Ideally we&apos;d call ASSERT!needsStyleRecalc()) here, but
&gt; 
&gt; Missing parenthesis. I know you just moved this, but still.

Oh yeah, I didn&apos;t realize that.  Will fix.

&gt; &gt; Source/WebCore/dom/Node.cpp:724
&gt; &gt; +    const Node* node = this;
&gt; &gt; +    while (node) {
&gt; 
&gt; I’d write this as a for loop. That will work really well if both sides end up doing node-&gt;parentNode, but it’s OK even without that.
&gt; 
&gt;     for (const Node* node = this; node; )

Okay, will do.  We should really be calling parentNode for both cases.  I bet the reason we haven&apos;t realized this bug is because shadow DOM&apos;s root element is almost always editable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368201</commentid>
    <comment_count>11</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 23:02:38 -0700</bug_when>
    <thetext>I measured the time to run LayoutTests/editing with and without the patch:

With patch:
30.36
30.52
30.60
30.86
30.87
30.21
30.72
30.50
30.90
30.74

Without patch:
30.86
30.60
31.62
31.10
30.47
30.34
30.61
30.60
30.91
30.77

So it&apos;s about 0.52% improvement overall.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368205</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 23:11:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &gt;     for (const Node* node = this; node; )
&gt; 
&gt; Okay, will do.  We should really be calling parentNode for both cases.  I bet the reason we haven&apos;t realized this bug is because shadow DOM&apos;s root element is almost always editable.

After some research, this behavior seems to be intentional.  IE lets user edit readonly input element if the element is inside an editable region.  So I guess we need to keep this behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>368212</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-15 23:21:55 -0700</bug_when>
    <thetext>Committed r81220: &lt;http://trac.webkit.org/changeset/81220&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85870</attachid>
            <date>2011-03-15 16:19:31 -0700</date>
            <delta_ts>2011-03-15 18:03:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-56421-20110315161930.patch</filename>
            <type>text/plain</type>
            <size>6330</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMTg4KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTEtMDMtMTUgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRGV2aXJ0dWFsaXplIGlzQ29udGVudEVkaXRhYmxlIGFuZCBpc1Jp
Y2hseUNvbnRlbnRFZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTY0MjEKKworICAgICAgICBObyBuZXcgdGVzdHMuIChPT1BTISkKKworICAg
ICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgICogZG9tL0RvY3VtZW50Lmg6CisgICAg
ICAgICogZG9tL05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNDb250ZW50RWRp
dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNDb250ZW50UmljaGx5RWRpdGFibGUp
OgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5jcHA6
CisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOgorCiAyMDExLTAzLTE1ICBSeW9zdWtlIE5p
d2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFRvbnkgQ2hhbmcu
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDgxMTg1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDExNywyMiArNDEx
Nyw2IEBAIGJvb2wgRG9jdW1lbnQ6OmluRGVzaWduTW9kZSgpIGNvbnN0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCi1ib29sIERvY3VtZW50Ojppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Ci17Ci0g
ICAgaWYgKGluRGVzaWduTW9kZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVy
biByZW5kZXJlcigpICYmIChyZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVB
RF9XUklURSB8fCByZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9XUklU
RV9QTEFJTlRFWFRfT05MWSk7Ci19Ci0KLWJvb2wgRG9jdW1lbnQ6OmlzQ29udGVudFJpY2hseUVk
aXRhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoaW5EZXNpZ25Nb2RlKCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgcmVuZGVyZXIoKS0+c3R5bGUoKS0+
dXNlck1vZGlmeSgpID09IFJFQURfV1JJVEU7Ci19Ci0KIERvY3VtZW50KiBEb2N1bWVudDo6cGFy
ZW50RG9jdW1lbnQoKSBjb25zdAogewogICAgIGlmICghbV9mcmFtZSkKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiA4MTE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC04OTQsOCArODk0LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0RGVzaWduTW9kZShJbmhlcml0ZWRCb29sIHZhbHVlKTsKICAgICBJbmhlcml0ZWRCb29sIGdl
dERlc2lnbk1vZGUoKSBjb25zdDsKICAgICBib29sIGluRGVzaWduTW9kZSgpIGNvbnN0OwotICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0OwogCiAgICAgRG9jdW1lbnQqIHBhcmVu
dERvY3VtZW50KCkgY29uc3Q7CiAgICAgRG9jdW1lbnQqIHRvcERvY3VtZW50KCkgY29uc3Q7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuY3BwCShyZXZpc2lvbiA4MTE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEzLDEyICs3MTMsMzMgQEAgdm9pZCBOb2Rl
OjpkZXByZWNhdGVkUGFyc2VyQWRkQ2hpbGQoUGFzcwogCiBib29sIE5vZGU6OmlzQ29udGVudEVk
aXRhYmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFyZW50T3JIb3N0Tm9kZSgpICYmIHBhcmVu
dE9ySG9zdE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKKyAgICBpZiAoIWlzSFRNTEVsZW1l
bnQoKSAmJiAhaXNEb2N1bWVudE5vZGUoKSkKKyAgICAgICAgcmV0dXJuIHBhcmVudE9ySG9zdE5v
ZGUoKSAmJiBwYXJlbnRPckhvc3ROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7CisKKyAgICBp
ZiAoZG9jdW1lbnQoKS0+aW5EZXNpZ25Nb2RlKCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgLy8gSWRlYWxseSB3ZSdkIGNhbGwgQVNTRVJUIW5lZWRzU3R5bGVSZWNhbGMoKSkgaGVyZSwg
YnV0CisgICAgLy8gQ29udGFpbmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBzZXROZWVkc1N0eWxl
UmVjYWxjKCksIHNvIHRoZSBhc3NlcnRpb24KKyAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRk
bGUgb2YgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKCkuCisgICAgaWYgKCFyZW5kZXJlcigpKQor
ICAgICAgICByZXR1cm4gcGFyZW50Tm9kZSgpID8gcGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0
YWJsZSgpIDogZmFsc2U7CisKKyAgICByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1v
ZGlmeSgpID09IFJFQURfV1JJVEUgfHwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgp
ID09IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFk7CiB9CiAKIGJvb2wgTm9kZTo6aXNDb250ZW50
UmljaGx5RWRpdGFibGUoKSBjb25zdAogewotICAgIHJldHVybiBwYXJlbnRPckhvc3ROb2RlKCkg
JiYgcGFyZW50T3JIb3N0Tm9kZSgpLT5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOworICAgIGlm
ICghaXNIVE1MRWxlbWVudCgpICYmICFpc0RvY3VtZW50Tm9kZSgpKQorICAgICAgICByZXR1cm4g
cGFyZW50T3JIb3N0Tm9kZSgpICYmIHBhcmVudE9ySG9zdE5vZGUoKS0+aXNDb250ZW50UmljaGx5
RWRpdGFibGUoKTsKKworICAgIGlmIChkb2N1bWVudCgpLT5pbkRlc2lnbk1vZGUoKSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXJlbmRlcmVyKCkpCisgICAgICAgIHJldHVybiBw
YXJlbnROb2RlKCkgPyBwYXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCkgOiBmYWxzZTsK
KworICAgIHJldHVybiByZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9X
UklURTsKIH0KIAogYm9vbCBOb2RlOjpzaG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Ob2RlLmgJKHJldmlzaW9uIDgxMTg1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDggKzMyNyw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CiAgICAgdmly
dHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgYm9vbCBp
c0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpIGNvbnN0OworICAgIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsK
KyAgICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBi
b29sIHNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGdl
dFJlY3QoKSBjb25zdDsKICAgICBJbnRSZWN0IHJlbmRlclJlY3QoYm9vbCogaXNSZXBsYWNlZCk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gODExODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjU3LDQwICs2NTcsNiBAQCBib29sIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QK
ICAgICByZXR1cm4gRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJs
ZSgpICYmIHBhcmVudE5vZGUoKSAmJiAhcGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgp
KTsKIH0KIAotYm9vbCBIVE1MRWxlbWVudDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCAKLXsK
LSAgICBpZiAoZG9jdW1lbnQoKS0+aW5EZXNpZ25Nb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotCi0gICAgLy8gSWRlYWxseSB3ZSdkIGNhbGwgQVNTRVJUIW5lZWRzU3R5bGVSZWNhbGMoKSkg
aGVyZSwgYnV0Ci0gICAgLy8gQ29udGFpbmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBzZXROZWVk
c1N0eWxlUmVjYWxjKCksIHNvIHRoZSBhc3NlcnRpb24KLSAgICAvLyB3b3VsZCBmaXJlIGluIHRo
ZSBtaWRkbGUgb2YgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKCkuCi0KLSAgICBpZiAoIXJlbmRl
cmVyKCkpIHsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBw
YXJlbnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0
eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFIHx8IHJlbmRlcmVyKCktPnN0eWxlKCkt
PnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZOwotfQotCi1ib29sIEhU
TUxFbGVtZW50Ojppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGRv
Y3VtZW50KCktPmluRGVzaWduTW9kZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
ICghcmVuZGVyZXIoKSkgewotICAgICAgICBpZiAocGFyZW50Tm9kZSgpKQotICAgICAgICAgICAg
cmV0dXJuIHBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLSAgICAgICAgZWxzZQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVuZGVy
ZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpID09IFJFQURfV1JJVEU7Ci19Ci0KIFN0cmluZyBI
VE1MRWxlbWVudDo6Y29udGVudEVkaXRhYmxlKCkgY29uc3QgCiB7CiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0cik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA4MTE4NSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3
aGVyZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFs
IGJvb2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0Nv
bnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUm
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85888</attachid>
            <date>2011-03-15 18:03:41 -0700</date>
            <delta_ts>2011-03-15 18:22:48 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-56421-20110315180340.patch</filename>
            <type>text/plain</type>
            <size>7011</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMTUgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRGV2aXJ0dWFsaXplIGlzQ29udGVudEVkaXRhYmxlIGFuZCBpc1Jp
Y2hseUNvbnRlbnRFZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTY0MjEKKworICAgICAgICBSZXdyb3RlIE5vZGU6OmlzQ29udGVudEVkaXRh
YmxlIGFzIGEgbm9uLXJlY3Vyc2l2ZSBub24tdmlydHVhbCBmdW5jdGlvbi4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6IFJlbW92ZWQgaXNDb250ZW50RWRpdGFibGUgYW5kIGlzQ29udGVu
dFJpY2hseUVkaXRhYmxlLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KKyAgICAg
ICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRFZGl0
YWJsZSk6IFJld3JpdHRlbi4KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6aXNDb250ZW50RWRpdGFibGUpOiBDYWxscyBpc0NvbnRlbnRFZGl0YWJsZShmYWxz
ZSkuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSk6IENh
bGxzIGlzQ29udGVudEVkaXRhYmxlKHRydWUpLgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnQu
Y3BwOiBSZW1vdmVkIGlzQ29udGVudEVkaXRhYmxlIGFuZCBpc0NvbnRlbnRSaWNobHlFZGl0YWJs
ZS4KKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50Lmg6IERpdHRvLgorCiAyMDExLTAzLTE1ICBB
ZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlt
aXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiA4MTE4
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQxMTcsMjIgKzQxMTcsNiBAQCBib29sIERvY3VtZW50OjppbkRlc2lnbk1vZGUoKSBjb25zdAog
ICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBEb2N1bWVudDo6aXNDb250ZW50RWRpdGFibGUo
KSBjb25zdAotewotICAgIGlmIChpbkRlc2lnbk1vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIoKSAmJiAocmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1v
ZGlmeSgpID09IFJFQURfV1JJVEUgfHwgcmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlmeSgp
ID09IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFkpOwotfQotCi1ib29sIERvY3VtZW50Ojppc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGluRGVzaWduTW9kZSgpKQot
ICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiByZW5kZXJlcigpICYmIHJlbmRlcmVy
KCktPnN0eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFOwotfQotCiBEb2N1bWVudCog
RG9jdW1lbnQ6OnBhcmVudERvY3VtZW50KCkgY29uc3QKIHsKICAgICBpZiAoIW1fZnJhbWUpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gODExODUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODk0LDggKzg5NCw2IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHNldERlc2lnbk1vZGUoSW5oZXJpdGVkQm9vbCB2YWx1ZSk7CiAgICAgSW5o
ZXJpdGVkQm9vbCBnZXREZXNpZ25Nb2RlKCkgY29uc3Q7CiAgICAgYm9vbCBpbkRlc2lnbk1vZGUo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50RWRpdGFibGUoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBjb25zdDsKIAogICAgIERv
Y3VtZW50KiBwYXJlbnREb2N1bWVudCgpIGNvbnN0OwogICAgIERvY3VtZW50KiB0b3BEb2N1bWVu
dCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gODExODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcxMSwxNCArNzExLDMz
IEBAIHZvaWQgTm9kZTo6ZGVwcmVjYXRlZFBhcnNlckFkZENoaWxkKFBhc3MKIHsKIH0KIAotYm9v
bCBOb2RlOjppc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Citib29sIE5vZGU6OmlzQ29udGVudEVk
aXRhYmxlKGJvb2wgaXNSaWNobHlFZGl0YWJsZSkgY29uc3QKIHsKLSAgICByZXR1cm4gcGFyZW50
T3JIb3N0Tm9kZSgpICYmIHBhcmVudE9ySG9zdE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsK
LX0KKyAgICBpZiAoZG9jdW1lbnQoKS0+aW5EZXNpZ25Nb2RlKCkpCisgICAgICAgIHJldHVybiB0
cnVlOwogCi1ib29sIE5vZGU6OmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gcGFyZW50T3JIb3N0Tm9kZSgpICYmIHBhcmVudE9ySG9zdE5vZGUoKS0+aXNDb250
ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICAvLyBJZGVhbGx5IHdlJ2QgY2FsbCBBU1NFUlQhbmVl
ZHNTdHlsZVJlY2FsYygpKSBoZXJlLCBidXQKKyAgICAvLyBDb250YWluZXJOb2RlOjpzZXRGb2N1
cygpIGNhbGxzIHNldE5lZWRzU3R5bGVSZWNhbGMoKSwgc28gdGhlIGFzc2VydGlvbgorICAgIC8v
IHdvdWxkIGZpcmUgaW4gdGhlIG1pZGRsZSBvZiBEb2N1bWVudDo6c2V0Rm9jdXNlZE5vZGUoKS4K
KworICAgIGNvbnN0IE5vZGUqIG5vZGUgPSB0aGlzOworICAgIHdoaWxlIChub2RlKSB7CisgICAg
ICAgIGlmIChub2RlLT5pc0hUTUxFbGVtZW50KCkgfHwgbm9kZS0+aXNEb2N1bWVudE5vZGUoKSkg
eworICAgICAgICAgICAgaWYgKG5vZGUtPnJlbmRlcmVyKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaXNSaWNobHlFZGl0YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5vZGUtPnJl
bmRlcmVyKCktPnN0eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFOworCisgICAgICAg
ICAgICAgICAgRVVzZXJNb2RpZnkgdXNlck1vZGlmeSA9IG5vZGUtPnJlbmRlcmVyKCktPnN0eWxl
KCktPnVzZXJNb2RpZnkoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdXNlck1vZGlmeSA9PSBS
RUFEX1dSSVRFIHx8IHVzZXJNb2RpZnkgPT0gUkVBRF9XUklURV9QTEFJTlRFWFRfT05MWTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGUgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYmUgcGFyZW50
Tm9kZSgpIGluc3RlYWQ/CisgICAgICAgICAgICBub2RlID0gbm9kZS0+cGFyZW50T3JIb3N0Tm9k
ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIE5v
ZGU6OnNob3VsZFVzZUlucHV0TWV0aG9kKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gODExODUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjcsOCArMzI3LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9j
dXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNNb3VzZUZv
Y3VzYWJsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxlKCkg
Y29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3Q7
CisgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIGlzQ29udGVudEVk
aXRhYmxlKGZhbHNlKTsgfQorICAgIGJvb2wgaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBjb25z
dCB7IHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZSh0cnVlKTsgfQogICAgIHZpcnR1YWwgYm9vbCBz
aG91bGRVc2VJbnB1dE1ldGhvZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSW50UmVjdCBnZXRSZWN0
KCkgY29uc3Q7CiAgICAgSW50UmVjdCByZW5kZXJSZWN0KGJvb2wqIGlzUmVwbGFjZWQpOwpAQCAt
NjU5LDYgKzY1OSw4IEBAIHByaXZhdGU6CiAgICAgdm9pZCBtYXJrQ2FjaGVkTm9kZUxpc3RzU2xv
dyhKU0M6Ok1hcmtTdGFjayYsIEpTQzo6SlNHbG9iYWxEYXRhJik7CiAjZW5kaWYKIAorICAgIGJv
b2wgaXNDb250ZW50RWRpdGFibGUoYm9vbCBpc1JpY2hseUVkaXRhYmxlKSBjb25zdDsKKwogICAg
IHZvaWQgc2V0U3R5bGVDaGFuZ2UoU3R5bGVDaGFuZ2VUeXBlKTsKIAogICAgIC8vIFVzZWQgdG8g
c2hhcmUgY29kZSBiZXR3ZWVuIGxhenlBdHRhY2ggYW5kIHNldE5lZWRzU3R5bGVSZWNhbGMuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkocmV2aXNpb24gODExODUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU3
LDQwICs2NTcsNiBAQCBib29sIEhUTUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKICAg
ICByZXR1cm4gRWxlbWVudDo6c3VwcG9ydHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgp
ICYmIHBhcmVudE5vZGUoKSAmJiAhcGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsK
IH0KIAotYm9vbCBIVE1MRWxlbWVudDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCAKLXsKLSAg
ICBpZiAoZG9jdW1lbnQoKS0+aW5EZXNpZ25Nb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgLy8gSWRlYWxseSB3ZSdkIGNhbGwgQVNTRVJUIW5lZWRzU3R5bGVSZWNhbGMoKSkgaGVy
ZSwgYnV0Ci0gICAgLy8gQ29udGFpbmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBzZXROZWVkc1N0
eWxlUmVjYWxjKCksIHNvIHRoZSBhc3NlcnRpb24KLSAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBt
aWRkbGUgb2YgRG9jdW1lbnQ6OnNldEZvY3VzZWROb2RlKCkuCi0KLSAgICBpZiAoIXJlbmRlcmVy
KCkpIHsKLSAgICAgICAgaWYgKHBhcmVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJl
bnROb2RlKCktPmlzQ29udGVudEVkaXRhYmxlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxl
KCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnVz
ZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZOwotfQotCi1ib29sIEhUTUxF
bGVtZW50Ojppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGRvY3Vt
ZW50KCktPmluRGVzaWduTW9kZSgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgh
cmVuZGVyZXIoKSkgewotICAgICAgICBpZiAocGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0
dXJuIHBhcmVudE5vZGUoKS0+aXNDb250ZW50RWRpdGFibGUoKTsKLSAgICAgICAgZWxzZQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVuZGVyZXIo
KS0+c3R5bGUoKS0+dXNlck1vZGlmeSgpID09IFJFQURfV1JJVEU7Ci19Ci0KIFN0cmluZyBIVE1M
RWxlbWVudDo6Y29udGVudEVkaXRhYmxlKCkgY29uc3QgCiB7CiAgICAgY29uc3QgQXRvbWljU3Ry
aW5nJiB2YWx1ZSA9IGZhc3RHZXRBdHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0cik7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5oCShyZXZpc2lvbiA4MTE4NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBpbnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVy
ZSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNGb2N1cygpIGNvbnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRl
bnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpIGNvbnN0OwogCiAgICAgU3RyaW5nIGNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAg
IHZvaWQgc2V0Q29udGVudEVkaXRhYmxlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85891</attachid>
            <date>2011-03-15 18:22:51 -0700</date>
            <delta_ts>2011-03-15 19:10:01 -0700</delta_ts>
            <desc>Use enum instead of boolean</desc>
            <filename>bug-56421-20110315182249.patch</filename>
            <type>text/plain</type>
            <size>7104</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgxMjA1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMTUgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRGV2aXJ0dWFsaXplIGlzQ29udGVudEVkaXRhYmxlIGFuZCBpc1Jp
Y2hseUNvbnRlbnRFZGl0YWJsZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9NTY0MjEKKworICAgICAgICBSZXdyb3RlIE5vZGU6OmlzQ29udGVudEVkaXRh
YmxlIGFzIGEgbm9uLXJlY3Vyc2l2ZSBub24tdmlydHVhbCBmdW5jdGlvbi4KKworICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6IFJlbW92ZWQgaXNDb250ZW50RWRpdGFibGUgYW5kIGlzQ29udGVu
dFJpY2hseUVkaXRhYmxlLgorICAgICAgICAqIGRvbS9Eb2N1bWVudC5oOiBEaXR0by4KKyAgICAg
ICAgKiBkb20vTm9kZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRFZGl0
YWJsZSk6IFJld3JpdHRlbi4KKyAgICAgICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6aXNDb250ZW50RWRpdGFibGUpOiBDYWxscyBpc0NvbnRlbnRFZGl0YWJsZShFZGl0
YWJsZSkuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NvbnRlbnRSaWNobHlFZGl0YWJsZSk6
IENhbGxzIGlzQ29udGVudEVkaXRhYmxlKFJpY2hseUVkaXRhYmxlKS4KKyAgICAgICAgKiBodG1s
L0hUTUxFbGVtZW50LmNwcDogUmVtb3ZlZCBpc0NvbnRlbnRFZGl0YWJsZSBhbmQgaXNDb250ZW50
UmljaGx5RWRpdGFibGUuCisgICAgICAgICogaHRtbC9IVE1MRWxlbWVudC5oOiBEaXR0by4KKwog
MjAxMS0wMy0xNSAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gODExODUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTE3LDIyICs0MTE3LDYgQEAgYm9vbCBEb2N1bWVudDo6aW5EZXNpZ25N
b2RlKCkgY29uc3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgRG9jdW1lbnQ6OmlzQ29u
dGVudEVkaXRhYmxlKCkgY29uc3QKLXsKLSAgICBpZiAoaW5EZXNpZ25Nb2RlKCkpCi0gICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyKCkgJiYgKHJlbmRlcmVyKCktPnN0
eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFIHx8IHJlbmRlcmVyKCktPnN0eWxlKCkt
PnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dSSVRFX1BMQUlOVEVYVF9PTkxZKTsKLX0KLQotYm9vbCBE
b2N1bWVudDo6aXNDb250ZW50UmljaGx5RWRpdGFibGUoKSBjb25zdAotewotICAgIGlmIChpbkRl
c2lnbk1vZGUoKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIo
KSAmJiByZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCkgPT0gUkVBRF9XUklURTsKLX0K
LQogRG9jdW1lbnQqIERvY3VtZW50OjpwYXJlbnREb2N1bWVudCgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX2ZyYW1lKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDgxMTg1KQorKysg
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5NCw4ICs4
OTQsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXREZXNpZ25Nb2RlKEluaGVyaXRlZEJvb2wgdmFs
dWUpOwogICAgIEluaGVyaXRlZEJvb2wgZ2V0RGVzaWduTW9kZSgpIGNvbnN0OwogICAgIGJvb2wg
aW5EZXNpZ25Nb2RlKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29udGVudEVkaXRhYmxl
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29u
c3Q7CiAKICAgICBEb2N1bWVudCogcGFyZW50RG9jdW1lbnQoKSBjb25zdDsKICAgICBEb2N1bWVu
dCogdG9wRG9jdW1lbnQoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAJKHJldmlzaW9uIDgx
MTg1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
MTEsMTQgKzcxMSwzMyBAQCB2b2lkIE5vZGU6OmRlcHJlY2F0ZWRQYXJzZXJBZGRDaGlsZChQYXNz
CiB7CiB9CiAKLWJvb2wgTm9kZTo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdAorYm9vbCBOb2Rl
Ojppc0NvbnRlbnRFZGl0YWJsZShFZGl0YWJsZUxldmVsIGVkaXRhYmxlTGV2ZWwpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIHBhcmVudE9ySG9zdE5vZGUoKSAmJiBwYXJlbnRPckhvc3ROb2RlKCktPmlz
Q29udGVudEVkaXRhYmxlKCk7Ci19CisgICAgaWYgKGRvY3VtZW50KCktPmluRGVzaWduTW9kZSgp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKIAotYm9vbCBOb2RlOjppc0NvbnRlbnRSaWNobHlFZGl0
YWJsZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBhcmVudE9ySG9zdE5vZGUoKSAmJiBwYXJlbnRP
ckhvc3ROb2RlKCktPmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgLy8gSWRlYWxseSB3
ZSdkIGNhbGwgQVNTRVJUIW5lZWRzU3R5bGVSZWNhbGMoKSkgaGVyZSwgYnV0CisgICAgLy8gQ29u
dGFpbmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBzZXROZWVkc1N0eWxlUmVjYWxjKCksIHNvIHRo
ZSBhc3NlcnRpb24KKyAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1lbnQ6
OnNldEZvY3VzZWROb2RlKCkuCisKKyAgICBjb25zdCBOb2RlKiBub2RlID0gdGhpczsKKyAgICB3
aGlsZSAobm9kZSkgeworICAgICAgICBpZiAobm9kZS0+aXNIVE1MRWxlbWVudCgpIHx8IG5vZGUt
PmlzRG9jdW1lbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5yZW5kZXJlcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKGVkaXRhYmxlTGV2ZWwgPT0gUmljaGx5RWRpdGFibGUpCisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT51c2Vy
TW9kaWZ5KCkgPT0gUkVBRF9XUklURTsKKworICAgICAgICAgICAgICAgIEVVc2VyTW9kaWZ5IHVz
ZXJNb2RpZnkgPSBub2RlLT5yZW5kZXJlcigpLT5zdHlsZSgpLT51c2VyTW9kaWZ5KCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHVzZXJNb2RpZnkgPT0gUkVBRF9XUklURSB8fCB1c2VyTW9kaWZ5
ID09IFJFQURfV1JJVEVfUExBSU5URVhUX09OTFk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBub2RlID0gbm9kZS0+cGFyZW50Tm9kZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGJlIHBhcmVudE5vZGUoKSBpbnN0ZWFkPworICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPnBhcmVudE9ySG9zdE5vZGUoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBOb2RlOjpzaG91bGRVc2VJbnB1dE1ldGhv
ZCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgJKHJldmlzaW9uIDgxMTg1KQorKysgU291cmNlL1dl
YkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzI3LDggKzMyNyw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50Kikg
Y29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzTW91c2VGb2N1c2FibGUoKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgYm9v
bCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0OworICAgIGJvb2wgaXNDb250ZW50RWRp
dGFibGUoKSBjb25zdCB7IHJldHVybiBpc0NvbnRlbnRFZGl0YWJsZShFZGl0YWJsZSk7IH0KKyAg
ICBib29sIGlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gaXNDb250ZW50
RWRpdGFibGUoUmljaGx5RWRpdGFibGUpOyB9CiAgICAgdmlydHVhbCBib29sIHNob3VsZFVzZUlu
cHV0TWV0aG9kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBJbnRSZWN0IGdldFJlY3QoKSBjb25zdDsK
ICAgICBJbnRSZWN0IHJlbmRlclJlY3QoYm9vbCogaXNSZXBsYWNlZCk7CkBAIC02NTksNiArNjU5
LDkgQEAgcHJpdmF0ZToKICAgICB2b2lkIG1hcmtDYWNoZWROb2RlTGlzdHNTbG93KEpTQzo6TWFy
a1N0YWNrJiwgSlNDOjpKU0dsb2JhbERhdGEmKTsKICNlbmRpZgogCisgICAgZW51bSBFZGl0YWJs
ZUxldmVsIHsgRWRpdGFibGUsIFJpY2hseUVkaXRhYmxlIH07CisgICAgYm9vbCBpc0NvbnRlbnRF
ZGl0YWJsZShFZGl0YWJsZUxldmVsKSBjb25zdDsKKwogICAgIHZvaWQgc2V0U3R5bGVDaGFuZ2Uo
U3R5bGVDaGFuZ2VUeXBlKTsKIAogICAgIC8vIFVzZWQgdG8gc2hhcmUgY29kZSBiZXR3ZWVuIGxh
enlBdHRhY2ggYW5kIHNldE5lZWRzU3R5bGVSZWNhbGMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkocmV2aXNpb24gODExODUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjU3LDQwICs2NTcsNiBAQCBib29sIEhU
TUxFbGVtZW50OjpzdXBwb3J0c0ZvY3VzKCkgY29uc3QKICAgICByZXR1cm4gRWxlbWVudDo6c3Vw
cG9ydHNGb2N1cygpIHx8IChpc0NvbnRlbnRFZGl0YWJsZSgpICYmIHBhcmVudE5vZGUoKSAmJiAh
cGFyZW50Tm9kZSgpLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKIH0KIAotYm9vbCBIVE1MRWxlbWVu
dDo6aXNDb250ZW50RWRpdGFibGUoKSBjb25zdCAKLXsKLSAgICBpZiAoZG9jdW1lbnQoKS0+aW5E
ZXNpZ25Nb2RlKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgLy8gSWRlYWxseSB3ZSdk
IGNhbGwgQVNTRVJUIW5lZWRzU3R5bGVSZWNhbGMoKSkgaGVyZSwgYnV0Ci0gICAgLy8gQ29udGFp
bmVyTm9kZTo6c2V0Rm9jdXMoKSBjYWxscyBzZXROZWVkc1N0eWxlUmVjYWxjKCksIHNvIHRoZSBh
c3NlcnRpb24KLSAgICAvLyB3b3VsZCBmaXJlIGluIHRoZSBtaWRkbGUgb2YgRG9jdW1lbnQ6OnNl
dEZvY3VzZWROb2RlKCkuCi0KLSAgICBpZiAoIXJlbmRlcmVyKCkpIHsKLSAgICAgICAgaWYgKHBh
cmVudE5vZGUoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnROb2RlKCktPmlzQ29udGVudEVk
aXRhYmxlKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
Ci0gICAgCi0gICAgcmV0dXJuIHJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBS
RUFEX1dSSVRFIHx8IHJlbmRlcmVyKCktPnN0eWxlKCktPnVzZXJNb2RpZnkoKSA9PSBSRUFEX1dS
SVRFX1BMQUlOVEVYVF9PTkxZOwotfQotCi1ib29sIEhUTUxFbGVtZW50Ojppc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGRvY3VtZW50KCktPmluRGVzaWduTW9kZSgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghcmVuZGVyZXIoKSkgewotICAgICAg
ICBpZiAocGFyZW50Tm9kZSgpKQotICAgICAgICAgICAgcmV0dXJuIHBhcmVudE5vZGUoKS0+aXND
b250ZW50RWRpdGFibGUoKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVuZGVyZXIoKS0+c3R5bGUoKS0+dXNlck1vZGlm
eSgpID09IFJFQURfV1JJVEU7Ci19Ci0KIFN0cmluZyBIVE1MRWxlbWVudDo6Y29udGVudEVkaXRh
YmxlKCkgY29uc3QgCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGZhc3RHZXRB
dHRyaWJ1dGUoY29udGVudGVkaXRhYmxlQXR0cik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxl
bWVudC5oCShyZXZpc2lvbiA4MTE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBp
bnNlcnRBZGphY2VudFRleHQoY29uc3QgU3RyaW5nJiB3aGVyZSwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNGb2N1cygpIGNv
bnN0OwotICAgIAotICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgYm9vbCBpc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpIGNvbnN0OwogCiAgICAg
U3RyaW5nIGNvbnRlbnRFZGl0YWJsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q29udGVudEVkaXRh
YmxlKGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsK
</data>
<flag name="review"
          id="78088"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>