<?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>99492</bug_id>
          
          <creation_ts>2012-10-16 12:55:26 -0700</creation_ts>
          <short_desc>[WK2][GTK] Favicons are incorrectly released before receiving the actual data</short_desc>
          <delta_ts>2012-10-17 04:54: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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Mario Sanchez Prada">mario</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>743445</commentid>
    <comment_count>0</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-16 12:55:26 -0700</bug_when>
    <thetext>Today I found an issue with the following piece of code in WebKitFaviconDatabase.cpp:

  static cairo_surface_t* getIconSurfaceSynchronously(WebKitFaviconDatabase* database,
                                                      const String&amp; pageURL, GError** error)
  {
      ASSERT(isMainThread());

      database-&gt;priv-&gt;iconDatabase-&gt;retainIconForPageURL(pageURL);

      // The exact size we pass is irrelevant to the iconDatabase code.
      // We must pass something greater than 0x0 to get an icon.

      WebCore::Image* iconImage = database-&gt;priv-&gt;iconDatabase-&gt;imageForPageURL(pageURL, WebCore::IntSize(1, 1));
      if (!iconImage) {
          g_set_error(error, WEBKIT_FAVICON_DATABASE_ERROR, WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_UNKNOWN, _(&quot;Unknown favicon for page %s&quot;), pageURL.utf8().data());
          database-&gt;priv-&gt;iconDatabase-&gt;releaseIconForPageURL(pageURL);
          return 0;
      }
 
      WebCore::NativeImagePtr icon = iconImage-&gt;nativeImageForCurrentFrame();
      if (!icon) {
          g_set_error(error, WEBKIT_FAVICON_DATABASE_ERROR, WEBKIT_FAVICON_DATABASE_ERROR_FAVICON_NOT_FOUND, _(&quot;Page %s does not have a favicon&quot;), pageURL.utf8().data());
          database-&gt;priv-&gt;iconDatabase-&gt;releaseIconForPageURL(pageURL);
          return 0;
      }
  }

The problem with this is that sometimes this method is called from places (webkit_favicon_database_get_favicon()) where getting a NULL value out of this function does not necessarily mean that there&apos;s no icon for the page URL, but simply that is not a known one yet and that we might have to wait for the iconDataReady callback to be called to be really sure whether there&apos;s a valid icon or not.

The issue with the code above is that it always calls to retainIconForPageURL() before imageForPageURL *but* then it directly calls to releaseIconForPageURL() once a valid image is not there. And this is not correct since it could be too early to make such a decision, since we must have to wait for the iconDataReady callback to be called before being completely sure about this.

So, we should not release the icon until we are completely sure that there is not a known icon for the given page URL, that is, in the webkit_favicon_database_get_favicon_finish() method.

I found this issue while testing the patches I have for Epiphany [1], following these steps:

  1. Remove the favicon database file on disk and open Ephy.
  2. Load a web with a favicon (e.g. www.igalia.com) and save it as a bookmark (Ctrl+D)
  3. Close the only tab (causing Ephy to close), and check that the icon and its data is stored on disk, by inspecting the sqlite DB and the IconData table (should be an entry with NON NULL data in there).
  4. Open Ephy again (should show you the overview), but do *NOT* load any web yet.
  5. Navigate through the &quot;gear&quot; menu until &quot;Bookmarks&quot;, causing a submenu to be created on-the-fly and shown with the &quot;Igalia&quot; entry we saved in (2).

The expected outcome at this point is that the &quot;Igalia&quot; entry should show the favicon (saved to the sqlite DB in the previous session). However, no favicon is shown.

After some investigation, I found out that the data for the icon in DB was there all the time until that the submenu was tried to be created in (5), which called webkit_favicon_database_get_favicon() to try to retrieve that icon.

And the problem seemed to be that this *first* call to webkit_favicon_database_get_favicon() after restarting ephy was caused releaseIconForPageURL() to be called in getIconSurfaceSynchronously() too early, before waiting for the iconDataReady callback to be executed (as it should). Then, as this was the first time the database was actually used, the icon&apos;s data would be removed from the DB right away while performing the initial synchronization process in the IconDatabase, causing that no icon would finally be available when the iconDataReady callback was finally called.

I&apos;ve a patch in a local branch fixing this issue. Will upload it soon


[1] https://bugzilla.gnome.org/show_bug.cgi?id=679370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743451</commentid>
    <comment_count>1</comment_count>
      <attachid>169005</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-16 13:04:03 -0700</bug_when>
    <thetext>Created attachment 169005
Patch proposal

Here&apos;s a patch that makes favicons work fine in Ephy (while still making the unit tests pass)

Please review, thanks</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743454</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-16 13:05:21 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743936</commentid>
    <comment_count>3</comment_count>
      <attachid>169005</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-17 00:16:21 -0700</bug_when>
    <thetext>Comment on attachment 169005
Patch proposal

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

I like the idea, thanks for the detailed analysis, but there are several problems with the patch. 

 - You are assuming that in finish() is always called after data-ready, which is not always true. So you might end up releasing an icon never retained.
 - In general retain/release is not balanced.
 - You can&apos;t be sure that finish will be called, in GIO async pattern call an async method with a NULL GASyncREadyCallback is perfectly valid, although unlikely in this case.

The first time getIconSurfaceSynchronously() is called is in webkit_favicon_database_get_favicon(), if it fails, finish is called in an idle and the icon is released. Then icon-data ready is called and pending icon requests are processed, if it fails finish is called directly and the icon is released. The only case that makes a difference is the first one, when we ask for the first time, instead of releasing the icon immediately we do it in an idle. So, I think we could try to do that always, in getIconSurfaceSynchronously() schedule an idle to release the icon or keep a list of icons to release and figure out the best moment to release them.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:-118
&gt; -    GOwnPtr&lt;GError&gt; error;

I wonder why I did this.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:165
&gt; -                g_propagate_error(&amp;data-&gt;error.outPtr(), error.release());
&gt; +                g_simple_async_result_take_error(result, error.release());

Makes a lot of sense. If you move this to another patch I&apos;ll r+ it, since this has nothing to do with the discussion on this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743998</commentid>
    <comment_count>4</comment_count>
      <attachid>169117</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-17 01:25:41 -0700</bug_when>
    <thetext>Created attachment 169117
Patch proposal

(In reply to comment #3)
&gt; (From update of attachment 169005 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169005&amp;action=review
&gt; 
&gt; I like the idea, thanks for the detailed analysis, but there are several problems with the patch. 
&gt; 
&gt;  - You are assuming that in finish() is always called after data-ready, which is not always true.
&gt;    So you might end up releasing an icon never retained.
&gt;  - In general retain/release is not balanced.
&gt;  - You can&apos;t be sure that finish will be called, in GIO async pattern call an async method with
&gt;    a NULL GASyncREadyCallback is perfectly valid, although unlikely in this case.

Ok. I see. Thanks for the detailed clarifications.

&gt; The first time getIconSurfaceSynchronously() is called is in webkit_favicon_database_get_favicon(),
&gt; if it fails, finish is called in an idle and the icon is released. Then icon-data ready is called
&gt; and pending icon requests are processed, if it fails finish is called directly and the icon is
&gt; released. The only case that makes a difference is the first one, when we ask for the first time,
&gt; instead of releasing the icon immediately we do it in an idle. So, I think we could try to do that
&gt; always, in getIconSurfaceSynchronously() schedule an idle to release the icon or keep a list of
&gt; icons to release and figure out the best moment to release them.

I&apos;m now attaching a new patch implementing this idea, which works fine with ephy as well and it&apos;s probably a better approach, as you mentioned.

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:-118
&gt; &gt; -    GOwnPtr&lt;GError&gt; error;
&gt; 
&gt; I wonder why I did this.

Probably I did :P

&gt; &gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:165
&gt; &gt; -                g_propagate_error(&amp;data-&gt;error.outPtr(), error.release());
&gt; &gt; +                g_simple_async_result_take_error(result, error.release());
&gt; 
&gt; Makes a lot of sense. If you move this to another patch I&apos;ll r+ it, since this has nothing to do with the discussion on this bug.

Ok. Will file a separate bug for this now. Stay tuned</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744059</commentid>
    <comment_count>5</comment_count>
      <attachid>169117</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-17 02:34:32 -0700</bug_when>
    <thetext>Comment on attachment 169117
Patch proposal

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

I&apos;m still worried that the idle thing works in some cases only, because in the end you don&apos;t know when the idle will be called. So, since what we want is to release the icons when we are sure, and after finish, I think we could schedule the idle when the data struct finishes or even do it in the async data struct destructor directly. We retain the icon in get_favicon() right before calling getIconSurfaceSynchronously(). if we don&apos;t have an icon we mark the icon to be released (with a bool parameter in the async data struct, for example). If we eventually get an icon in processPendingIconRequests we set the flag to false. In the async data destrcutor we check the flag and release the icon (or schedule a release in an idle).

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:131
&gt; +static void releaseIconOnIdle(WebKitFaviconDatabase* database, const String&amp; pageURL)

releaseIconForPageURLInIdle() ?

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:133
&gt; +    GetFaviconSurfaceAsyncData* data = createGetFaviconSurfaceAsyncData();

I&apos;m not sure using the same data struct is a good idea, I would define a new one.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitFaviconDatabase.cpp:136
&gt; +    g_idle_add(releaseIconOnIdleSourceFunc, data);

You can use g_idle_add_full and pass the destroy func as GDestroyNotify, so that you can be sure the data will be destroyed even if the source is destroyed before the idle func is called.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744151</commentid>
    <comment_count>6</comment_count>
      <attachid>169155</attachid>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-17 04:45:10 -0700</bug_when>
    <thetext>Created attachment 169155
Patch proposal

(In reply to comment #5)
&gt; (From update of attachment 169117 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=169117&amp;action=review
&gt; 
&gt; I&apos;m still worried that the idle thing works in some cases only, because in the end
&gt; you don&apos;t know when the idle will be called. So, since what we want is to release
&gt; the icons when we are sure, and after finish, I think we could schedule the idle
&gt; when the data struct finishes or even do it in the async data struct destructor
&gt; directly. We retain the icon in get_favicon() right before calling
&gt; getIconSurfaceSynchronously(). if we don&apos;t have an icon we mark the icon to be
&gt; released (with a bool parameter in the async data struct, for example). If we
&gt; eventually get an icon in processPendingIconRequests we set the flag to false. In
&gt; the async data destrcutor we check the flag and release the icon (or schedule a
&gt; release in an idle).

Ok. I&apos;m attaching now a new patch implementing this (third) new approach :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744160</commentid>
    <comment_count>7</comment_count>
      <attachid>169155</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2012-10-17 04:50:48 -0700</bug_when>
    <thetext>Comment on attachment 169155
Patch proposal

Excellent, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>744161</commentid>
    <comment_count>8</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2012-10-17 04:54:22 -0700</bug_when>
    <thetext>Committed r131588: &lt;http://trac.webkit.org/changeset/131588&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169005</attachid>
            <date>2012-10-16 13:04:03 -0700</date>
            <delta_ts>2012-10-17 01:25:41 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-10-16-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>6148</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA2NjMxNGFhOTAzYWIwY2EwYmIyOGU0MzQ3YzVkNmExNzE5MDkxODYyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBUdWUsIDE2IE9jdCAyMDEyIDIyOjAwOjQzICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0xMC0xNiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtXSzJdW0dUS10gRmF2aWNvbnMgYXJlIGluY29ycmVjdGx5IHJlbGVhc2VkIGJl
Zm9yZSByZWNlaXZpbmcgdGhlIGFjdHVhbCBkYXRhCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NDkyCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgoKICAgICAgICBEb24ndCByZWxlYXNlIHRoZSBpY29uIGZvciBhIHBhZ2UgVVJMIGlu
IHRoZSBmaXJzdCBzdGFnZSBvZiB0aGUKICAgICAgICBhc3luY2hyb25vdXMgY2FsbCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbigpIGJlZm9yZQogICAgICAgIHdhaXRpbmcgZm9y
IHRoZSBpY29uRGF0YVJlYWR5IGNhbGxiYWNrIHRvIGJlIGNhbGxlZCwgYW5kIGRvIGl0IGluCiAg
ICAgICAgd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKCkgaW5zdGVh
ZCwgb25jZSB3ZSBhcmUKICAgICAgICBjb21wbGV0ZWx5IHN1cmUgdGhhdCBpdCB3YXMgbm90IHBv
c3NpYmxlIHRvIGdldCBhIHZhbGlkIGljb24uCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDoKICAgICAgICAoR2V0RmF2aWNvblN1cmZhY2VBc3lu
Y0RhdGEpOiBSZW1vdmVkIHVubmVlZGVkIGZpZWxkLgogICAgICAgIChnZXRJY29uU3VyZmFjZVN5
bmNocm9ub3VzbHkpOiBEb24ndCByZWxlYXNlIHRoZSBpY29uIHlldCBpZiBhCiAgICAgICAgdmFs
aWQgaWNvbiB3YXMgbm90IGZvdW5kLiBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBpY29uRGF0YVJl
YWR5CiAgICAgICAgY2FsbGJhY2sgdG8gYmUgY2FsbGVkIGJlZm9yZSBtYWtpbmcgYW4gaW5mb3Jt
ZWQgZGVjaXNpb24uCiAgICAgICAgKHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JQYWdlVVJMKTogQXZv
aWQgdXNpbmcgZ19wcm9wYWdhdGVfZXJyb3IgYW5kCiAgICAgICAgdXNlIGdfc2ltcGxlX2FzeW5j
X3Jlc3VsdF90YWtlX2Vycm9yIGRpcmVjdGx5IGluc3RlYWQuCiAgICAgICAgKHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaCk6IFJlbGVhc2UgdGhlIGljb24gZm9yCiAg
ICAgICAgdGhlIHBhZ2UgVVJMIGhlcmUgaW4gY2FzZSBhbiBlcnJvciBoYXMgZmluYWxseSBoYXBw
ZW5lZC4KLS0tCiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IDIzICsrKysrKysrKysrKysrKysrKysrKysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwICAgIHwgMTYgKysrKysrKy0tLS0tLS0tCiAyIGZpbGVz
IGNoYW5nZWQsIDMwIGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4
IDM0MGUzOTkuLmY5YTJmZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNiBAQAorMjAxMi0xMC0x
NiAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+CisKKyAgICAgICAg
W1dLMl1bR1RLXSBGYXZpY29ucyBhcmUgaW5jb3JyZWN0bHkgcmVsZWFzZWQgYmVmb3JlIHJlY2Vp
dmluZyB0aGUgYWN0dWFsIGRhdGEKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk5NDkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgRG9uJ3QgcmVsZWFzZSB0aGUgaWNvbiBmb3IgYSBwYWdlIFVSTCBpbiB0aGUg
Zmlyc3Qgc3RhZ2Ugb2YgdGhlCisgICAgICAgIGFzeW5jaHJvbm91cyBjYWxsIHdlYmtpdF9mYXZp
Y29uX2RhdGFiYXNlX2dldF9mYXZpY29uKCkgYmVmb3JlCisgICAgICAgIHdhaXRpbmcgZm9yIHRo
ZSBpY29uRGF0YVJlYWR5IGNhbGxiYWNrIHRvIGJlIGNhbGxlZCwgYW5kIGRvIGl0IGluCisgICAg
ICAgIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaCgpIGluc3RlYWQs
IG9uY2Ugd2UgYXJlCisgICAgICAgIGNvbXBsZXRlbHkgc3VyZSB0aGF0IGl0IHdhcyBub3QgcG9z
c2libGUgdG8gZ2V0IGEgdmFsaWQgaWNvbi4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChHZXRGYXZpY29uU3VyZmFjZUFz
eW5jRGF0YSk6IFJlbW92ZWQgdW5uZWVkZWQgZmllbGQuCisgICAgICAgIChnZXRJY29uU3VyZmFj
ZVN5bmNocm9ub3VzbHkpOiBEb24ndCByZWxlYXNlIHRoZSBpY29uIHlldCBpZiBhCisgICAgICAg
IHZhbGlkIGljb24gd2FzIG5vdCBmb3VuZC4gV2UgbmVlZCB0byB3YWl0IGZvciB0aGUgaWNvbkRh
dGFSZWFkeQorICAgICAgICBjYWxsYmFjayB0byBiZSBjYWxsZWQgYmVmb3JlIG1ha2luZyBhbiBp
bmZvcm1lZCBkZWNpc2lvbi4KKyAgICAgICAgKHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JQYWdlVVJM
KTogQXZvaWQgdXNpbmcgZ19wcm9wYWdhdGVfZXJyb3IgYW5kCisgICAgICAgIHVzZSBnX3NpbXBs
ZV9hc3luY19yZXN1bHRfdGFrZV9lcnJvciBkaXJlY3RseSBpbnN0ZWFkLgorICAgICAgICAod2Vi
a2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb25fZmluaXNoKTogUmVsZWFzZSB0aGUgaWNv
biBmb3IKKyAgICAgICAgdGhlIHBhZ2UgVVJMIGhlcmUgaW4gY2FzZSBhbiBlcnJvciBoYXMgZmlu
YWxseSBoYXBwZW5lZC4KKwogMjAxMi0xMC0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBkb2Vzbid0IG5v
dGlmeSBvZiBmYXZpY29uIGNoYW5nZXMgZm9yIGtub3duIGZhdmljb25zIGJ1dCBuZXcgcGFnZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmlj
b25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwCmluZGV4IGM0YWRiZGMuLjYzNjVmNTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLmNwcApAQCAtMTE1LDcgKzExNSw2IEBAIHN0cnVjdCBHZXRGYXZpY29uU3VyZmFjZUFzeW5j
RGF0YSB7CiAgICAgR1JlZlB0cjxXZWJLaXRGYXZpY29uRGF0YWJhc2U+IGZhdmljb25EYXRhYmFz
ZTsKICAgICBTdHJpbmcgcGFnZVVSTDsKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBpY29u
OwotICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4g
Y2FuY2VsbGFibGU7CiB9OwogV0VCS0lUX0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChHZXRGYXZp
Y29uU3VyZmFjZUFzeW5jRGF0YSkKQEAgLTEzMSwxNCArMTMwLDEyIEBAIHN0YXRpYyBjYWlyb19z
dXJmYWNlX3QqIGdldEljb25TdXJmYWNlU3luY2hyb25vdXNseShXZWJLaXRGYXZpY29uRGF0YWJh
c2UqIGRhdGFiCiAgICAgV2ViQ29yZTo6SW1hZ2UqIGljb25JbWFnZSA9IGRhdGFiYXNlLT5wcml2
LT5pY29uRGF0YWJhc2UtPmltYWdlRm9yUGFnZVVSTChwYWdlVVJMLCBXZWJDb3JlOjpJbnRTaXpl
KDEsIDEpKTsKICAgICBpZiAoIWljb25JbWFnZSkgewogICAgICAgICBnX3NldF9lcnJvcihlcnJv
ciwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNF
X0VSUk9SX0ZBVklDT05fVU5LTk9XTiwgXygiVW5rbm93biBmYXZpY29uIGZvciBwYWdlICVzIiks
IHBhZ2VVUkwudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGRhdGFiYXNlLT5wcml2LT5pY29uRGF0
YWJhc2UtPnJlbGVhc2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCiAgICAgV2ViQ29yZTo6TmF0aXZlSW1hZ2VQdHIgaWNvbiA9IGljb25JbWFnZS0+
bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWljb24pIHsKICAgICAgICAg
Z19zZXRfZXJyb3IoZXJyb3IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SLCBXRUJLSVRf
RkFWSUNPTl9EQVRBQkFTRV9FUlJPUl9GQVZJQ09OX05PVF9GT1VORCwgXygiUGFnZSAlcyBkb2Vz
IG5vdCBoYXZlIGEgZmF2aWNvbiIpLCBwYWdlVVJMLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBk
YXRhYmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlLT5yZWxlYXNlSWNvbkZvclBhZ2VVUkwocGFnZVVS
TCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMTY1LDcgKzE2Miw3IEBAIHN0YXRp
YyB2b2lkIHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JQYWdlVVJMKFdlYktpdEZhdmljb25EYXRhYmFz
ZSogZGF0YWJhc2UsIGNvbnN0CiAgICAgICAgIEdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKiBk
YXRhID0gc3RhdGljX2Nhc3Q8R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEqPihnX3NpbXBsZV9h
c3luY19yZXN1bHRfZ2V0X29wX3Jlc19ncG9pbnRlcihyZXN1bHQpKTsKICAgICAgICAgaWYgKCFn
X2NhbmNlbGxhYmxlX2lzX2NhbmNlbGxlZChkYXRhLT5jYW5jZWxsYWJsZS5nZXQoKSkpIHsKICAg
ICAgICAgICAgIGlmIChlcnJvcikKLSAgICAgICAgICAgICAgICBnX3Byb3BhZ2F0ZV9lcnJvcigm
ZGF0YS0+ZXJyb3Iub3V0UHRyKCksIGVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAg
Z19zaW1wbGVfYXN5bmNfcmVzdWx0X3Rha2VfZXJyb3IocmVzdWx0LCBlcnJvci5yZWxlYXNlKCkp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGRhdGEtPmljb24gPSBpY29uOwog
ICAgICAgICB9CkBAIC0zNTAsMTMgKzM0NywxNCBAQCBjYWlyb19zdXJmYWNlX3QqIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uX2ZpbmlzaChXZWJLaXRGYXZpY29uRGF0YWJhcwog
ICAgIEdTaW1wbGVBc3luY1Jlc3VsdCogc2ltcGxlUmVzdWx0ID0gR19TSU1QTEVfQVNZTkNfUkVT
VUxUKHJlc3VsdCk7CiAgICAgZ193YXJuX2lmX2ZhaWwoZ19zaW1wbGVfYXN5bmNfcmVzdWx0X2dl
dF9zb3VyY2VfdGFnKHNpbXBsZVJlc3VsdCkgPT0gd2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0
X2Zhdmljb24pOwogCi0gICAgaWYgKGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9wcm9wYWdhdGVfZXJy
b3Ioc2ltcGxlUmVzdWx0LCBlcnJvcikpCi0gICAgICAgIHJldHVybiAwOwotCiAgICAgR2V0RmF2
aWNvblN1cmZhY2VBc3luY0RhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxHZXRGYXZpY29uU3VyZmFj
ZUFzeW5jRGF0YSo+KGdfc2ltcGxlX2FzeW5jX3Jlc3VsdF9nZXRfb3BfcmVzX2dwb2ludGVyKHNp
bXBsZVJlc3VsdCkpOwogICAgIEFTU0VSVChkYXRhKTsKLSAgICBpZiAoZGF0YS0+ZXJyb3IpIHsK
LSAgICAgICAgZ19wcm9wYWdhdGVfZXJyb3IoZXJyb3IsIGRhdGEtPmVycm9yLnJlbGVhc2UoKSk7
CisKKyAgICAvLyBEbyBub3QgZm9yZ2V0IHRvIHJlbGVhc2UgdGhlIGljb24gaWYgd2UgZG9uJ3Qg
aGF2ZSBhbiBpY29uIGZvcgorICAgIC8vIGl0IGF0IHRoaXMgcG9pbnQsIHRvIGF2b2lkIGhhdmlu
ZyBpbm5lY2VzYXJ5IGVudHJpZXMgaW4gdGhlCisgICAgLy8gZmF2aWNvbiBkYXRhYmFzZSBmb3Ig
cGFnZXMgd2l0aG91dCBhIGtub3cgZmF2aWNvbi4KKyAgICBpZiAoZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Byb3BhZ2F0ZV9lcnJvcihzaW1wbGVSZXN1bHQsIGVycm9yKSkgeworICAgICAgICBkYXRh
YmFzZS0+cHJpdi0+aWNvbkRhdGFiYXNlLT5yZWxlYXNlSWNvbkZvclBhZ2VVUkwoZGF0YS0+cGFn
ZVVSTCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotLSAKMS43LjExLjcKCg==
</data>
<flag name="review"
          id="182149"
          type_id="1"
          status="-"
          setter="cgarcia"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169117</attachid>
            <date>2012-10-17 01:25:41 -0700</date>
            <delta_ts>2012-10-17 04:45:10 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-10-17-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>4891</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSA1OThlZjRjNWE0NTY0YmY2MjMzM2IzNTM1YzYxNDJhMzMwNmNlNzgzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE3IE9jdCAyMDEyIDEwOjE5OjQ2ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0xMC0xNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtXSzJdW0dUS10gRmF2aWNvbnMgYXJlIGluY29ycmVjdGx5IHJlbGVhc2VkIGJl
Zm9yZSByZWNlaXZpbmcgdGhlIGFjdHVhbCBkYXRhCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NDkyCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgoKICAgICAgICBEb24ndCByZWxlYXNlIHRoZSBpY29uIGZvciBhIHBhZ2UgVVJMIGlu
IHRoZSBmaXJzdCBzdGFnZSBvZiB0aGUKICAgICAgICBhc3luY2hyb25vdXMgY2FsbCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbigpIGJ1dCBkbyBpdAogICAgICAgIG9uIGlkbGUg
aW5zdGVhZCwgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBpbml0aWFsCiAgICAg
ICAgc3luY2hyb25pemF0aW9uIHByb2Nlc3MgdGhlIGZpcnN0IHRpbWUgd2UgcmVxdWVzdCBhbiBp
Y29uIHdoaWNoIGlzCiAgICAgICAgYWN0dWFsbHkgaW4gdGhlIGljb24gZGF0YWJhc2UsIGJ1dCBo
YXMgbm90IG1hZGUgYXZhaWxhYmxlIHlldC4KCiAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9X
ZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwOgogICAgICAgIChyZWxlYXNlSWNvbk9uSWRsZVNvdXJj
ZUZ1bmMpOiBOZXcgR1NvdXJjZUZ1bmMgdG8gcmVsZWFzZSBhbiBpY29uCiAgICAgICAgZm9yIGEg
Z2l2ZW4gcGFnZSBVUkwgb24gYW4gaWRsZSBsb29wLgogICAgICAgIChyZWxlYXNlSWNvbk9uSWRs
ZSk6IENhbGwgZ19pZGxlX2FkZCB3aXRoIHJlbGVhc2VJY29uT25JZGxlU291cmNlRnVuYy4KICAg
ICAgICAoZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KTogRG9uJ3QgcmVsZWFzZSB0aGUgaWNv
biByaWdodGF3YXkgaWYKICAgICAgICBubyB2YWxpZCBpY29uIHdhcyBmb3VuZC4gRG8gaXQgb24g
aWRsZSBpbnN0ZWFkIChyZWxlYXNlSWNvbk9uSWRsZSkuCi0tLQogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IDE5ICsrKysrKysrKysrKysrKysr
KysKIC4uLi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwICAgICAg
fCAyMCArKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAzNyBpbnNlcnRpb25z
KCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxv
ZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCAzNDBlMzk5Li5hNzQwNTQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMTItMTAtMTcgIE1hcmlvIFNhbmNoZXogUHJhZGEg
IDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCisgICAgICAgIFtXSzJdW0dUS10gRmF2aWNvbnMgYXJl
IGluY29ycmVjdGx5IHJlbGVhc2VkIGJlZm9yZSByZWNlaXZpbmcgdGhlIGFjdHVhbCBkYXRhCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05OTQ5MgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIERvbid0IHJlbGVh
c2UgdGhlIGljb24gZm9yIGEgcGFnZSBVUkwgaW4gdGhlIGZpcnN0IHN0YWdlIG9mIHRoZQorICAg
ICAgICBhc3luY2hyb25vdXMgY2FsbCB3ZWJraXRfZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNv
bigpIGJ1dCBkbyBpdAorICAgICAgICBvbiBpZGxlIGluc3RlYWQsIHRvIGF2b2lkIGEgcmFjZSBj
b25kaXRpb24gd2l0aCB0aGUgaW5pdGlhbAorICAgICAgICBzeW5jaHJvbml6YXRpb24gcHJvY2Vz
cyB0aGUgZmlyc3QgdGltZSB3ZSByZXF1ZXN0IGFuIGljb24gd2hpY2ggaXMKKyAgICAgICAgYWN0
dWFsbHkgaW4gdGhlIGljb24gZGF0YWJhc2UsIGJ1dCBoYXMgbm90IG1hZGUgYXZhaWxhYmxlIHll
dC4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5j
cHA6CisgICAgICAgIChyZWxlYXNlSWNvbk9uSWRsZVNvdXJjZUZ1bmMpOiBOZXcgR1NvdXJjZUZ1
bmMgdG8gcmVsZWFzZSBhbiBpY29uCisgICAgICAgIGZvciBhIGdpdmVuIHBhZ2UgVVJMIG9uIGFu
IGlkbGUgbG9vcC4KKyAgICAgICAgKHJlbGVhc2VJY29uT25JZGxlKTogQ2FsbCBnX2lkbGVfYWRk
IHdpdGggcmVsZWFzZUljb25PbklkbGVTb3VyY2VGdW5jLgorICAgICAgICAoZ2V0SWNvblN1cmZh
Y2VTeW5jaHJvbm91c2x5KTogRG9uJ3QgcmVsZWFzZSB0aGUgaWNvbiByaWdodGF3YXkgaWYKKyAg
ICAgICAgbm8gdmFsaWQgaWNvbiB3YXMgZm91bmQuIERvIGl0IG9uIGlkbGUgaW5zdGVhZCAocmVs
ZWFzZUljb25PbklkbGUpLgogMjAxMi0xMC0xNSAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2Fy
Y2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gV2ViS2l0V2ViVmlldyBkb2Vzbid0IG5v
dGlmeSBvZiBmYXZpY29uIGNoYW5nZXMgZm9yIGtub3duIGZhdmljb25zIGJ1dCBuZXcgcGFnZXMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmlj
b25EYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRG
YXZpY29uRGF0YWJhc2UuY3BwCmluZGV4IGM0YWRiZGMuLjZiYmQ1YzAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFi
YXNlLmNwcApAQCAtMTIwLDYgKzEyMCwyMiBAQCBzdHJ1Y3QgR2V0RmF2aWNvblN1cmZhY2VBc3lu
Y0RhdGEgewogfTsKIFdFQktJVF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoR2V0RmF2aWNvblN1
cmZhY2VBc3luY0RhdGEpCiAKK3N0YXRpYyBnYm9vbGVhbiByZWxlYXNlSWNvbk9uSWRsZVNvdXJj
ZUZ1bmMoZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgR2V0RmF2aWNvblN1cmZhY2VBc3luY0Rh
dGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSo+KHVzZXJE
YXRhKTsKKyAgICBkYXRhLT5mYXZpY29uRGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVs
ZWFzZUljb25Gb3JQYWdlVVJMKGRhdGEtPnBhZ2VVUkwpOworICAgIGRlc3Ryb3lHZXRGYXZpY29u
U3VyZmFjZUFzeW5jRGF0YShkYXRhKTsKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRpYyB2
b2lkIHJlbGVhc2VJY29uT25JZGxlKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNv
bnN0IFN0cmluZyYgcGFnZVVSTCkKK3sKKyAgICBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSog
ZGF0YSA9IGNyZWF0ZUdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKCk7CisgICAgZGF0YS0+ZmF2
aWNvbkRhdGFiYXNlID0gZGF0YWJhc2U7CisgICAgZGF0YS0+cGFnZVVSTCA9IHBhZ2VVUkw7Cisg
ICAgZ19pZGxlX2FkZChyZWxlYXNlSWNvbk9uSWRsZVNvdXJjZUZ1bmMsIGRhdGEpOworfQorCiBz
dGF0aWMgY2Fpcm9fc3VyZmFjZV90KiBnZXRJY29uU3VyZmFjZVN5bmNocm9ub3VzbHkoV2ViS2l0
RmF2aWNvbkRhdGFiYXNlKiBkYXRhYmFzZSwgY29uc3QgU3RyaW5nJiBwYWdlVVJMLCBHRXJyb3Iq
KiBlcnJvcikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtMTMxLDE0ICsxNDcs
MTQgQEAgc3RhdGljIGNhaXJvX3N1cmZhY2VfdCogZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5
KFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWIKICAgICBXZWJDb3JlOjpJbWFnZSogaWNvbklt
YWdlID0gZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+aW1hZ2VGb3JQYWdlVVJMKHBhZ2VV
UkwsIFdlYkNvcmU6OkludFNpemUoMSwgMSkpOwogICAgIGlmICghaWNvbkltYWdlKSB7CiAgICAg
ICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUiwgV0VC
S0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfRkFWSUNPTl9VTktOT1dOLCBfKCJVbmtub3duIGZh
dmljb24gZm9yIHBhZ2UgJXMiKSwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZGF0
YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVsZWFzZUljb25Gb3JQYWdlVVJMKHBhZ2VVUkwp
OworICAgICAgICByZWxlYXNlSWNvbk9uSWRsZShkYXRhYmFzZSwgcGFnZVVSTCk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAogICAgIFdlYkNvcmU6Ok5hdGl2ZUltYWdlUHRyIGljb24gPSBp
Y29uSW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CiAgICAgaWYgKCFpY29uKSB7
CiAgICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJP
UiwgV0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfRkFWSUNPTl9OT1RfRk9VTkQsIF8oIlBh
Z2UgJXMgZG9lcyBub3QgaGF2ZSBhIGZhdmljb24iKSwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsK
LSAgICAgICAgZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVsZWFzZUljb25Gb3JQYWdl
VVJMKHBhZ2VVUkwpOworICAgICAgICByZWxlYXNlSWNvbk9uSWRsZShkYXRhYmFzZSwgcGFnZVVS
TCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotLSAKMS43LjExLjcKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>169155</attachid>
            <date>2012-10-17 04:45:10 -0700</date>
            <delta_ts>2012-10-17 04:50:48 -0700</delta_ts>
            <desc>Patch proposal</desc>
            <filename>0001-2012-10-17-Mario-Sanchez-Prada-msanchez-igalia.com.patch</filename>
            <type>text/plain</type>
            <size>7030</size>
            <attacher name="Mario Sanchez Prada">mario</attacher>
            
              <data encoding="base64">RnJvbSBiNGMyOWRiY2ZjYTJkZDBhYmI3ZTdlZDMxMzkxNzQ5MDM2NGFlOTM0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJpbyBTYW5jaGV6IFByYWRhIDxtc2FuY2hlekBpZ2FsaWEu
Y29tPgpEYXRlOiBXZWQsIDE3IE9jdCAyMDEyIDEzOjQyOjExICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gMjAxMi0xMC0xNyAgTWFyaW8gU2FuY2hleiBQcmFkYSAgPG1zYW5jaGV6QGlnYWxpYS5jb20+
CgogICAgICAgIFtXSzJdW0dUS10gRmF2aWNvbnMgYXJlIGluY29ycmVjdGx5IHJlbGVhc2VkIGJl
Zm9yZSByZWNlaXZpbmcgdGhlIGFjdHVhbCBkYXRhCiAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTk5NDkyCgogICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgoKICAgICAgICBEb24ndCByZWxlYXNlIHRoZSBpY29uIGZvciBhIHBhZ2UgVVJMIGlu
IHRoZSBmaXJzdCBzdGFnZSBvZiB0aGUKICAgICAgICBhc3luY2hyb25vdXMgY2FsbCB3ZWJraXRf
ZmF2aWNvbl9kYXRhYmFzZV9nZXRfZmF2aWNvbigpIGJ1dCBkbyBpdAogICAgICAgIGxhdGVyIGlu
c3RlYWQsIHRvIGF2b2lkIGEgcmFjZSBjb25kaXRpb24gd2l0aCB0aGUgaW5pdGlhbAogICAgICAg
IHN5bmNocm9uaXphdGlvbiBwcm9jZXNzIHRoZSBmaXJzdCB0aW1lIHdlIHJlcXVlc3QgYW4gaWNv
biB3aGljaCBpcwogICAgICAgIGFjdHVhbGx5IGluIHRoZSBpY29uIGRhdGFiYXNlLCBidXQgaGFz
IG5vdCBtYWRlIGF2YWlsYWJsZSB5ZXQuCgogICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2Vi
S2l0RmF2aWNvbkRhdGFiYXNlLmNwcDoKICAgICAgICAoR2V0RmF2aWNvblN1cmZhY2VBc3luY0Rh
dGE6On5HZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSk6IFJlbGVhc2UKICAgICAgICBoZXJlIHRo
ZSBpY29uIGZvciB0aGUgcGFnZSBVUkwgaWYgbm90IGEgdmFsaWQgaWNvbiBoYXMgYmVlbiBmb3Vu
ZC4KICAgICAgICAoR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEpOiBBZGQgYSBuZXcgYm9vbGVh
biBwYXJhbWV0ZXIgdG8gZmxhZwogICAgICAgIHdoZW4gYSBnaXZlbiBpY29uIGZvciBhIHBhZ2Ug
VVJMIHNob3VsZCBiZSByZWxlYXNlZC4KICAgICAgICAoZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91
c2x5KTogRG9uJ3QgcmVsZWFzZSB0aGUgaWNvbiwganVzdCByZXR1cm4gMC4KICAgICAgICAocHJv
Y2Vzc1BlbmRpbmdJY29uc0ZvclBhZ2VVUkwpOiBJZiBhIHZhbGlkIGljb24gaXMgZ290IGF0IHRo
aXMKICAgICAgICBwb2ludCwgZGlzYWJsZSB0aGUgZmxhZyBzaG91bGRSZWxlYXNlSWNvbkZvclBh
Z2VVUkwgbm90IHRvIHJlbGVhc2UKICAgICAgICB0aGUgaWNvbiBsYXRlciBvbi4KICAgICAgICAo
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24pOiBNYWtlIHN1cmUgd2UgcmV0YWlu
IHRoZQogICAgICAgIGljb24gZm9yIGEgZ2l2ZW4gcGFnZSBVUkwgYmVmb3JlIHRyeWluZyB0byBy
ZXRyaWV2ZSBpdCBmcm9tIHRoZQogICAgICAgIEljb25EYXRhYmFzZSwgYW5kIHRoYXQgd2UgZmxh
ZyBpdCB0byBiZSByZWxlYXNlZCBpbiBjYXNlIG5vdCBhCiAgICAgICAgdmFsaWQgaWNvbiBoYXMg
YmVlbiBmb3VuZCB5ZXQuCi0tLQogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCAyNyArKysrKysrKysrKysrKysrKysrKysrCiAuLi4vVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcCAgICB8IDIwICsrKysrKysrKysrKy0t
LS0KIDIgZmlsZXMgY2hhbmdlZCwgNDIgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFu
Z2VMb2cKaW5kZXggNjYxOTdlMS4uNjkyMzRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDMyIEBA
CiAyMDEyLTEwLTE3ICBNYXJpbyBTYW5jaGV6IFByYWRhICA8bXNhbmNoZXpAaWdhbGlhLmNvbT4K
IAorICAgICAgICBbV0syXVtHVEtdIEZhdmljb25zIGFyZSBpbmNvcnJlY3RseSByZWxlYXNlZCBi
ZWZvcmUgcmVjZWl2aW5nIHRoZSBhY3R1YWwgZGF0YQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTk0OTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBEb24ndCByZWxlYXNlIHRoZSBpY29uIGZvciBhIHBhZ2Ug
VVJMIGluIHRoZSBmaXJzdCBzdGFnZSBvZiB0aGUKKyAgICAgICAgYXN5bmNocm9ub3VzIGNhbGwg
d2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24oKSBidXQgZG8gaXQKKyAgICAgICAg
bGF0ZXIgaW5zdGVhZCwgdG8gYXZvaWQgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHRoZSBpbml0aWFs
CisgICAgICAgIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzIHRoZSBmaXJzdCB0aW1lIHdlIHJlcXVl
c3QgYW4gaWNvbiB3aGljaCBpcworICAgICAgICBhY3R1YWxseSBpbiB0aGUgaWNvbiBkYXRhYmFz
ZSwgYnV0IGhhcyBub3QgbWFkZSBhdmFpbGFibGUgeWV0LgorCisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcDoKKyAgICAgICAgKEdldEZhdmljb25T
dXJmYWNlQXN5bmNEYXRhOjp+R2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEpOiBSZWxlYXNlCisg
ICAgICAgIGhlcmUgdGhlIGljb24gZm9yIHRoZSBwYWdlIFVSTCBpZiBub3QgYSB2YWxpZCBpY29u
IGhhcyBiZWVuIGZvdW5kLgorICAgICAgICAoR2V0RmF2aWNvblN1cmZhY2VBc3luY0RhdGEpOiBB
ZGQgYSBuZXcgYm9vbGVhbiBwYXJhbWV0ZXIgdG8gZmxhZworICAgICAgICB3aGVuIGEgZ2l2ZW4g
aWNvbiBmb3IgYSBwYWdlIFVSTCBzaG91bGQgYmUgcmVsZWFzZWQuCisgICAgICAgIChnZXRJY29u
U3VyZmFjZVN5bmNocm9ub3VzbHkpOiBEb24ndCByZWxlYXNlIHRoZSBpY29uLCBqdXN0IHJldHVy
biAwLgorICAgICAgICAocHJvY2Vzc1BlbmRpbmdJY29uc0ZvclBhZ2VVUkwpOiBJZiBhIHZhbGlk
IGljb24gaXMgZ290IGF0IHRoaXMKKyAgICAgICAgcG9pbnQsIGRpc2FibGUgdGhlIGZsYWcgc2hv
dWxkUmVsZWFzZUljb25Gb3JQYWdlVVJMIG5vdCB0byByZWxlYXNlCisgICAgICAgIHRoZSBpY29u
IGxhdGVyIG9uLgorICAgICAgICAod2Via2l0X2Zhdmljb25fZGF0YWJhc2VfZ2V0X2Zhdmljb24p
OiBNYWtlIHN1cmUgd2UgcmV0YWluIHRoZQorICAgICAgICBpY29uIGZvciBhIGdpdmVuIHBhZ2Ug
VVJMIGJlZm9yZSB0cnlpbmcgdG8gcmV0cmlldmUgaXQgZnJvbSB0aGUKKyAgICAgICAgSWNvbkRh
dGFiYXNlLCBhbmQgdGhhdCB3ZSBmbGFnIGl0IHRvIGJlIHJlbGVhc2VkIGluIGNhc2Ugbm90IGEK
KyAgICAgICAgdmFsaWQgaWNvbiBoYXMgYmVlbiBmb3VuZCB5ZXQuCisKKzIwMTItMTAtMTcgIE1h
cmlvIFNhbmNoZXogUHJhZGEgIDxtc2FuY2hlekBpZ2FsaWEuY29tPgorCiAgICAgICAgIFtXSzJd
W0dUS10gVW5uZWVkZWQgR0Vycm9yIGZpZWxkIGluIGludGVybmFsIHN0cnVjdHVyZSBpbiBXZWJL
aXRGYXZpY29uRGF0YWJhc2UuY3BwCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD05OTU2NAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRGYXZpY29uRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvV2ViS2l0RmF2aWNvbkRhdGFiYXNlLmNwcAppbmRleCBhYTRiYWZiLi5k
YzMyMGJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRGYXZpY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkv
Z3RrL1dlYktpdEZhdmljb25EYXRhYmFzZS5jcHAKQEAgLTEwNywxMCArMTA3LDE3IEBAIHN0YXRp
YyB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2NsYXNzX2luaXQoV2ViS2l0RmF2aWNvbkRh
dGFiYXNlQ2xhc3MqIGZhdmljCiB9CiAKIHN0cnVjdCBHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0
YSB7CisgICAgfkdldEZhdmljb25TdXJmYWNlQXN5bmNEYXRhKCkKKyAgICB7CisgICAgICAgIGlm
IChzaG91bGRSZWxlYXNlSWNvbkZvclBhZ2VVUkwpCisgICAgICAgICAgICBmYXZpY29uRGF0YWJh
c2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVsZWFzZUljb25Gb3JQYWdlVVJMKHBhZ2VVUkwpOwor
ICAgIH0KKwogICAgIEdSZWZQdHI8V2ViS2l0RmF2aWNvbkRhdGFiYXNlPiBmYXZpY29uRGF0YWJh
c2U7CiAgICAgU3RyaW5nIHBhZ2VVUkw7CiAgICAgUmVmUHRyPGNhaXJvX3N1cmZhY2VfdD4gaWNv
bjsKICAgICBHUmVmUHRyPEdDYW5jZWxsYWJsZT4gY2FuY2VsbGFibGU7CisgICAgYm9vbCBzaG91
bGRSZWxlYXNlSWNvbkZvclBhZ2VVUkw7CiB9OwogV0VCS0lUX0RFRklORV9BU1lOQ19EQVRBX1NU
UlVDVChHZXRGYXZpY29uU3VyZmFjZUFzeW5jRGF0YSkKIApAQCAtMTE4LDIxICsxMjUsMTcgQEAg
c3RhdGljIGNhaXJvX3N1cmZhY2VfdCogZ2V0SWNvblN1cmZhY2VTeW5jaHJvbm91c2x5KFdlYktp
dEZhdmljb25EYXRhYmFzZSogZGF0YWIKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwog
Ci0gICAgZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmV0YWluSWNvbkZvclBhZ2VVUkwo
cGFnZVVSTCk7Ci0KICAgICAvLyBUaGUgZXhhY3Qgc2l6ZSB3ZSBwYXNzIGlzIGlycmVsZXZhbnQg
dG8gdGhlIGljb25EYXRhYmFzZSBjb2RlLgogICAgIC8vIFdlIG11c3QgcGFzcyBzb21ldGhpbmcg
Z3JlYXRlciB0aGFuIDB4MCB0byBnZXQgYW4gaWNvbi4KICAgICBXZWJDb3JlOjpJbWFnZSogaWNv
bkltYWdlID0gZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+aW1hZ2VGb3JQYWdlVVJMKHBh
Z2VVUkwsIFdlYkNvcmU6OkludFNpemUoMSwgMSkpOwogICAgIGlmICghaWNvbkltYWdlKSB7CiAg
ICAgICAgIGdfc2V0X2Vycm9yKGVycm9yLCBXRUJLSVRfRkFWSUNPTl9EQVRBQkFTRV9FUlJPUiwg
V0VCS0lUX0ZBVklDT05fREFUQUJBU0VfRVJST1JfRkFWSUNPTl9VTktOT1dOLCBfKCJVbmtub3du
IGZhdmljb24gZm9yIHBhZ2UgJXMiKSwgcGFnZVVSTC51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAg
ZGF0YWJhc2UtPnByaXYtPmljb25EYXRhYmFzZS0+cmVsZWFzZUljb25Gb3JQYWdlVVJMKHBhZ2VV
UkwpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBXZWJDb3JlOjpOYXRpdmVJbWFn
ZVB0ciBpY29uID0gaWNvbkltYWdlLT5uYXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwogICAg
IGlmICghaWNvbikgewogICAgICAgICBnX3NldF9lcnJvcihlcnJvciwgV0VCS0lUX0ZBVklDT05f
REFUQUJBU0VfRVJST1IsIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SX0ZBVklDT05fTk9U
X0ZPVU5ELCBfKCJQYWdlICVzIGRvZXMgbm90IGhhdmUgYSBmYXZpY29uIiksIHBhZ2VVUkwudXRm
OCgpLmRhdGEoKSk7Ci0gICAgICAgIGRhdGFiYXNlLT5wcml2LT5pY29uRGF0YWJhc2UtPnJlbGVh
c2VJY29uRm9yUGFnZVVSTChwYWdlVVJMKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBA
IC0xNjAsOCArMTYzLDEwIEBAIHN0YXRpYyB2b2lkIHByb2Nlc3NQZW5kaW5nSWNvbnNGb3JQYWdl
VVJMKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0CiAgICAgICAgIGlmICgh
Z19jYW5jZWxsYWJsZV9pc19jYW5jZWxsZWQoZGF0YS0+Y2FuY2VsbGFibGUuZ2V0KCkpKSB7CiAg
ICAgICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICAgICAgZ19zaW1wbGVfYXN5bmNfcmVz
dWx0X3Rha2VfZXJyb3IocmVzdWx0LCBlcnJvci5yZWxlYXNlKCkpOwotICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgZGF0YS0+aWNvbiA9IGljb247
CisgICAgICAgICAgICAgICAgZGF0YS0+c2hvdWxkUmVsZWFzZUljb25Gb3JQYWdlVVJMID0gZmFs
c2U7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KIAogICAgICAgICBnX3NpbXBsZV9hc3luY19y
ZXN1bHRfY29tcGxldGUocmVzdWx0KTsKQEAgLTI5MSw2ICsyOTYsOCBAQCB2b2lkIHdlYmtpdF9m
YXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29uKFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJh
c2UsIGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBwcml2LT5pY29uRGF0YWJh
c2UtPnJldGFpbkljb25Gb3JQYWdlVVJMKGRhdGEtPnBhZ2VVUkwpOworCiAgICAgLy8gV2UgYXNr
IGZvciB0aGUgaWNvbiBkaXJlY3RseS4gSWYgd2UgZG9uJ3QgZ2V0IHRoZSBpY29uIGRhdGEgbm93
LAogICAgIC8vIHdlJ2xsIGJlIG5vdGlmaWVkIGxhdGVyIChldmVuIGlmIHRoZSBkYXRhYmFzZSBp
cyBzdGlsbCBpbXBvcnRpbmcgaWNvbnMpLgogICAgIEdPd25QdHI8R0Vycm9yPiBlcnJvcjsKQEAg
LTMwMCw2ICszMDcsOSBAQCB2b2lkIHdlYmtpdF9mYXZpY29uX2RhdGFiYXNlX2dldF9mYXZpY29u
KFdlYktpdEZhdmljb25EYXRhYmFzZSogZGF0YWJhc2UsIGNvbnN0CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKKyAgICAvLyBBdCB0aGlzIHBvaW50IHdlIHN0aWxsIGRvbid0IGtub3cgd2hldGhl
ciB3ZSB3aWxsIGdldCBhIHZhbGlkIGljb24gZm9yIHBhZ2VVUkwuCisgICAgZGF0YS0+c2hvdWxk
UmVsZWFzZUljb25Gb3JQYWdlVVJMID0gdHJ1ZTsKKwogICAgIGlmIChnX2Vycm9yX21hdGNoZXMo
ZXJyb3IuZ2V0KCksIFdFQktJVF9GQVZJQ09OX0RBVEFCQVNFX0VSUk9SLCBXRUJLSVRfRkFWSUNP
Tl9EQVRBQkFTRV9FUlJPUl9GQVZJQ09OX05PVF9GT1VORCkpIHsKICAgICAgICAgZ19zaW1wbGVf
YXN5bmNfcmVzdWx0X3Rha2VfZXJyb3IocmVzdWx0LmdldCgpLCBlcnJvci5yZWxlYXNlKCkpOwog
ICAgICAgICBnX3NpbXBsZV9hc3luY19yZXN1bHRfY29tcGxldGVfaW5faWRsZShyZXN1bHQuZ2V0
KCkpOwotLSAKMS43LjExLjcKCg==
</data>
<flag name="review"
          id="182355"
          type_id="1"
          status="+"
          setter="cgarcia"
    />
          </attachment>
      

    </bug>

</bugzilla>