<?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>39053</bug_id>
          
          <creation_ts>2010-05-13 03:17:05 -0700</creation_ts>
          <short_desc>[GStreamer] cache media duration in READY instead of PLAYING</short_desc>
          <delta_ts>2010-09-08 08:58:05 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>225218</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-05-13 03:17:05 -0700</bug_when>
    <thetext>In most cases the media duration is already available when the pipeline is in GST_STATE_READY. However the current code only caches it when the pipeline reaches GST_STATE_PLAYING. We should cache it in READY to avoid some duration queries.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225221</commentid>
    <comment_count>1</comment_count>
      <attachid>55958</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-05-13 03:24:03 -0700</bug_when>
    <thetext>Created attachment 55958
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228256</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-05-20 01:14:42 -0700</bug_when>
    <thetext>I&apos;m not enough of a media expert to know.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228384</commentid>
    <comment_count>3</comment_count>
      <attachid>55958</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-05-20 08:21:12 -0700</bug_when>
    <thetext>Comment on attachment 55958
proposed patch

&gt;  
&gt; +        // Cache the media duration if it&apos;s known when the pipeline is
&gt; +        // ready for playback.
&gt; +        if (state &gt;= GST_STATE_READY &amp;&amp; !m_mediaDuration) {
&gt; +            float newDuration = duration();
&gt; +            m_mediaDurationKnown = !isinf(newDuration);
&gt; +            if (m_mediaDurationKnown)
&gt; +                m_mediaDuration = newDuration;
&gt; +        }
&gt; +

I don&apos;t think this, or the old code actually, will do what you want because duration() always returns inf until m_mediaDurationKnown:

    // Media duration query failed already, don&apos;t attempt new useless queries.
    if (!m_mediaDurationKnown)
        return numeric_limits&lt;float&gt;::infinity();

It looks like it will work if you call durationChanged() instead. This will also inform HTMLMediaElement of the duration change, which this change also doesn&apos;t do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228391</commentid>
    <comment_count>4</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-05-20 08:33:33 -0700</bug_when>
    <thetext>
Hum I don&apos;t agree ;)

This really caches the duration. m_mediaDurationKnown is initially true and m_mediaDuration is 0. So until m_mediaDurationKnown is set, a real duration query will be performed on the pipeline.

It would be much more simpler to have that logic in duration() itself but it&apos;s a const method, m_mediaDurationKnown can&apos;t be set inside :/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228400</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-05-20 08:58:40 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Hum I don&apos;t agree ;)
&gt; 
&gt;  m_mediaDurationKnown is initially true

Ah, I see this now. &quot;m_mediaDurationKnown&quot; is probably not the best name for the flag because it is set when you *don&apos;t* know the duration.

In any case durationChanged() has similar logic plus it informs HTMLMediaElement when that the duration has changed. Is there any reason to not call it instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228405</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-05-20 09:12:58 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Hum I don&apos;t agree ;)
&gt; &gt; 
&gt; &gt;  m_mediaDurationKnown is initially true
&gt; 
&gt; Ah, I see this now. &quot;m_mediaDurationKnown&quot; is probably not the best name for the flag because it is set when you *don&apos;t* know the duration.
&gt; 

Right, I guess I should rename it, it is confusing indeed.

&gt; In any case durationChanged() has similar logic plus it informs HTMLMediaElement when that the duration has changed. Is there any reason to not call it instead?

Yes. I did that at first, but IIRC durationchanged was emitted without the duration having actually changed. I will try to do some more tests with that approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273861</commentid>
    <comment_count>7</comment_count>
      <attachid>66480</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-03 04:14:07 -0700</bug_when>
    <thetext>Created attachment 66480
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273862</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-09-03 04:20:39 -0700</bug_when>
    <thetext>Attachment 66480 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;]&quot; exit_code: 1
WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:111:  Missing spaces around =  [whitespace/operators] [4]
Total errors found: 1 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>273933</commentid>
    <comment_count>9</comment_count>
      <attachid>66480</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-09-03 07:25:30 -0700</bug_when>
    <thetext>Comment on attachment 66480
proposed patch

+        // Attempt to cache the duration, without emitting the
+        // durationchange event because it most likely was first sent
+        // by the media element when the ready state reached HAVE_METADATA.
+        durationChanged(false);
+

...

-    m_player-&gt;durationChanged();
+    if ((m_mediaDuration != previousDuration) &amp;&amp; emitEvent)
+        m_player-&gt;durationChanged();
I don&apos;t understand why you would *ever* want to suppress the event. If you don&apos;t send the event when the duration changes, you won&apos;t ever send it unless the duration changes again. 

Why not always send it when m_mediaDuration != previousDuration?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>274497</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-05 23:21:38 -0700</bug_when>
    <thetext>(In reply to comment #9)

&gt; I don&apos;t understand why you would *ever* want to suppress the event. If you don&apos;t send the event when the duration changes, you won&apos;t ever send it unless the duration changes again. 
&gt; 
&gt; Why not always send it when m_mediaDuration != previousDuration?

It is already sent once by the HTMLMediaElement when it reaches HAVE_METADATA. Without using that flag in durationChanged() I can see double emission of the event in 5 media tests at least.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275048</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-09-07 08:22:45 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; 
&gt; &gt; I don&apos;t understand why you would *ever* want to suppress the event. If you don&apos;t send the event when the duration changes, you won&apos;t ever send it unless the duration changes again. 
&gt; &gt; 
&gt; &gt; Why not always send it when m_mediaDuration != previousDuration?
&gt; 
&gt; It is already sent once by the HTMLMediaElement when it reaches HAVE_METADATA. Without using 
&gt; that flag in durationChanged() I can see double emission of the event in 5 media tests at least.

Those darned tests :-). 

The point I was trying to make is that the existing logic makes it possible to miss sending a durationchange event if the reported duration ever changes unexpectedly. For example, the duration of a variable rate mp3 file is only known after looking at every packet so some media engines estimate the duration after looking at a portion of the file and refine the estimate as more data is examined. Even if GStreamer doesn&apos;t do this now, relying on the current behavior seems risky

At the very least your comment, &quot;... because it most likely was first sent by the media element ...&quot;, is misleading if you mean it always happens.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275716</commentid>
    <comment_count>12</comment_count>
      <attachid>66865</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-08 03:31:30 -0700</bug_when>
    <thetext>Created attachment 66865
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275821</commentid>
    <comment_count>13</comment_count>
      <attachid>66865</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-09-08 07:18:18 -0700</bug_when>
    <thetext>Comment on attachment 66865
proposed patch

Nice simplification!

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>275866</commentid>
    <comment_count>14</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2010-09-08 08:58:05 -0700</bug_when>
    <thetext>Committed r66987: &lt;http://trac.webkit.org/changeset/66987&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55958</attachid>
            <date>2010-05-13 03:24:03 -0700</date>
            <delta_ts>2010-09-03 04:14:07 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>2703</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSAxN2YzZGNlYjg5OTQzNTJhZTQxOWYxMGFmN2Y3Mzg3NGM1NTdlMWRhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBUaHUsIDEzIE1heSAyMDEwIDEyOjIzOjMyICswMjAwClN1YmplY3Q6IFtQQVRDSF0g
cHJvcG9zZWQgcGF0Y2gKCi0tLQogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAgIDEzICsrKysrKysrKysrKysKIC4uLi9nc3RyZWFtZXIvTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcCAgICAgIHwgICAxNiArKysrKysrKystLS0tLS0tCiAy
IGZpbGVzIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDcgZGVsZXRpb25zKC0pCgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzNWRiMjU1
Li4xN2FkMjFlIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE2IEBACisyMDEwLTA1LTEzICBQaGlsaXBwZSBOb3JtYW5kICA8
cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBbR1N0cmVhbWVyXSBjYWNoZSBtZWRpYSBkdXJhdGlvbiBpbiBSRUFEWSBp
bnN0ZWFkIG9mIFBMQVlJTkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTM5MDUzCisKKyAgICAgICAgQ2FjaGluZyBtZWRpYSBkdXJhdGlvbiBlYXJsaWVy
IGF2b2lkcyBzb21lIGV4dHJhLXVubmVlZGVkIGR1cmF0aW9uCisgICAgICAgIHF1ZXJpZXMgd2hp
bGUgdGhlIHBpcGVsaW5lIGlzIGdvaW5nIGZyb20gUkVBRFkgdG8gUExBWUlORy4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1
cGRhdGVTdGF0ZXMpOgorCiAyMDEwLTA1LTEwICB5YWVsIGFoYXJvbiAgPHlhZWwuYWhhcm9uQG5v
a2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdT
dHJlYW1lci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBs
YXllclByaXZhdGVHU3RyZWFtZXIuY3BwCmluZGV4IDhmNmM5ZTAuLjgyMWRiYmMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0
ZUdTdHJlYW1lci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmNwcApAQCAtODU3LDYgKzg1NywxNSBAQCB2b2lk
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6dXBkYXRlU3RhdGVzKCkKICAgICAgICAgICAg
IG1fbmV0d29ya1N0YXRlID0gTWVkaWFQbGF5ZXI6OkxvYWRpbmc7CiAgICAgICAgIH0KIAorICAg
ICAgICAvLyBDYWNoZSB0aGUgbWVkaWEgZHVyYXRpb24gaWYgaXQncyBrbm93biB3aGVuIHRoZSBw
aXBlbGluZSBpcworICAgICAgICAvLyByZWFkeSBmb3IgcGxheWJhY2suCisgICAgICAgIGlmIChz
dGF0ZSA+PSBHU1RfU1RBVEVfUkVBRFkgJiYgIW1fbWVkaWFEdXJhdGlvbikgeworICAgICAgICAg
ICAgZmxvYXQgbmV3RHVyYXRpb24gPSBkdXJhdGlvbigpOworICAgICAgICAgICAgbV9tZWRpYUR1
cmF0aW9uS25vd24gPSAhaXNpbmYobmV3RHVyYXRpb24pOworICAgICAgICAgICAgaWYgKG1fbWVk
aWFEdXJhdGlvbktub3duKQorICAgICAgICAgICAgICAgIG1fbWVkaWFEdXJhdGlvbiA9IG5ld0R1
cmF0aW9uOworICAgICAgICB9CisKICAgICAgICAgaWYgKG1fYnVmZmVyaW5nICYmIHN0YXRlICE9
IEdTVF9TVEFURV9SRUFEWSkgewogICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5
ZXI6OkhhdmVDdXJyZW50RGF0YTsKICAgICAgICAgICAgIG1fbmV0d29ya1N0YXRlID0gTWVkaWFQ
bGF5ZXI6OkxvYWRpbmc7CkBAIC04ODQsMTMgKzg5Myw2IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0g
TWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwogICAgICAgICAgICAgbV9wYXVzZWQgPSBmYWxz
ZTsKIAotICAgICAgICAgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pIHsKLSAgICAgICAgICAgICAg
ICBmbG9hdCBuZXdEdXJhdGlvbiA9IGR1cmF0aW9uKCk7Ci0gICAgICAgICAgICAgICAgbV9tZWRp
YUR1cmF0aW9uS25vd24gPSAhaXNpbmYobmV3RHVyYXRpb24pOwotICAgICAgICAgICAgICAgIGlm
IChtX21lZGlhRHVyYXRpb25Lbm93bikKLSAgICAgICAgICAgICAgICAgICAgbV9tZWRpYUR1cmF0
aW9uID0gbmV3RHVyYXRpb247Ci0gICAgICAgICAgICB9Ci0KICAgICAgICAgICAgIGlmIChtX2J1
ZmZlcmluZykgewogICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9IE1lZGlhUGxheWVyOjpI
YXZlQ3VycmVudERhdGE7CiAgICAgICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBs
YXllcjo6TG9hZGluZzsKLS0gCjEuNy4x
</data>
<flag name="review"
          id="40280"
          type_id="1"
          status="-"
          setter="eric.carlson"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66480</attachid>
            <date>2010-09-03 04:14:07 -0700</date>
            <delta_ts>2010-09-08 03:31:30 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>4231</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA1MmZlNTMzNGQyYjU5MTk0NTkwNDNiMTkxM2E2ZGVlNTc5ODE5OWFlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBGcmksIDMgU2VwIDIwMTAgMTM6MDk6NDUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBw
cm9wb3NlZCBwYXRjaAoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTYgKysrKysrKysrKysrKysrKwogLi4uL2dzdHJlYW1lci9NZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwICAgICAgfCAgIDE5ICsrKysrKysrKystLS0tLS0t
LS0KIC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggICAgICAgIHwg
ICAgMiArLQogMyBmaWxlcyBjaGFuZ2VkLCAyNyBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMo
LSkKCmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDljMjMyYmEuLjRkMmI4YmIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDktMDMgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHU3RyZWFtZXJdIGNhY2hlIG1lZGlhIGR1cmF0aW9u
IGluIFJFQURZIGluc3RlYWQgb2YgUExBWUlORworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzkwNTMKKworICAgICAgICBJbXByb3ZlZCB0aGUgZHVyYXRp
b25DaGFuZ2VkIG1ldGhvZCB0byBlbWl0IHRoZSBldmVudCBvbmx5IGlmIHRoZQorICAgICAgICBk
dXJhdGlvbiBjaGFuZ2VkLiBBbHNvIHVzZSB0aGlzIG5ldyBtZXRob2QgZnJvbSB1cGRhdGVTdGF0
ZXMoKSB0bworICAgICAgICBlbnN1cmUgdGhlIGR1cmF0aW9uIGlzIGNhY2hlZCBiZWZvcmUgdGhl
IHBpcGVsaW5lIHJlYWNoZXMgUExBWUlORy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZh
dGVHU3RyZWFtZXIuaDoKKwogMjAxMC0wOS0wMiAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBh
bnkxMDAubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAKaW5kZXggNTYyOGViMy4uMjRiM2YzNCAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2
YXRlR1N0cmVhbWVyLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwCkBAIC04NTMsNiArODUzLDExIEBAIHZv
aWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAg
ICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKICAgICAgICAgfQogCisg
ICAgICAgIC8vIEF0dGVtcHQgdG8gY2FjaGUgdGhlIGR1cmF0aW9uLCB3aXRob3V0IGVtaXR0aW5n
IHRoZQorICAgICAgICAvLyBkdXJhdGlvbmNoYW5nZSBldmVudCBiZWNhdXNlIGl0IG1vc3QgbGlr
ZWx5IHdhcyBmaXJzdCBzZW50CisgICAgICAgIC8vIGJ5IHRoZSBtZWRpYSBlbGVtZW50IHdoZW4g
dGhlIHJlYWR5IHN0YXRlIHJlYWNoZWQgSEFWRV9NRVRBREFUQS4KKyAgICAgICAgZHVyYXRpb25D
aGFuZ2VkKGZhbHNlKTsKKwogICAgICAgICBpZiAobV9idWZmZXJpbmcgJiYgc3RhdGUgIT0gR1NU
X1NUQVRFX1JFQURZKSB7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZUN1cnJlbnREYXRhOwogICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXll
cjo6TG9hZGluZzsKQEAgLTg4MCwxMyArODg1LDYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVH
U3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRp
YVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CiAgICAgICAgICAgICBtX3BhdXNlZCA9IGZhbHNlOwog
Ci0gICAgICAgICAgICBpZiAoIW1fbWVkaWFEdXJhdGlvbikgewotICAgICAgICAgICAgICAgIGZs
b2F0IG5ld0R1cmF0aW9uID0gZHVyYXRpb24oKTsKLSAgICAgICAgICAgICAgICBtX21lZGlhRHVy
YXRpb25Lbm93biA9ICFpc2luZihuZXdEdXJhdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKG1f
bWVkaWFEdXJhdGlvbktub3duKQotICAgICAgICAgICAgICAgICAgICBtX21lZGlhRHVyYXRpb24g
PSBuZXdEdXJhdGlvbjsKLSAgICAgICAgICAgIH0KLQogICAgICAgICAgICAgaWYgKG1fYnVmZmVy
aW5nKSB7CiAgICAgICAgICAgICAgICAgbV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVD
dXJyZW50RGF0YTsKICAgICAgICAgICAgICAgICBtX25ldHdvcmtTdGF0ZSA9IE1lZGlhUGxheWVy
OjpMb2FkaW5nOwpAQCAtMTExOSw4ICsxMTE3LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRl
R1N0cmVhbWVyOjpkaWRFbmQoKQogICAgIHRpbWVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQ
bGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQoKQordm9pZCBNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OmR1cmF0aW9uQ2hhbmdlZChib29sIGVtaXRFdmVudCkKIHsKKyAg
ICBmbG9hdCBwcmV2aW91c0R1cmF0aW9uID0gbV9tZWRpYUR1cmF0aW9uOworCiAgICAgLy8gUmVz
ZXQgY2FjaGVkIG1lZGlhIGR1cmF0aW9uCiAgICAgbV9tZWRpYUR1cmF0aW9uID0gMDsKIApAQCAt
MTE0NCw3ICsxMTQ0LDggQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmR1cmF0
aW9uQ2hhbmdlZCgpCiAgICAgaWYgKCFpc2luZihuZXdEdXJhdGlvbikpCiAgICAgICAgIG1fbWVk
aWFEdXJhdGlvbiA9IG5ld0R1cmF0aW9uOwogCi0gICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdl
ZCgpOworICAgIGlmICgobV9tZWRpYUR1cmF0aW9uICE9IHByZXZpb3VzRHVyYXRpb24pICYmIGVt
aXRFdmVudCkKKyAgICAgICAgbV9wbGF5ZXItPmR1cmF0aW9uQ2hhbmdlZCgpOwogfQogCiBib29s
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6c3VwcG9ydHNNdXRpbmcoKSBjb25zdApkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQ
cml2YXRlR1N0cmVhbWVyLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaAppbmRleCBmMmY2ODRiLi45NjkzZDY5IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaApAQCAtMTA4LDcgKzEwOCw3IEBAIGNsYXNz
IE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lciA6IHB1YmxpYyBNZWRpYVBsYXllclByaXZhdGVJ
bnRlcmZhY2UgewogICAgICAgICAgICAgdm9pZCBzaXplQ2hhbmdlZCgpOwogICAgICAgICAgICAg
dm9pZCB0aW1lQ2hhbmdlZCgpOwogICAgICAgICAgICAgdm9pZCBkaWRFbmQoKTsKLSAgICAgICAg
ICAgIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCk7CisgICAgICAgICAgICB2b2lkIGR1cmF0aW9uQ2hh
bmdlZChib29sIGVtaXRFdmVudD10cnVlKTsKICAgICAgICAgICAgIHZvaWQgbG9hZGluZ0ZhaWxl
ZChNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlKTsKIAogICAgICAgICAgICAgdm9pZCByZXBhaW50
KCk7Ci0tIAoxLjcuMQ==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>66865</attachid>
            <date>2010-09-08 03:31:30 -0700</date>
            <delta_ts>2010-09-08 07:18:18 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>proposed-patch.patch</filename>
            <type>text/plain</type>
            <size>4401</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">RnJvbSA3Y2Q0YTdhNGNkZmM3MzE1ZTAxMmMxYjcyYmM5NWEwZGJhYjU2MzZiIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwZSBOb3JtYW5kIDxwbm9ybWFuZEBpZ2FsaWEuY29t
PgpEYXRlOiBGcmksIDMgU2VwIDIwMTAgMTM6MDk6NDUgKzAyMDAKU3ViamVjdDogW1BBVENIXSBw
cm9wb3NlZCBwYXRjaAoKLS0tCiBXZWJDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8ICAgMTYgKysrKysrKysrKysrCiAuLi4vZ3N0cmVhbWVyL01lZGlhUGxh
eWVyUHJpdmF0ZUdTdHJlYW1lci5jcHAgICAgICB8ICAgMjUgKysrKysrKysrKysrLS0tLS0tLS0K
IC4uLi9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyLmggICAgICAgIHwgICAg
MSArCiAzIGZpbGVzIGNoYW5nZWQsIDMyIGluc2VydGlvbnMoKyksIDEwIGRlbGV0aW9ucygtKQoK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZTU4YzJiYi4uOTNlM2E2MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAxMC0wOS0wOCAgUGhpbGlwcGUgTm9y
bWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgW0dTdHJlYW1lcl0gY2FjaGUgbWVkaWEgZHVyYXRpb24gaW4g
UkVBRFkgaW5zdGVhZCBvZiBQTEFZSU5HCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0zOTA1MworCisgICAgICAgIE5ldyBjYWNoZUR1cmF0aW9uIHByaXZh
dGUgbWV0aG9kIHVzZWQgdG8gaW4gdXBkYXRlU3RhdGVzKCkgYW5kCisgICAgICAgIGR1cmF0aW9u
Q2hhbmdlZCgpLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlh
UGxheWVyUHJpdmF0ZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXll
clByaXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhY2hlRHVyYXRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXIuaDoKKwogMjAxMC0wOS0wNyAgU2FtIFdlaW5pZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyLmNwcAppbmRleCBjOWY2M2Y1Li41MTNmM2MyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuY3Bw
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJp
dmF0ZUdTdHJlYW1lci5jcHAKQEAgLTgzOSw4ICs4MzksMTIgQEAgdm9pZCBNZWRpYVBsYXllclBy
aXZhdGVHU3RyZWFtZXI6OnVwZGF0ZVN0YXRlcygpCiAKICAgICAgICAgLy8gVHJ5IHRvIGZpZ3Vy
ZSBvdXQgcmVhZHkgYW5kIG5ldHdvcmsgc3RhdGVzLgogICAgICAgICBpZiAoc3RhdGUgPT0gR1NU
X1NUQVRFX1JFQURZKSB7Ci0gICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6
SGF2ZU5vdGhpbmc7CisgICAgICAgICAgICBtX3JlYWR5U3RhdGUgPSBNZWRpYVBsYXllcjo6SGF2
ZU1ldGFkYXRhOwogICAgICAgICAgICAgbV9uZXR3b3JrU3RhdGUgPSBNZWRpYVBsYXllcjo6RW1w
dHk7CisgICAgICAgICAgICAvLyBDYWNoZSB0aGUgZHVyYXRpb24gd2l0aG91dCBlbWl0aW5nIHRo
ZSBkdXJhdGlvbmNoYW5nZQorICAgICAgICAgICAgLy8gZXZlbnQgYmVjYXVzZSBpdCdzIHRha2Vu
IGNhcmUgb2YgYnkgdGhlIG1lZGlhIGVsZW1lbnQKKyAgICAgICAgICAgIC8vIGluIHRoaXMgcHJl
Y2lzZSBjYXNlLgorICAgICAgICAgICAgY2FjaGVEdXJhdGlvbigpOwogICAgICAgICB9IGVsc2Ug
aWYgKG1heFRpbWVMb2FkZWQoKSA9PSBkdXJhdGlvbigpKSB7CiAgICAgICAgICAgICBtX25ldHdv
cmtTdGF0ZSA9IE1lZGlhUGxheWVyOjpMb2FkZWQ7CiAgICAgICAgICAgICBtX3JlYWR5U3RhdGUg
PSBNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGE7CkBAIC04NzYsMTMgKzg4MCw2IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjp1cGRhdGVTdGF0ZXMoKQogICAgICAgICAgICAg
bV9yZWFkeVN0YXRlID0gTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhOwogICAgICAgICAgICAg
bV9wYXVzZWQgPSBmYWxzZTsKIAotICAgICAgICAgICAgaWYgKCFtX21lZGlhRHVyYXRpb24pIHsK
LSAgICAgICAgICAgICAgICBmbG9hdCBuZXdEdXJhdGlvbiA9IGR1cmF0aW9uKCk7Ci0gICAgICAg
ICAgICAgICAgbV9tZWRpYUR1cmF0aW9uS25vd24gPSAhaXNpbmYobmV3RHVyYXRpb24pOwotICAg
ICAgICAgICAgICAgIGlmIChtX21lZGlhRHVyYXRpb25Lbm93bikKLSAgICAgICAgICAgICAgICAg
ICAgbV9tZWRpYUR1cmF0aW9uID0gbmV3RHVyYXRpb247Ci0gICAgICAgICAgICB9Ci0KICAgICAg
ICAgICAgIGlmIChtX2J1ZmZlcmluZykgewogICAgICAgICAgICAgICAgIG1fcmVhZHlTdGF0ZSA9
IE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGE7CiAgICAgICAgICAgICAgICAgbV9uZXR3b3Jr
U3RhdGUgPSBNZWRpYVBsYXllcjo6TG9hZGluZzsKQEAgLTExMTUsNyArMTExMiw3IEBAIHZvaWQg
TWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkaWRFbmQoKQogICAgIHRpbWVDaGFuZ2VkKCk7
CiB9CiAKLXZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQo
KQordm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXI6OmNhY2hlRHVyYXRpb24oKQogewog
ICAgIC8vIFJlc2V0IGNhY2hlZCBtZWRpYSBkdXJhdGlvbgogICAgIG1fbWVkaWFEdXJhdGlvbiA9
IDA7CkBAIC0xMTM5LDggKzExMzYsMTYgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVHU3RyZWFt
ZXI6OmR1cmF0aW9uQ2hhbmdlZCgpCiAKICAgICBpZiAoIWlzaW5mKG5ld0R1cmF0aW9uKSkKICAg
ICAgICAgbV9tZWRpYUR1cmF0aW9uID0gbmV3RHVyYXRpb247Cit9CiAKLSAgICBtX3BsYXllci0+
ZHVyYXRpb25DaGFuZ2VkKCk7Cit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcjo6ZHVy
YXRpb25DaGFuZ2VkKCkKK3sKKyAgICBmbG9hdCBwcmV2aW91c0R1cmF0aW9uID0gbV9tZWRpYUR1
cmF0aW9uOworCisgICAgY2FjaGVEdXJhdGlvbigpOworCisgICAgaWYgKG1fbWVkaWFEdXJhdGlv
biAhPSBwcmV2aW91c0R1cmF0aW9uKQorICAgICAgICBtX3BsYXllci0+ZHVyYXRpb25DaGFuZ2Vk
KCk7CiB9CiAKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyOjpzdXBwb3J0c011dGlu
ZygpIGNvbnN0CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVBsYXllclByaXZhdGVHU3RyZWFtZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCmluZGV4IGNjMWE3MzEu
LjZkMTM5MmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lci5oCkBAIC0xMzEsNiAr
MTMxLDcgQEAgY2xhc3MgTWVkaWFQbGF5ZXJQcml2YXRlR1N0cmVhbWVyIDogcHVibGljIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSB7CiAgICAgICAgICAgICBzdGF0aWMgTWVkaWFQbGF5ZXI6
OlN1cHBvcnRzVHlwZSBzdXBwb3J0c1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGNvZGVjcyk7CiAgICAgICAgICAgICBzdGF0aWMgYm9vbCBpc0F2YWlsYWJsZSgpOwogCisg
ICAgICAgICAgICB2b2lkIGNhY2hlRHVyYXRpb24oKTsKICAgICAgICAgICAgIHZvaWQgdXBkYXRl
U3RhdGVzKCk7CiAgICAgICAgICAgICB2b2lkIGNhbmNlbFNlZWsoKTsKICAgICAgICAgICAgIHZv
aWQgZW5kUG9pbnRUaW1lckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZUdTdHJlYW1lcj4q
KTsKLS0gCjEuNy4x
</data>
<flag name="review"
          id="55993"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>