<?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>57521</bug_id>
          
          <creation_ts>2011-03-30 19:34:40 -0700</creation_ts>
          <short_desc>Move coordinate-computing logic into MouseRelatedEvent.</short_desc>
          <delta_ts>2011-03-31 10:31:22 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</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>
          <dependson>57562</dependson>
          <blocked>55515</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>376874</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-30 19:34:40 -0700</bug_when>
    <thetext>Move coordinate-computing logic into MouseRelatedEvent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376877</commentid>
    <comment_count>1</comment_count>
      <attachid>87658</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-30 19:38:48 -0700</bug_when>
    <thetext>Created attachment 87658
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376885</commentid>
    <comment_count>2</comment_count>
      <attachid>87658</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-30 19:47:50 -0700</bug_when>
    <thetext>Comment on attachment 87658
Patch

Generally speaking my goal was to have the events be simple data holders and keep the smarts in the class to a minimum. Since the DOM allows you to create events with arbitrary values, I figured the smarts of computing the arguments for an event to send didn’t belong in the event class itself. There had to be some exceptions, but my goal was to keep them to a minimum. Your patch heads in the other direction.

I think it’s OK to have this logic in the event class.

I also think it’s dangerous to change the meanings of the MouseRelatedEvent arguments. Before the constructor arguments and the init function arguments were exactly the same thing.

Despite those reservations this change seems OK. But not a great bell-ringer of an improvement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376889</commentid>
    <comment_count>3</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-30 19:59:59 -0700</bug_when>
    <thetext>The reason I thought this would be a good thing is because MouseRelatedEvent already does a lot of coordinate-computing itself, so keeping the initialization code seemed odd.

I like the notion of Events as simple data holders, but in our code, we have three distinct piles of very narrowly-focused knowledge:
1) how to fire events according to DOM rules (that&apos;s what EventDispatcher does)
2) how to create events (and initialize them)
3) how to react to results of even dispatch (and perhaps issue a sequence of events, such as simulated clicking)

My plan was to put 2 and 3 in the same abstraction, and this abstraction was to be FooEvent, since that class knows all about, well, the specifics of firing Foo events.

However, if we go with the event-as-simple-object idea, then perhaps there&apos;s a place for another type of object, something like an event factory, which does 2 and 3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376890</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-30 20:02:53 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; However, if we go with the event-as-simple-object idea, then perhaps there&apos;s a place for another type of object, something like an event factory, which does 2 and 3.

We can’t really make the event be a simple object because of the target-based coordinate properties like layerX and offsetX. I was forced to put that code into MouseRelatedEvent because the coordinates can’t be computed until the event is dispatched to a target.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376891</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-30 20:05:47 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; However, if we go with the event-as-simple-object idea, then perhaps there&apos;s a place for another type of object, something like an event factory, which does 2 and 3.
&gt; 
&gt; We can’t really make the event be a simple object because of the target-based coordinate properties like layerX and offsetX. I was forced to put that code into MouseRelatedEvent because the coordinates can’t be computed until the event is dispatched to a target.

So maybe it&apos;s ok to view events as self-managing entities? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376892</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-03-30 20:14:07 -0700</bug_when>
    <thetext>I still think the long term best design for events is probably plain data holders. This is clearly the intent of the DOM since it provides a function that lets you construct an arbitrary event with any value for any property. It’s the non-standard DOM extensions that stray from this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376919</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-30 21:06:50 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I still think the long term best design for events is probably plain data holders. This is clearly the intent of the DOM since it provides a function that lets you construct an arbitrary event with any value for any property. It’s the non-standard DOM extensions that stray from this.

So we&apos;re back to some sort of a separate object to manage event cycle. Let me sketch out something here. Suppose we have a FooEventManager object, which has these two methods:

PassRefPtr&lt;Event&gt; prepareEvent();
bool dispatchEvent(EventDispatcher*);

At the callsite, we&apos;ll have something like this:

EventDispatcher::dispatchEvent(node, MouseEventManager(params,params));

Whose body does something like this:

RefPtr&lt;Event&gt; event = eventManager.prepareEvent();
EventDispatcher dispatcher(node);
return eventManager.dispatchEvent(dispatcher);

The def/decl live with the corresponding FooEvent.cpp. This should allow us to both keep events simpler and abstract the dispatch lifecycle logic pretty well. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376922</commentid>
    <comment_count>8</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-30 21:08:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; I still think the long term best design for events is probably plain data holders. This is clearly the intent of the DOM since it provides a function that lets you construct an arbitrary event with any value for any property. It’s the non-standard DOM extensions that stray from this.
&gt; 
&gt; So we&apos;re back to some sort of a separate object to manage event cycle. Let me sketch out something here. Suppose we have a FooEventManager object, which has these two methods:
&gt; 
&gt; PassRefPtr&lt;Event&gt; prepareEvent();
&gt; bool dispatchEvent(EventDispatcher*);
&gt; 
&gt; At the callsite, we&apos;ll have something like this:
&gt; 
&gt; EventDispatcher::dispatchEvent(node, MouseEventManager(params,params));
&gt; 
&gt; Whose body does something like this:
&gt; 
&gt; RefPtr&lt;Event&gt; event = eventManager.prepareEvent();
&gt; EventDispatcher dispatcher(node);
&gt; return eventManager.dispatchEvent(dispatcher);

Probably don&apos;t even need the prepareEvent method. Can just stuff it all into dispatchEvent method.

&gt; 
&gt; The def/decl live with the corresponding FooEvent.cpp. This should allow us to both keep events simpler and abstract the dispatch lifecycle logic pretty well. What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>376930</commentid>
    <comment_count>9</comment_count>
      <attachid>87658</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-03-30 21:27:03 -0700</bug_when>
    <thetext>Comment on attachment 87658
Patch

Rejecting attachment 87658 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;bu...&quot; exit_code: 2

Last 500 characters of output:
......................................................................................................................
editing/selection ....................................................................................................................
editing/selection/drag-start-event-client-x-y.html -&gt; failed

Exiting early after 1 failures. 5284 tests run.
116.40s total testing time

5283 test cases (99%) succeeded
1 test case (&lt;1%) had incorrect layout
2 test cases (&lt;1%) had stderr output

Full output: http://queues.webkit.org/results/8311128</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377197</commentid>
    <comment_count>10</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-31 09:00:46 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; (From update of attachment 87658 [details])
&gt; Rejecting attachment 87658 [details] from commit-queue.
&gt; 
&gt; Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;bu...&quot; exit_code: 2
&gt; 
&gt; Last 500 characters of output:
&gt; ......................................................................................................................
&gt; editing/selection ....................................................................................................................
&gt; editing/selection/drag-start-event-client-x-y.html -&gt; failed
&gt; 
&gt; Exiting early after 1 failures. 5284 tests run.
&gt; 116.40s total testing time
&gt; 
&gt; 5283 test cases (99%) succeeded
&gt; 1 test case (&lt;1%) had incorrect layout
&gt; 2 test cases (&lt;1%) had stderr output
&gt; 
&gt; Full output: http://queues.webkit.org/results/8311128

Ah, there&apos;s also a drag event callsite that needed to be tweaked.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377199</commentid>
    <comment_count>11</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-31 09:01:22 -0700</bug_when>
    <thetext>Committed r82584: &lt;http://trac.webkit.org/changeset/82584&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>377304</commentid>
    <comment_count>12</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2011-03-31 10:31:22 -0700</bug_when>
    <thetext>Darin, I put up a patch based on the sketch in bug 57562. Take a look and let me know what you think.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87658</attachid>
            <date>2011-03-30 19:38:48 -0700</date>
            <delta_ts>2011-03-30 21:27:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-57521-20110330193847.patch</filename>
            <type>text/plain</type>
            <size>9440</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogODI1MDIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NzY0YTM5MDM5MzYxODQ2
ODQzNjBmNmMzYjFjZGVhYmZiMDgwODg0Li4wMGQ2MjhmZmIwZjViMGM1ZDJkMDM2NTBjMDMwYzc0
ZGY1YmMyZjM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTEtMDMtMzAgIERpbWl0
cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3ZlIGNvb3JkaW5hdGUtY29tcHV0aW5nIGxv
Z2ljIGludG8gTW91c2VSZWxhdGVkRXZlbnQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzUyMQorCisgICAgICAgIFJlZmFjdG9yaW5nLCBjb3ZlcmVk
IGJ5IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoV2hlZWxFdmVudCk6
IFlhbmsgY2FsY3VsYXRpb24gb2YKKyAgICAgICAgICAgIGNvb3JkaW5hdGVzIG91dC4KKyAgICAg
ICAgKFdlYkNvcmU6OkV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2ZW50KTogRGl0dG8u
CisgICAgICAgICogZG9tL01vdXNlRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW91c2VF
dmVudDo6Y3JlYXRlKTogQWRkIGNvb3JkaW5hdGUtY29tcHV0aW5nIGxvZ2ljLgorICAgICAgICAq
IGRvbS9Nb3VzZUV2ZW50Lmg6IEFkanVzdCBkZWNsIHRvIHJlZmxlY3QgbmV3IG1lYW5pbmcgb2Yg
cGFyYW1zLgorICAgICAgICAqIGRvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpNb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQpOiBEaXR0by4KKwog
MjAxMS0wMy0zMCAgU3RlcGhlbiBXaGl0ZSAgPHNlbm9yYmxhbmNvQGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dERpc3BhdGNoZXIuY3BwCmluZGV4IGM4YjMzMGQyY2U3YzA1MzZiZDBmNmI5MmViMzhmMjI3N2Jm
ZTFiMzEuLmMyY2YwOTI4N2Y3MTFiYjY1M2MyMjIwMmNkZTBiYTAyZTlmMmFhMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCkBAIC0xMzcsMjcgKzEzNywxMCBAQCB2b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hXaGVlbEV2ZW50KE5vZGUqIG5vZGUsIFBsYXRmb3Jt
V2hlZWxFdmVudCYgZXZlbnQpCiAKICAgICBFdmVudERpc3BhdGNoZXIgZGlzcGF0Y2hlcihub2Rl
KTsKIAotICAgIGlmICghZGlzcGF0Y2hlci5tX3ZpZXcpCi0gICAgICAgIHJldHVybjsKLQotICAg
IEludFBvaW50IHBvc2l0aW9uID0gZGlzcGF0Y2hlci5tX3ZpZXctPndpbmRvd1RvQ29udGVudHMo
ZXZlbnQucG9zKCkpOwotCi0gICAgaW50IGFkanVzdGVkUGFnZVggPSBwb3NpdGlvbi54KCk7Ci0g
ICAgaW50IGFkanVzdGVkUGFnZVkgPSBwb3NpdGlvbi55KCk7Ci0gICAgaWYgKEZyYW1lKiBmcmFt
ZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgZmxvYXQgcGFnZVpvb20g
PSBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKLSAgICAgICAgaWYgKHBhZ2Vab29tICE9IDEuMGYp
IHsKLSAgICAgICAgICAgIGFkanVzdGVkUGFnZVggPSBscm91bmRmKHBvc2l0aW9uLngoKSAvIHBh
Z2Vab29tKTsKLSAgICAgICAgICAgIGFkanVzdGVkUGFnZVkgPSBscm91bmRmKHBvc2l0aW9uLnko
KSAvIHBhZ2Vab29tKTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIFJlZlB0cjxXaGVlbEV2ZW50
PiB3aGVlbEV2ZW50ID0gV2hlZWxFdmVudDo6Y3JlYXRlKGV2ZW50LndoZWVsVGlja3NYKCksIGV2
ZW50LndoZWVsVGlja3NZKCksIGV2ZW50LmRlbHRhWCgpLCBldmVudC5kZWx0YVkoKSwgZ3JhbnVs
YXJpdHkoZXZlbnQpLAotICAgICAgICBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBl
dmVudC5nbG9iYWxYKCksIGV2ZW50Lmdsb2JhbFkoKSwgYWRqdXN0ZWRQYWdlWCwgYWRqdXN0ZWRQ
YWdlWSwKKyAgICAgICAgbm9kZS0+ZG9jdW1lbnQoKS0+ZGVmYXVsdFZpZXcoKSwgZXZlbnQuZ2xv
YmFsWCgpLCBldmVudC5nbG9iYWxZKCksIGV2ZW50LngoKSwgZXZlbnQueSgpLAogICAgICAgICBl
dmVudC5jdHJsS2V5KCksIGV2ZW50LmFsdEtleSgpLCBldmVudC5zaGlmdEtleSgpLCBldmVudC5t
ZXRhS2V5KCkpOwogCi0gICAgd2hlZWxFdmVudC0+c2V0QWJzb2x1dGVMb2NhdGlvbihwb3NpdGlv
bik7Ci0KICAgICBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2hFdmVudCh3aGVlbEV2ZW50KSB8fCB3
aGVlbEV2ZW50LT5kZWZhdWx0SGFuZGxlZCgpKQogICAgICAgICBldmVudC5hY2NlcHQoKTsKIApA
QCAtMzI2LDIyICszMDksNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hNb3VzZUV2
ZW50KE5vZGUqIG5vZGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZQogICAgIC8vIEF0dGVt
cHRpbmcgdG8gZGlzcGF0Y2ggd2l0aCBhIG5vbi1FdmVudFRhcmdldCByZWxhdGVkVGFyZ2V0IGNh
dXNlcyB0aGUgcmVsYXRlZFRhcmdldCB0byBiZSBzaWxlbnRseSBpZ25vcmVkLgogICAgIFJlZlB0
cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHVsbE91dE9mU2hhZG93KHJlbGF0ZWRUYXJnZXRBcmcp
OwogCi0gICAgSW50UG9pbnQgY29udGVudHNQb3NpdGlvbjsKLSAgICBpZiAoRnJhbWVWaWV3KiB2
aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpKQotICAgICAgICBjb250ZW50c1Bvc2l0aW9u
ID0gdmlldy0+d2luZG93VG9Db250ZW50cyhldmVudC5wb3MoKSk7Ci0KLSAgICBJbnRQb2ludCBh
ZGp1c3RlZFBhZ2VQb3NpdGlvbiA9IGNvbnRlbnRzUG9zaXRpb247Ci0gICAgaWYgKEZyYW1lKiBm
cmFtZSA9IG5vZGUtPmRvY3VtZW50KCktPmZyYW1lKCkpIHsKLSAgICAgICAgZmxvYXQgcGFnZVpv
b20gPSBmcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKLSAgICAgICAgaWYgKHBhZ2Vab29tICE9IDEu
MGYpIHsKLSAgICAgICAgICAgIC8vIEFkanVzdCBvdXIgcGFnZVggYW5kIHBhZ2VZIHRvIGFjY291
bnQgZm9yIHRoZSBwYWdlIHpvb20uCi0gICAgICAgICAgICBhZGp1c3RlZFBhZ2VQb3NpdGlvbi5z
ZXRYKGxyb3VuZGYoY29udGVudHNQb3NpdGlvbi54KCkgLyBwYWdlWm9vbSkpOwotICAgICAgICAg
ICAgYWRqdXN0ZWRQYWdlUG9zaXRpb24uc2V0WShscm91bmRmKGNvbnRlbnRzUG9zaXRpb24ueSgp
IC8gcGFnZVpvb20pKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIFJlZlB0cjxNb3VzZUV2ZW50
PiBtb3VzZUV2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgbm9kZS0+ZG9jdW1l
bnQoKS0+ZGVmYXVsdFZpZXcoKSwgZXZlbnQsIGFkanVzdGVkUGFnZVBvc2l0aW9uLCBkZXRhaWws
IHJlbGF0ZWRUYXJnZXQpOwotICAgIG1vdXNlRXZlbnQtPnNldEFic29sdXRlTG9jYXRpb24oY29u
dGVudHNQb3NpdGlvbik7CisgICAgUmVmUHRyPE1vdXNlRXZlbnQ+IG1vdXNlRXZlbnQgPSBNb3Vz
ZUV2ZW50OjpjcmVhdGUoZXZlbnRUeXBlLCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0Vmlldygp
LCBldmVudCwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKIAogICAgIGJvb2wgc3dhbGxvd0V2ZW50
ID0gZmFsc2U7CiAKQEAgLTM1NSw3ICszMjMsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlz
cGF0Y2hNb3VzZUV2ZW50KE5vZGUqIG5vZGUsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVudCYgZQog
ICAgIC8vIG9mIHRoZSBET00gc3BlY3MsIGJ1dCBpcyB1c2VkIGZvciBjb21wYXRpYmlsaXR5IHdp
dGggdGhlIG9uZGJsY2xpY2s9IiIgYXR0cmlidXRlLiBUaGlzIGlzIHRyZWF0ZWQKICAgICAvLyBh
cyBhIHNlcGFyYXRlIGV2ZW50IGluIG90aGVyIERPTS1jb21wbGlhbnQgYnJvd3NlcnMgbGlrZSBG
aXJlZm94LCBhbmQgc28gd2UgZG8gdGhlIHNhbWUuCiAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkuY2xpY2tFdmVudCAmJiBkZXRhaWwgPT0gMikgewotICAgICAgICBSZWZQdHI8RXZl
bnQ+IGRvdWJsZUNsaWNrRXZlbnQgPSBNb3VzZUV2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRi
bGNsaWNrRXZlbnQsIG5vZGUtPmRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCksIGV2ZW50LCBhZGp1
c3RlZFBhZ2VQb3NpdGlvbiwgZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKKyAgICAgICAgUmVmUHRy
PEV2ZW50PiBkb3VibGVDbGlja0V2ZW50ID0gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5kYmxjbGlja0V2ZW50LCBub2RlLT5kb2N1bWVudCgpLT5kZWZhdWx0VmlldygpLCBldmVudCwg
ZGV0YWlsLCByZWxhdGVkVGFyZ2V0KTsKICAgICAgICAgaWYgKGRlZmF1bHRIYW5kbGVkKQogICAg
ICAgICAgICAgZG91YmxlQ2xpY2tFdmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKICAgICAgICAg
ZGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGRvdWJsZUNsaWNrRXZlbnQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL01v
dXNlRXZlbnQuY3BwCmluZGV4IDBhY2JkNzQwMzMyYjQwYmVlZjQ1ZTRlNTBhMmNhN2MxMGVlZWMz
MzMuLmZkMjE2YWI2Y2U2M2RlMGRlMDc4MTY5MGQ4ZTdhNTZlOTFmNDBjYjYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAKQEAgLTMwLDEyICszMCwxMiBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLVBhc3NSZWZQdHI8TW91c2VFdmVudD4gTW91c2VFdmVudDo6Y3JlYXRlKGNvbnN0IEF0
b21pY1N0cmluZyYgZXZlbnRUeXBlLCBQYXNzUmVmUHRyPEFic3RyYWN0Vmlldz4gdmlldywgY29u
c3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiBldmVudCwgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uLCBp
bnQgZGV0YWlsLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpCitQYXNzUmVmUHRyPE1v
dXNlRXZlbnQ+IE1vdXNlRXZlbnQ6OmNyZWF0ZShjb25zdCBBdG9taWNTdHJpbmcmIGV2ZW50VHlw
ZSwgUGFzc1JlZlB0cjxBYnN0cmFjdFZpZXc+IHZpZXcsIGNvbnN0IFBsYXRmb3JtTW91c2VFdmVu
dCYgZXZlbnQsIGludCBkZXRhaWwsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZFRhcmdldCkKIHsK
ICAgICBib29sIGlzQ2FuY2VsYWJsZSA9IGV2ZW50VHlwZSAhPSBldmVudE5hbWVzKCkubW91c2Vt
b3ZlRXZlbnQ7CiAKICAgICByZXR1cm4gTW91c2VFdmVudDo6Y3JlYXRlKGV2ZW50VHlwZSwgdHJ1
ZSwgaXNDYW5jZWxhYmxlLCB2aWV3LAotICAgICAgICBkZXRhaWwsIGV2ZW50Lmdsb2JhbFgoKSwg
ZXZlbnQuZ2xvYmFsWSgpLCBwb3NpdGlvbi54KCksIHBvc2l0aW9uLnkoKSwKKyAgICAgICAgZGV0
YWlsLCBldmVudC5nbG9iYWxYKCksIGV2ZW50Lmdsb2JhbFkoKSwgZXZlbnQueCgpLCBldmVudC55
KCksCiAgICAgICAgIGV2ZW50LmN0cmxLZXkoKSwgZXZlbnQuYWx0S2V5KCksIGV2ZW50LnNoaWZ0
S2V5KCksIGV2ZW50Lm1ldGFLZXkoKSwgZXZlbnQuYnV0dG9uKCksCiAgICAgICAgIHJlbGF0ZWRU
YXJnZXQsIDAsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3Vz
ZUV2ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5oCmluZGV4IDA2ZTYyMTg2
N2EwMGY4ZjUxOGQ0MTI5ZmU1YzNkM2Q5NDU4NmMxZjUuLjhlMmJjYTM3ZjZiMzlmNDAwODc3MGZm
OGFkMDc2OTNiNDljOWEyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2
ZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuaApAQCAtNDYsNyArNDYs
NyBAQCBjbGFzcyBQbGF0Zm9ybU1vdXNlRXZlbnQ7CiAgICAgICAgICAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IE1vdXNlRXZlbnQodHlwZSwgY2FuQnViYmxlLCBjYW5jZWxhYmxlLCB2aWV3LCBkZXRh
aWwsIHNjcmVlblgsIHNjcmVlblksIHBhZ2VYLCBwYWdlWSwKICAgICAgICAgICAgICAgICBjdHJs
S2V5LCBhbHRLZXksIHNoaWZ0S2V5LCBtZXRhS2V5LCBidXR0b24sIHJlbGF0ZWRUYXJnZXQsIGNs
aXBib2FyZCwgaXNTaW11bGF0ZWQpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1Jl
ZlB0cjxNb3VzZUV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIFBh
c3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgUGxhdGZvcm1Nb3VzZUV2ZW50JiwgY29uc3Qg
SW50UG9pbnQmLCBpbnQgZGV0YWlsLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpOwor
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNb3VzZUV2ZW50PiBjcmVhdGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBldmVudFR5cGUsIFBhc3NSZWZQdHI8QWJzdHJhY3RWaWV3PiwgY29uc3QgUGxhdGZv
cm1Nb3VzZUV2ZW50JiwgaW50IGRldGFpbCwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0
KTsKIAogICAgICAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50KCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
TW91c2VSZWxhdGVkRXZlbnQuY3BwCmluZGV4IGY3NTI2NzBiYmJhZjExZDE2YzNkMmVkMzhjMTg1
NGU5ZTZhYzVjYjEuLjAxZTJkMTlmZWY4ZmM4NTljNWU1Nzc5NzYzMTE3MGE0M2U3YWIxZjcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZVJlbGF0ZWRFdmVudC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvZG9tL01vdXNlUmVsYXRlZEV2ZW50LmNwcApAQCAtNzQsMTggKzc0LDQz
IEBAIHN0YXRpYyBpbnQgY29udGVudHNZKEFic3RyYWN0VmlldyogYWJzdHJhY3RWaWV3KQogICAg
IHJldHVybiBmcmFtZVZpZXctPnNjcm9sbFkoKSAvIGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOwog
fQogCi1Nb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRvbWljU3Ry
aW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBhc3NSZWZQ
dHI8QWJzdHJhY3RWaWV3PiB2aWV3QXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBkZXRhaWwsIGludCBzY3JlZW5YLCBpbnQgc2NyZWVuWSwgaW50IHBhZ2VYLCBp
bnQgcGFnZVksCitNb3VzZVJlbGF0ZWRFdmVudDo6TW91c2VSZWxhdGVkRXZlbnQoY29uc3QgQXRv
bWljU3RyaW5nJiBldmVudFR5cGUsIGJvb2wgY2FuQnViYmxlLCBib29sIGNhbmNlbGFibGUsIFBh
c3NSZWZQdHI8QWJzdHJhY3RWaWV3PiBhYnN0cmFjdFZpZXcsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGRldGFpbCwgaW50IHNjcmVlblgsIGludCBzY3JlZW5ZLCBp
bnQgd2luZG93WCwgaW50IHdpbmRvd1ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBjdHJsS2V5LCBib29sIGFsdEtleSwgYm9vbCBzaGlmdEtleSwgYm9vbCBtZXRh
S2V5LCBib29sIGlzU2ltdWxhdGVkKQotICAgIDogVUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgdmlld0FyZywgZGV0YWlsLCBjdHJsS2V5LCBhbHRL
ZXksIHNoaWZ0S2V5LCBtZXRhS2V5KQorICAgIDogVUlFdmVudFdpdGhLZXlTdGF0ZShldmVudFR5
cGUsIGNhbkJ1YmJsZSwgY2FuY2VsYWJsZSwgYWJzdHJhY3RWaWV3LCBkZXRhaWwsIGN0cmxLZXks
IGFsdEtleSwgc2hpZnRLZXksIG1ldGFLZXkpCiAgICAgLCBtX3NjcmVlblgoc2NyZWVuWCkKICAg
ICAsIG1fc2NyZWVuWShzY3JlZW5ZKQotICAgICwgbV9jbGllbnRYKHBhZ2VYIC0gY29udGVudHNY
KHZpZXcoKSkpCi0gICAgLCBtX2NsaWVudFkocGFnZVkgLSBjb250ZW50c1kodmlldygpKSkKLSAg
ICAsIG1fcGFnZVgocGFnZVgpCi0gICAgLCBtX3BhZ2VZKHBhZ2VZKQorICAgICwgbV9jbGllbnRY
KDApCisgICAgLCBtX2NsaWVudFkoMCkKKyAgICAsIG1fcGFnZVgoMCkKKyAgICAsIG1fcGFnZVko
MCkKICAgICAsIG1faXNTaW11bGF0ZWQoaXNTaW11bGF0ZWQpCiB7CisgICAgSW50UG9pbnQgYWRq
dXN0ZWRQYWdlTG9jYXRpb247CisgICAgSW50UG9pbnQgc2Nyb2xsUG9zaXRpb247CisKKyAgICBG
cmFtZSogZnJhbWUgPSB2aWV3KCkgPyB2aWV3KCktPmZyYW1lKCkgOiAwOworICAgIGlmIChmcmFt
ZSAmJiAhaXNTaW11bGF0ZWQpIHsKKyAgICAgICAgaWYgKEZyYW1lVmlldyogZnJhbWVWaWV3ID0g
ZnJhbWUtPnZpZXcoKSkgeworICAgICAgICAgICAgc2Nyb2xsUG9zaXRpb24gPSBmcmFtZVZpZXct
PnNjcm9sbFBvc2l0aW9uKCk7CisgICAgICAgICAgICBhZGp1c3RlZFBhZ2VMb2NhdGlvbiA9IGZy
YW1lVmlldy0+d2luZG93VG9Db250ZW50cyhJbnRQb2ludCh3aW5kb3dYLCB3aW5kb3dZKSk7Cisg
ICAgICAgICAgICBmbG9hdCBwYWdlWm9vbSA9IGZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOworICAg
ICAgICAgICAgaWYgKHBhZ2Vab29tICE9IDEuMGYpIHsKKyAgICAgICAgICAgICAgICAvLyBBZGp1
c3Qgb3VyIHBhZ2VYIGFuZCBwYWdlWSB0byBhY2NvdW50IGZvciB0aGUgcGFnZSB6b29tLgorICAg
ICAgICAgICAgICAgIGFkanVzdGVkUGFnZUxvY2F0aW9uLnNldFgobHJvdW5kZihhZGp1c3RlZFBh
Z2VMb2NhdGlvbi54KCkgLyBwYWdlWm9vbSkpOworICAgICAgICAgICAgICAgIGFkanVzdGVkUGFn
ZUxvY2F0aW9uLnNldFkobHJvdW5kZihhZGp1c3RlZFBhZ2VMb2NhdGlvbi55KCkgLyBwYWdlWm9v
bSkpOworICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNldFgoc2Nyb2xsUG9zaXRpb24u
eCgpIC8gcGFnZVpvb20pOworICAgICAgICAgICAgICAgIHNjcm9sbFBvc2l0aW9uLnNldFkoc2Ny
b2xsUG9zaXRpb24ueSgpIC8gcGFnZVpvb20pOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgSW50UG9pbnQgY2xpZW50TG9jYXRpb24oYWRqdXN0ZWRQYWdlTG9jYXRpb24g
LSBzY3JvbGxQb3NpdGlvbik7CisgICAgbV9jbGllbnRYID0gY2xpZW50TG9jYXRpb24ueCgpOwor
ICAgIG1fY2xpZW50WSA9IGNsaWVudExvY2F0aW9uLnkoKTsKKyAgICBtX3BhZ2VYID0gYWRqdXN0
ZWRQYWdlTG9jYXRpb24ueCgpOworICAgIG1fcGFnZVkgPSBhZGp1c3RlZFBhZ2VMb2NhdGlvbi55
KCk7CisKICAgICBpbml0Q29vcmRpbmF0ZXMoKTsKIH0KIAo=
</data>
<flag name="review"
          id="80082"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="80083"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>