<?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>31841</bug_id>
          
          <creation_ts>2009-11-24 11:10:27 -0800</creation_ts>
          <short_desc>Linux Chromium sends too many click events</short_desc>
          <delta_ts>2009-11-24 15:46:36 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</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="Evan Stade">estade</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>evan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>166187</commentid>
    <comment_count>0</comment_count>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-11-24 11:10:27 -0800</bug_when>
    <thetext>for example, double clicking on the forward button on google calendar will send the calendar forward 3 months instead of 2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166189</commentid>
    <comment_count>1</comment_count>
      <attachid>43790</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-11-24 11:15:01 -0800</bug_when>
    <thetext>Created attachment 43790
fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166191</commentid>
    <comment_count>2</comment_count>
      <attachid>43790</attachid>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-11-24 11:19:45 -0800</bug_when>
    <thetext>Comment on attachment 43790
fix

&gt; Index: WebKit/chromium/ChangeLog
&gt; ===================================================================
&gt; --- WebKit/chromium/ChangeLog	(revision 51343)
&gt; +++ WebKit/chromium/ChangeLog	(working copy)
&gt; @@ -1,3 +1,18 @@
&gt; +2009-11-24  Evan Stade  &lt;estade@chromium.org&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Linux Chromium sends too many click events
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=31841
&gt; +
&gt; +        Manually count number of clicks for double/triple click events. This
&gt; +        makes us match firefox on http://www.quirksmode.org/js/events_mouse.html

Cap Firefox?

&gt; +        Chromium side of this patch is here:
&gt; +        http://codereview.chromium.org/431031/show
&gt; +
&gt; +        * src/gtk/WebInputEventFactory.cpp:
&gt; +        (WebKit::WebInputEventFactory::mouseEvent):
&gt; +
&gt;  2009-11-24  Adam Barth  &lt;abarth@webkit.org&gt;
&gt;  
&gt;          Reviewed by Dimitri Glazkov.
&gt; Index: WebKit/chromium/src/gtk/WebInputEventFactory.cpp
&gt; ===================================================================
&gt; --- WebKit/chromium/src/gtk/WebInputEventFactory.cpp	(revision 51343)
&gt; +++ WebKit/chromium/src/gtk/WebInputEventFactory.cpp	(working copy)
&gt; @@ -38,10 +38,22 @@
&gt;  
&gt;  #include &lt;gdk/gdk.h&gt;
&gt;  #include &lt;gdk/gdkkeysyms.h&gt;
&gt; +#include &lt;gtk/gtk.h&gt;
&gt;  #include &lt;gtk/gtkversion.h&gt;
&gt;  
&gt;  #include &lt;wtf/Assertions.h&gt;
&gt;  
&gt; +namespace {
&gt; +
&gt; +gint GetDoubleClickTime() {
&gt; +  static GtkSettings* settings = gtk_settings_get_default();
&gt; +  gint double_click_time = 250;
&gt; +  g_object_get(G_OBJECT(settings), &quot;gtk-double-click-time&quot;, &amp;double_click_time, NULL);
&gt; +  return double_click_time;
&gt; +}

Style: getDoubleClickTime, four spaces, variable naming.
Why static gobject?  Maybe the double click time should be static?
Does this work in a sandboxed renderer?  I didn&apos;t think you could get the real gtk settings.

&gt; +
&gt; +}  // namespace
&gt; +
&gt;  namespace WebKit {
&gt;  
&gt;  static double gdkEventTimeToWebEventTime(guint32 time)
&gt; @@ -321,24 +333,36 @@ WebMouseEvent WebInputEventFactory::mous
&gt;      result.clickCount = 0;
&gt;  
&gt;      switch (event-&gt;type) {
&gt; -    case GDK_3BUTTON_PRESS:
&gt; -        ++result.clickCount;
&gt; -        // fallthrough
&gt; -    case GDK_2BUTTON_PRESS:
&gt; -        ++result.clickCount;
&gt; -        // fallthrough
&gt;      case GDK_BUTTON_PRESS:
&gt;          result.type = WebInputEvent::MouseDown;
&gt; -        ++result.clickCount;
&gt;          break;
&gt;      case GDK_BUTTON_RELEASE:
&gt;          result.type = WebInputEvent::MouseUp;
&gt;          break;
&gt; -
&gt; +    case GDK_3BUTTON_PRESS:
&gt; +        // fallthrough

I think the comment isn&apos;t necessary when there&apos;s no code in the case.

&gt; +    case GDK_2BUTTON_PRESS:
&gt; +        // fallthrough
&gt;      default:
&gt;          ASSERT_NOT_REACHED();
&gt;      };
&gt;  
&gt; +    if (GDK_BUTTON_PRESS == event-&gt;type) {
&gt; +        static int numClicks = 0;
&gt; +        static GdkWindow* eventWindow = NULL;
&gt; +        static gint lastLeftClickTime = 0;
&gt; +
&gt; +        gint time_diff = event-&gt;time - lastLeftClickTime;
&gt; +        if (eventWindow == event-&gt;window &amp;&amp; time_diff &lt; GetDoubleClickTime())
&gt; +            numClicks++;
&gt; +        else
&gt; +            numClicks = 1;
&gt; +
&gt; +        result.clickCount = numClicks;
&gt; +        eventWindow = event-&gt;window;
&gt; +        lastLeftClickTime = event-&gt;time;
&gt; +    }
&gt; +
&gt;      result.button = WebMouseEvent::ButtonNone;
&gt;      if (event-&gt;button == 1)
&gt;          result.button = WebMouseEvent::ButtonLeft;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166197</commentid>
    <comment_count>3</comment_count>
      <attachid>43792</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-11-24 11:31:52 -0800</bug_when>
    <thetext>Created attachment 43792
style fixes

style fixed

1. The getDoubleClickTime function is copied from chrome code. The first variable is static to avoid unnecessary get_settings calls, although I admit this optimization might not buy us much. The result is not static because it could potentially change.
2. This code does not execute in the renderer, it executes in the browser process only.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166214</commentid>
    <comment_count>4</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-11-24 11:55:01 -0800</bug_when>
    <thetext>This seems good to me, though I am not a webkit reviewer.
The statics make me a bit sad, but not so much.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166292</commentid>
    <comment_count>5</comment_count>
      <attachid>43792</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2009-11-24 15:12:24 -0800</bug_when>
    <thetext>Comment on attachment 43792
style fixes

r- for no layout test.
You can send clicks from within layout tests, so it seems like it would be possible to add a layout test. As an absolutely last resort, there is always WebKit/WebCore/manual-tests


&gt; Index: WebKit/chromium/src/gtk/WebInputEventFactory.cpp
&gt; +gint getDoubleClickTime() {

The brace needs to go on the next line.

&gt; +    g_object_get(G_OBJECT(settings), &quot;gtk-double-click-time&quot;, &amp;doubleClickTime, NULL);

Use 0 instead of NULL.

&gt; +    if (GDK_BUTTON_PRESS == event-&gt;type) {
&gt; +        static int numClicks = 0;
&gt; +        static GdkWindow* eventWindow = NULL;

Use 0 instead of NULL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166297</commentid>
    <comment_count>6</comment_count>
      <attachid>43817</attachid>
    <who name="Evan Stade">estade</who>
    <bug_when>2009-11-24 15:22:22 -0800</bug_when>
    <thetext>Created attachment 43817
more style

I don&apos;t think it&apos;s possible to add a layout test because this is system event conversion. Layout tests would bypass this code and create the WebMouseEvent directly. The only way to test this would be with a Chromium UI test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166303</commentid>
    <comment_count>7</comment_count>
      <attachid>43817</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-24 15:46:31 -0800</bug_when>
    <thetext>Comment on attachment 43817
more style

Clearing flags on attachment: 43817

Committed r51364: &lt;http://trac.webkit.org/changeset/51364&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166304</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-24 15:46:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43790</attachid>
            <date>2009-11-24 11:15:01 -0800</date>
            <delta_ts>2009-11-24 11:31:52 -0800</delta_ts>
            <desc>fix</desc>
            <filename>double.diff</filename>
            <type>text/plain</type>
            <size>2933</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTEzNDMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMjQgIEV2YW4g
U3RhZGUgIDxlc3RhZGVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIExpbnV4IENocm9taXVtIHNlbmRzIHRvbyBtYW55IGNsaWNr
IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzE4NDEKKworICAgICAgICBNYW51YWxseSBjb3VudCBudW1iZXIgb2YgY2xpY2tzIGZvciBkb3Vi
bGUvdHJpcGxlIGNsaWNrIGV2ZW50cy4gVGhpcworICAgICAgICBtYWtlcyB1cyBtYXRjaCBmaXJl
Zm94IG9uIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX21vdXNlLmh0bWwKKyAg
ICAgICAgQ2hyb21pdW0gc2lkZSBvZiB0aGlzIHBhdGNoIGlzIGhlcmU6CisgICAgICAgIGh0dHA6
Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy80MzEwMzEvc2hvdworCisgICAgICAgICogc3JjL2d0
ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZl
bnRGYWN0b3J5Ojptb3VzZUV2ZW50KToKKwogMjAwOS0xMS0yNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5j
cHAJKHJldmlzaW9uIDUxMzQzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsvV2ViSW5wdXRF
dmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMjIgQEAKIAogI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAorbmFtZXNwYWNlIHsKKworZ2ludCBHZXREb3VibGVDbGlja1RpbWUo
KSB7CisgIHN0YXRpYyBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0X2Rl
ZmF1bHQoKTsKKyAgZ2ludCBkb3VibGVfY2xpY2tfdGltZSA9IDI1MDsKKyAgZ19vYmplY3RfZ2V0
KEdfT0JKRUNUKHNldHRpbmdzKSwgImd0ay1kb3VibGUtY2xpY2stdGltZSIsICZkb3VibGVfY2xp
Y2tfdGltZSwgTlVMTCk7CisgIHJldHVybiBkb3VibGVfY2xpY2tfdGltZTsKK30KKworfSAgLy8g
bmFtZXNwYWNlCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgZG91YmxlIGdka0V2ZW50
VGltZVRvV2ViRXZlbnRUaW1lKGd1aW50MzIgdGltZSkKQEAgLTMyMSwyNCArMzMzLDM2IEBAIFdl
Yk1vdXNlRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXMKICAgICByZXN1bHQuY2xpY2tD
b3VudCA9IDA7CiAKICAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0gICAgY2FzZSBHREtfM0JV
VFRPTl9QUkVTUzoKLSAgICAgICAgKytyZXN1bHQuY2xpY2tDb3VudDsKLSAgICAgICAgLy8gZmFs
bHRocm91Z2gKLSAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgICAgICArK3Jlc3VsdC5j
bGlja0NvdW50OwotICAgICAgICAvLyBmYWxsdGhyb3VnaAogICAgIGNhc2UgR0RLX0JVVFRPTl9Q
UkVTUzoKICAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd247Ci0g
ICAgICAgICsrcmVzdWx0LmNsaWNrQ291bnQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR0RL
X0JVVFRPTl9SRUxFQVNFOgogICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1v
dXNlVXA7CiAgICAgICAgIGJyZWFrOwotCisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAg
ICAgICAgLy8gZmFsbHRocm91Z2gKKyAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgorICAgICAg
ICAvLyBmYWxsdGhyb3VnaAogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwogICAgIH07CiAKKyAgICBpZiAoR0RLX0JVVFRPTl9QUkVTUyA9PSBldmVudC0+dHlwZSkg
eworICAgICAgICBzdGF0aWMgaW50IG51bUNsaWNrcyA9IDA7CisgICAgICAgIHN0YXRpYyBHZGtX
aW5kb3cqIGV2ZW50V2luZG93ID0gTlVMTDsKKyAgICAgICAgc3RhdGljIGdpbnQgbGFzdExlZnRD
bGlja1RpbWUgPSAwOworCisgICAgICAgIGdpbnQgdGltZV9kaWZmID0gZXZlbnQtPnRpbWUgLSBs
YXN0TGVmdENsaWNrVGltZTsKKyAgICAgICAgaWYgKGV2ZW50V2luZG93ID09IGV2ZW50LT53aW5k
b3cgJiYgdGltZV9kaWZmIDwgR2V0RG91YmxlQ2xpY2tUaW1lKCkpCisgICAgICAgICAgICBudW1D
bGlja3MrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbnVtQ2xpY2tzID0gMTsKKworICAg
ICAgICByZXN1bHQuY2xpY2tDb3VudCA9IG51bUNsaWNrczsKKyAgICAgICAgZXZlbnRXaW5kb3cg
PSBldmVudC0+d2luZG93OworICAgICAgICBsYXN0TGVmdENsaWNrVGltZSA9IGV2ZW50LT50aW1l
OworICAgIH0KKwogICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25Ob25l
OwogICAgIGlmIChldmVudC0+YnV0dG9uID09IDEpCiAgICAgICAgIHJlc3VsdC5idXR0b24gPSBX
ZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43792</attachid>
            <date>2009-11-24 11:31:52 -0800</date>
            <delta_ts>2009-11-24 15:22:22 -0800</delta_ts>
            <desc>style fixes</desc>
            <filename>double.diff</filename>
            <type>text/plain</type>
            <size>2887</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTEzNDMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMjQgIEV2YW4g
U3RhZGUgIDxlc3RhZGVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIExpbnV4IENocm9taXVtIHNlbmRzIHRvbyBtYW55IGNsaWNr
IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzE4NDEKKworICAgICAgICBNYW51YWxseSBjb3VudCBudW1iZXIgb2YgY2xpY2tzIGZvciBkb3Vi
bGUvdHJpcGxlIGNsaWNrIGV2ZW50cy4gVGhpcworICAgICAgICBtYWtlcyB1cyBtYXRjaCBGaXJl
Zm94IG9uIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX21vdXNlLmh0bWwKKyAg
ICAgICAgQ2hyb21pdW0gc2lkZSBvZiB0aGlzIHBhdGNoIGlzIGhlcmU6CisgICAgICAgIGh0dHA6
Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy80MzEwMzEvc2hvdworCisgICAgICAgICogc3JjL2d0
ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZl
bnRGYWN0b3J5Ojptb3VzZUV2ZW50KToKKwogMjAwOS0xMS0yNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5j
cHAJKHJldmlzaW9uIDUxMzQzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsvV2ViSW5wdXRF
dmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMjIgQEAKIAogI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAorbmFtZXNwYWNlIHsKKworZ2ludCBnZXREb3VibGVDbGlja1RpbWUo
KSB7CisgICAgc3RhdGljIEd0a1NldHRpbmdzKiBzZXR0aW5ncyA9IGd0a19zZXR0aW5nc19nZXRf
ZGVmYXVsdCgpOworICAgIGdpbnQgZG91YmxlQ2xpY2tUaW1lID0gMjUwOworICAgIGdfb2JqZWN0
X2dldChHX09CSkVDVChzZXR0aW5ncyksICJndGstZG91YmxlLWNsaWNrLXRpbWUiLCAmZG91Ymxl
Q2xpY2tUaW1lLCBOVUxMKTsKKyAgICByZXR1cm4gZG91YmxlQ2xpY2tUaW1lOworfQorCit9ICAv
LyBuYW1lc3BhY2UKKwogbmFtZXNwYWNlIFdlYktpdCB7CiAKIHN0YXRpYyBkb3VibGUgZ2RrRXZl
bnRUaW1lVG9XZWJFdmVudFRpbWUoZ3VpbnQzMiB0aW1lKQpAQCAtMzIxLDI0ICszMzMsMzQgQEAg
V2ViTW91c2VFdmVudCBXZWJJbnB1dEV2ZW50RmFjdG9yeTo6bW91cwogICAgIHJlc3VsdC5jbGlj
a0NvdW50ID0gMDsKIAogICAgIHN3aXRjaCAoZXZlbnQtPnR5cGUpIHsKLSAgICBjYXNlIEdES18z
QlVUVE9OX1BSRVNTOgotICAgICAgICArK3Jlc3VsdC5jbGlja0NvdW50OwotICAgICAgICAvLyBm
YWxsdGhyb3VnaAotICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6Ci0gICAgICAgICsrcmVzdWx0
LmNsaWNrQ291bnQ7Ci0gICAgICAgIC8vIGZhbGx0aHJvdWdoCiAgICAgY2FzZSBHREtfQlVUVE9O
X1BSRVNTOgogICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1vdXNlRG93bjsK
LSAgICAgICAgKytyZXN1bHQuY2xpY2tDb3VudDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBH
REtfQlVUVE9OX1JFTEVBU0U6CiAgICAgICAgIHJlc3VsdC50eXBlID0gV2ViSW5wdXRFdmVudDo6
TW91c2VVcDsKICAgICAgICAgYnJlYWs7Ci0KKyAgICBjYXNlIEdES18zQlVUVE9OX1BSRVNTOgor
ICAgIGNhc2UgR0RLXzJCVVRUT05fUFJFU1M6CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgfTsKIAorICAgIGlmIChHREtfQlVUVE9OX1BSRVNTID09IGV2
ZW50LT50eXBlKSB7CisgICAgICAgIHN0YXRpYyBpbnQgbnVtQ2xpY2tzID0gMDsKKyAgICAgICAg
c3RhdGljIEdka1dpbmRvdyogZXZlbnRXaW5kb3cgPSBOVUxMOworICAgICAgICBzdGF0aWMgZ2lu
dCBsYXN0TGVmdENsaWNrVGltZSA9IDA7CisKKyAgICAgICAgZ2ludCB0aW1lX2RpZmYgPSBldmVu
dC0+dGltZSAtIGxhc3RMZWZ0Q2xpY2tUaW1lOworICAgICAgICBpZiAoZXZlbnRXaW5kb3cgPT0g
ZXZlbnQtPndpbmRvdyAmJiB0aW1lX2RpZmYgPCBnZXREb3VibGVDbGlja1RpbWUoKSkKKyAgICAg
ICAgICAgIG51bUNsaWNrcysrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBudW1DbGlja3Mg
PSAxOworCisgICAgICAgIHJlc3VsdC5jbGlja0NvdW50ID0gbnVtQ2xpY2tzOworICAgICAgICBl
dmVudFdpbmRvdyA9IGV2ZW50LT53aW5kb3c7CisgICAgICAgIGxhc3RMZWZ0Q2xpY2tUaW1lID0g
ZXZlbnQtPnRpbWU7CisgICAgfQorCiAgICAgcmVzdWx0LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6
OkJ1dHRvbk5vbmU7CiAgICAgaWYgKGV2ZW50LT5idXR0b24gPT0gMSkKICAgICAgICAgcmVzdWx0
LmJ1dHRvbiA9IFdlYk1vdXNlRXZlbnQ6OkJ1dHRvbkxlZnQ7Cg==
</data>
<flag name="review"
          id="25523"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43817</attachid>
            <date>2009-11-24 15:22:22 -0800</date>
            <delta_ts>2009-11-24 15:46:31 -0800</delta_ts>
            <desc>more style</desc>
            <filename>dbl</filename>
            <type>text/plain</type>
            <size>2882</size>
            <attacher name="Evan Stade">estade</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNTEzNDMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTEtMjQgIEV2YW4g
U3RhZGUgIDxlc3RhZGVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIExpbnV4IENocm9taXVtIHNlbmRzIHRvbyBtYW55IGNsaWNr
IGV2ZW50cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MzE4NDEKKworICAgICAgICBNYW51YWxseSBjb3VudCBudW1iZXIgb2YgY2xpY2tzIGZvciBkb3Vi
bGUvdHJpcGxlIGNsaWNrIGV2ZW50cy4gVGhpcworICAgICAgICBtYWtlcyB1cyBtYXRjaCBGaXJl
Zm94IG9uIGh0dHA6Ly93d3cucXVpcmtzbW9kZS5vcmcvanMvZXZlbnRzX21vdXNlLmh0bWwKKyAg
ICAgICAgQ2hyb21pdW0gc2lkZSBvZiB0aGlzIHBhdGNoIGlzIGhlcmU6CisgICAgICAgIGh0dHA6
Ly9jb2RlcmV2aWV3LmNocm9taXVtLm9yZy80MzEwMzEvc2hvdworCisgICAgICAgICogc3JjL2d0
ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYklucHV0RXZl
bnRGYWN0b3J5Ojptb3VzZUV2ZW50KToKKwogMjAwOS0xMS0yNCAgQWRhbSBCYXJ0aCAgPGFiYXJ0
aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5k
ZXg6IFdlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5j
cHAJKHJldmlzaW9uIDUxMzQzKQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsvV2ViSW5wdXRF
dmVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCwxMCArMzgsMjMgQEAKIAogI2lu
Y2x1ZGUgPGdkay9nZGsuaD4KICNpbmNsdWRlIDxnZGsvZ2Rra2V5c3ltcy5oPgorI2luY2x1ZGUg
PGd0ay9ndGsuaD4KICNpbmNsdWRlIDxndGsvZ3RrdmVyc2lvbi5oPgogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIAorbmFtZXNwYWNlIHsKKworZ2ludCBnZXREb3VibGVDbGlja1RpbWUo
KQoreworICAgIHN0YXRpYyBHdGtTZXR0aW5ncyogc2V0dGluZ3MgPSBndGtfc2V0dGluZ3NfZ2V0
X2RlZmF1bHQoKTsKKyAgICBnaW50IGRvdWJsZUNsaWNrVGltZSA9IDI1MDsKKyAgICBnX29iamVj
dF9nZXQoR19PQkpFQ1Qoc2V0dGluZ3MpLCAiZ3RrLWRvdWJsZS1jbGljay10aW1lIiwgJmRvdWJs
ZUNsaWNrVGltZSwgMCk7CisgICAgcmV0dXJuIGRvdWJsZUNsaWNrVGltZTsKK30KKworfSAgLy8g
bmFtZXNwYWNlCisKIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgZG91YmxlIGdka0V2ZW50
VGltZVRvV2ViRXZlbnRUaW1lKGd1aW50MzIgdGltZSkKQEAgLTMyMSwyNCArMzM0LDM0IEBAIFdl
Yk1vdXNlRXZlbnQgV2ViSW5wdXRFdmVudEZhY3Rvcnk6Om1vdXMKICAgICByZXN1bHQuY2xpY2tD
b3VudCA9IDA7CiAKICAgICBzd2l0Y2ggKGV2ZW50LT50eXBlKSB7Ci0gICAgY2FzZSBHREtfM0JV
VFRPTl9QUkVTUzoKLSAgICAgICAgKytyZXN1bHQuY2xpY2tDb3VudDsKLSAgICAgICAgLy8gZmFs
bHRocm91Z2gKLSAgICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgotICAgICAgICArK3Jlc3VsdC5j
bGlja0NvdW50OwotICAgICAgICAvLyBmYWxsdGhyb3VnaAogICAgIGNhc2UgR0RLX0JVVFRPTl9Q
UkVTUzoKICAgICAgICAgcmVzdWx0LnR5cGUgPSBXZWJJbnB1dEV2ZW50OjpNb3VzZURvd247Ci0g
ICAgICAgICsrcmVzdWx0LmNsaWNrQ291bnQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgR0RL
X0JVVFRPTl9SRUxFQVNFOgogICAgICAgICByZXN1bHQudHlwZSA9IFdlYklucHV0RXZlbnQ6Ok1v
dXNlVXA7CiAgICAgICAgIGJyZWFrOwotCisgICAgY2FzZSBHREtfM0JVVFRPTl9QUkVTUzoKKyAg
ICBjYXNlIEdES18yQlVUVE9OX1BSRVNTOgogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIH07CiAKKyAgICBpZiAoR0RLX0JVVFRPTl9QUkVTUyA9PSBldmVu
dC0+dHlwZSkgeworICAgICAgICBzdGF0aWMgaW50IG51bUNsaWNrcyA9IDA7CisgICAgICAgIHN0
YXRpYyBHZGtXaW5kb3cqIGV2ZW50V2luZG93ID0gMDsKKyAgICAgICAgc3RhdGljIGdpbnQgbGFz
dExlZnRDbGlja1RpbWUgPSAwOworCisgICAgICAgIGdpbnQgdGltZV9kaWZmID0gZXZlbnQtPnRp
bWUgLSBsYXN0TGVmdENsaWNrVGltZTsKKyAgICAgICAgaWYgKGV2ZW50V2luZG93ID09IGV2ZW50
LT53aW5kb3cgJiYgdGltZV9kaWZmIDwgZ2V0RG91YmxlQ2xpY2tUaW1lKCkpCisgICAgICAgICAg
ICBudW1DbGlja3MrKzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbnVtQ2xpY2tzID0gMTsK
KworICAgICAgICByZXN1bHQuY2xpY2tDb3VudCA9IG51bUNsaWNrczsKKyAgICAgICAgZXZlbnRX
aW5kb3cgPSBldmVudC0+d2luZG93OworICAgICAgICBsYXN0TGVmdENsaWNrVGltZSA9IGV2ZW50
LT50aW1lOworICAgIH0KKwogICAgIHJlc3VsdC5idXR0b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0
b25Ob25lOwogICAgIGlmIChldmVudC0+YnV0dG9uID09IDEpCiAgICAgICAgIHJlc3VsdC5idXR0
b24gPSBXZWJNb3VzZUV2ZW50OjpCdXR0b25MZWZ0Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>