<?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>27210</bug_id>
          
          <creation_ts>2009-07-13 03:37:20 -0700</creation_ts>
          <short_desc>[Qt] Add an API to get a list of installed plugins</short_desc>
          <delta_ts>2009-09-07 09:30:02 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Jakub Wieczorek">jwieczorek</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>laszlo.gombos</cc>
    
    <cc>manyoso</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>131291</commentid>
    <comment_count>0</comment_count>
      <attachid>32656</attachid>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-07-13 03:37:20 -0700</bug_when>
    <thetext>Created attachment 32656
patch

The attached patch adds a new function: QWebPluginFactory::installedPlugins() that returns a list of plugins currently installed and recognized by WebKit, with an autotest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131552</commentid>
    <comment_count>1</comment_count>
      <attachid>32656</attachid>
    <who name="Adam Treat">manyoso</who>
    <bug_when>2009-07-14 07:15:45 -0700</bug_when>
    <thetext>Comment on attachment 32656
patch

We talked this over in #qtwebkit and believe this is a great addition to the API.  However, there might be confusion with two different functions that appear to do the same thing: plugins() and installedPlugins().  With this in mind, how about a method such as &apos;QList&lt;QWebPluginFactory::Plugin&gt; QWebPage::plugins(enum);&apos; where the enum would differentiate between system plugins that are picked up by scanning netscape plugin directories and those plugins that are installed via QWebPluginFactory.

With this change, perhaps QWebPluginFactory::Plugin should have it&apos;s own class such as QWebPlugin.  I&apos;m not sure.

Eventually, it&apos;d be nice to add API to set/get the preferred plugin for a particular mimetype and also to query/set the directories searched for system plugins.  Some ideas for how to do that are here:

http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=shortlog;h=adam/netscape-plugin-manager

Cheers,
Adam</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>131580</commentid>
    <comment_count>2</comment_count>
    <who name="Jakub Wieczorek">jwieczorek</who>
    <bug_when>2009-07-14 09:03:11 -0700</bug_when>
    <thetext>&gt; We talked this over in #qtwebkit and believe this is a great addition to the
&gt; API.  However, there might be confusion with two different functions that
&gt; appear to do the same thing: plugins() and installedPlugins().  With this in
&gt; mind, how about a method such as &apos;QList&lt;QWebPluginFactory::Plugin&gt;
&gt; QWebPage::plugins(enum);&apos; where the enum would differentiate between system
&gt; plugins that are picked up by scanning netscape plugin directories and those
&gt; plugins that are installed via QWebPluginFactory.

I intentionally made my function a static one. This way one doesn&apos;t have to reimplement and instantiate a custom plugin factory just to get a list of installed plugins.

Also, once we get more functions that concern netscape plugins such as setPreferredPlugin or whatever else, they should also be static IMO. Mostly because one can have different plugin factory per each page and thus it should be emphasised in the API that these functions would affect all pages (because they do), not only those that hold a particular plugin factory. And if those functions were static, it&apos;s another reason that installedPlugins should also be static, for consistency.

I&apos;m also not sure if the API suggested by you would actually be less confusing. We obviously would have to keep the virtual plugins() function (the one without arguments), which is supposed to be reimplemented in subclasses. This way we would end up with two public functions:

virtual QList&lt;Plugin&gt; plugins() const;
QList&lt;Plugin&gt; plugins(Type type) const; - which would call plugins() when type == FactoryPlugins.

Just not sure if it makes more sense. It would do if the virtual function was private but we can&apos;t change the visibility obviously.
 
&gt; With this change, perhaps QWebPluginFactory::Plugin should have it&apos;s own class
&gt; such as QWebPlugin.  I&apos;m not sure.

This isn&apos;t essential for this particular patch, nor for any further. This would also break BC, even if we typedefed it.

&gt; Eventually, it&apos;d be nice to add API to set/get the preferred plugin for a
&gt; particular mimetype and also to query/set the directories searched for system
&gt; plugins.  Some ideas for how to do that are here:
&gt; 
&gt; http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=shortlog;h=adam/netscape-plugin-manager

Sure, I&apos;m going to work on this API, I looked at your branch and am most likely going to grab some ideas, thanks!

&gt; 
&gt; Cheers,
&gt; Adam

Thanks for the comments.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32656</attachid>
            <date>2009-07-13 03:37:20 -0700</date>
            <delta_ts>2009-07-14 07:15:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>installedPlugins.patch</filename>
            <type>text/plain</type>
            <size>8014</size>
            <attacher name="Jakub Wieczorek">jwieczorek</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuY3BwIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKaW5kZXggZDJiYjEyNC4uMzgwOGIxOSAxMDA2
NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKKysrIGIvV2ViS2l0
L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5jcHAKQEAgLTIwLDYgKzIwLDExIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAicXdlYnBsdWdpbmZhY3RvcnkuaCIKIAorI2luY2x1ZGUg
IlBsdWdpbkRhdGFiYXNlLmgiCisjaW5jbHVkZSAiUGx1Z2luUGFja2FnZS5oIgorCit1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKKwogLyohCiAgICAgXGNsYXNzIFFXZWJQbHVnaW5GYWN0b3J5CiAg
ICAgXHNpbmNlIDQuNApAQCAtMTA0LDYgKzEwOSw1NCBAQCBRV2ViUGx1Z2luRmFjdG9yeTo6flFX
ZWJQbHVnaW5GYWN0b3J5KCkKIH0KIAogLyohCisgICAgXHNpbmNlIDQuNgorCisgICAgUmV0dXJu
cyBhIGxpc3Qgb2YgcGx1Z2lucyB0aGF0IGFyZSBpbnN0YWxsZWQgaW4gdGhlIHN5c3RlbSBhbmQg
aGF2ZSBiZWVuIGRldGVjdGVkIGJ5IFdlYktpdC4KKyAgICBDdXN0b20gcGx1Z2lucyBkZWxpdmVy
ZWQgYnkgUVdlYlBsdWdpbkZhY3RvcnkgcmVpbXBsZW1lbnRhdGlvbnMgYXJlIG5vdCBpbmNsdWRl
ZC4KKworICAgIFlvdSBjYW4gcmV0cmlldmUgdGhlIHNhbWUgaW5mb3JtYXRpb24gdXNpbmcgSmF2
YVNjcmlwdCBBUEksIGl0IGlzIGF2YWlsYWJsZSB1bmRlcgorICAgIHRoZSB3aW5kb3cubmF2aWdh
dG9yLnBsdWdpbnMgaW50ZXJmYWNlLgorKi8KK1FMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVn
aW4+IFFXZWJQbHVnaW5GYWN0b3J5OjppbnN0YWxsZWRQbHVnaW5zKCkKK3sKKyAgICBRTGlzdDxR
V2ViUGx1Z2luRmFjdG9yeTo6UGx1Z2luPiBxcGx1Z2luczsKKyAgICBjb25zdCBWZWN0b3I8UGx1
Z2luUGFja2FnZSo+JiBwbHVnaW5zID0gUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMo
KS0+cGx1Z2lucygpOworCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBwbHVnaW5z
LnNpemUoKTsgKytpKSB7CisgICAgICAgIFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4gcXBsdWdp
bjsKKyAgICAgICAgUGx1Z2luUGFja2FnZSogcGx1Z2luID0gcGx1Z2luc1tpXTsKKworICAgICAg
ICBxcGx1Z2luLm5hbWUgPSBwbHVnaW4tPm5hbWUoKTsKKyAgICAgICAgcXBsdWdpbi5kZXNjcmlw
dGlvbiA9IHBsdWdpbi0+ZGVzY3JpcHRpb24oKTsKKworICAgICAgICBRTGlzdDxRV2ViUGx1Z2lu
RmFjdG9yeTo6TWltZVR5cGU+IG1pbWVUeXBlczsKKyAgICAgICAgY29uc3QgTUlNRVRvRGVzY3Jp
cHRpb25zTWFwJiBtaW1lVG9EZXNjcmlwdGlvbnMgPSBwbHVnaW4tPm1pbWVUb0Rlc2NyaXB0aW9u
cygpOworICAgICAgICBNSU1FVG9EZXNjcmlwdGlvbnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IG1pbWVUb0Rlc2NyaXB0aW9ucy5lbmQoKTsKKyAgICAgICAgZm9yIChNSU1FVG9EZXNjcmlwdGlv
bnNNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbWltZVRvRGVzY3JpcHRpb25zLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkgeworICAgICAgICAgICAgUVdlYlBsdWdpbkZhY3Rvcnk6Ok1pbWVUeXBl
IG1pbWVUeXBlOworICAgICAgICAgICAgbWltZVR5cGUubmFtZSA9IGl0LT5maXJzdDsKKyAgICAg
ICAgICAgIG1pbWVUeXBlLmRlc2NyaXB0aW9uID0gaXQtPnNlY29uZDsKKworICAgICAgICAgICAg
UVN0cmluZ0xpc3QgZmlsZUV4dGVuc2lvbnM7CisgICAgICAgICAgICBWZWN0b3I8U3RyaW5nPiBl
eHRlbnNpb25zID0gcGx1Z2luLT5taW1lVG9FeHRlbnNpb25zKCkuZ2V0KG1pbWVUeXBlLm5hbWUp
OworCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5zaXpl
KCk7IGkrKykKKyAgICAgICAgICAgICAgICBmaWxlRXh0ZW5zaW9ucy5hcHBlbmQoZXh0ZW5zaW9u
c1tpXSk7CisKKyAgICAgICAgICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zID0gZmlsZUV4dGVu
c2lvbnM7CisKKyAgICAgICAgICAgIG1pbWVUeXBlcy5hcHBlbmQobWltZVR5cGUpOworICAgICAg
ICB9CisKKyAgICAgICAgcXBsdWdpbi5taW1lVHlwZXMgPSBtaW1lVHlwZXM7CisKKyAgICAgICAg
cXBsdWdpbnMuYXBwZW5kKHFwbHVnaW4pOworICAgIH0KKworICAgIHJldHVybiBxcGx1Z2luczsK
K30KKworLyohCiAgICAgXGZuIFFMaXN0PFBsdWdpbj4gUVdlYlBsdWdpbkZhY3Rvcnk6OnBsdWdp
bnMoKSBjb25zdCA9IDAKIAogICAgIFRoaXMgZnVuY3Rpb24gaXMgcmVpbXBsZW1lbnRlZCBpbiBz
dWJjbGFzc2VzIHRvIHJldHVybiBhIGxpc3Qgb2YKZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkv
cXdlYnBsdWdpbmZhY3RvcnkuaCBiL1dlYktpdC9xdC9BcGkvcXdlYnBsdWdpbmZhY3RvcnkuaApp
bmRleCAzNTMxYjA2Li5mM2I5Y2Y3IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQXBpL3F3ZWJwbHVn
aW5mYWN0b3J5LmgKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2VicGx1Z2luZmFjdG9yeS5oCkBAIC01
MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBRV2ViUGx1Z2luRmFjdG9yeShRT2Jq
ZWN0ICpwYXJlbnQgPSAwKTsKICAgICB2aXJ0dWFsIH5RV2ViUGx1Z2luRmFjdG9yeSgpOwogCisg
ICAgc3RhdGljIFFMaXN0PFFXZWJQbHVnaW5GYWN0b3J5OjpQbHVnaW4+IGluc3RhbGxlZFBsdWdp
bnMoKTsKKwogICAgIHZpcnR1YWwgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zKCkgY29uc3QgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCByZWZyZXNoUGx1Z2lucygpOwogCmRpZmYgLS1naXQgYS9XZWJLaXQv
cXQvQ2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCA0ZTUzYjQ2Li4yOTY4NjE4
IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxOSBAQAorMjAwOS0wNy0xMyAgSmFrdWIgV2llY3pvcmVrICA8ZmF3MjE3
QGdtYWlsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBbUXRdIEFkZCBhbiBBUEkgdG8gZ2V0IGEgbGlzdCBvZiBwbHVnaW5zIHdoaWNoIGFyZSBp
bnN0YWxsZWQgaW4gdGhlCisgICAgICAgIHNlYXJjaCBwYXRocyB0aGF0IFF0V2ViS2l0IGlzIGF3
YXJlIG9mLgorCisgICAgICAgICogQXBpL3F3ZWJwbHVnaW5mYWN0b3J5LmNwcDoKKyAgICAgICAg
KFFXZWJQbHVnaW5GYWN0b3J5OjppbnN0YWxsZWRQbHVnaW5zKToKKyAgICAgICAgKiBBcGkvcXdl
YnBsdWdpbmZhY3RvcnkuaDoKKyAgICAgICAgKiB0ZXN0cy9xd2VicGx1Z2luZmFjdG9yeS9xd2Vi
cGx1Z2luZmFjdG9yeS5wcm86IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3F3ZWJwbHVnaW5mYWN0
b3J5L3RzdF9xd2VicGx1Z2luZmFjdG9yeS5jcHA6IEFkZGVkLgorICAgICAgICAob3BlcmF0b3I9
PSk6CisgICAgICAgICh0c3RfUVdlYlBsdWdpbkZhY3Rvcnk6Omluc3RhbGxlZFBsdWdpbnMpOgor
ICAgICAgICAqIHRlc3RzL3Rlc3RzLnBybzoKKwogMjAwOS0wNy0xMiAgQnJlbnQgRnVsZ2hhbSAg
PGJmdWxnaGFtQGdtYWlsLmNvbT4KIAogICAgICAgICBTcGVjdWxhdGl2ZSBidWlsZCBmaXggYWZ0
ZXIgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvNDU3ODYuCmRpZmYgLS1naXQgYS9X
ZWJLaXQvcXQvdGVzdHMvcXdlYnBsdWdpbmZhY3RvcnkvcXdlYnBsdWdpbmZhY3RvcnkucHJvIGIv
V2ViS2l0L3F0L3Rlc3RzL3F3ZWJwbHVnaW5mYWN0b3J5L3F3ZWJwbHVnaW5mYWN0b3J5LnBybwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDMxN2NkCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwbHVnaW5mYWN0b3J5L3F3ZWJwbHVnaW5mYWN0b3J5
LnBybwpAQCAtMCwwICsxLDYgQEAKK1RFTVBMQVRFID0gYXBwCitUQVJHRVQgPSB0c3RfcXdlYnBs
dWdpbmZhY3RvcnkKK2luY2x1ZGUoLi4vLi4vLi4vLi4vV2ViS2l0LnByaSkKK1NPVVJDRVMgICs9
IHRzdF9xd2VicGx1Z2luZmFjdG9yeS5jcHAKK1FUICs9IHRlc3RsaWIgbmV0d29yaworUU1BS0Vf
UlBBVEhESVIgPSAkJE9VVFBVVF9ESVIvbGliICQkUU1BS0VfUlBBVEhESVIKZGlmZiAtLWdpdCBh
L1dlYktpdC9xdC90ZXN0cy9xd2VicGx1Z2luZmFjdG9yeS90c3RfcXdlYnBsdWdpbmZhY3Rvcnku
Y3BwIGIvV2ViS2l0L3F0L3Rlc3RzL3F3ZWJwbHVnaW5mYWN0b3J5L3RzdF9xd2VicGx1Z2luZmFj
dG9yeS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NmNThlNQotLS0g
L2Rldi9udWxsCisrKyBiL1dlYktpdC9xdC90ZXN0cy9xd2VicGx1Z2luZmFjdG9yeS90c3RfcXdl
YnBsdWdpbmZhY3RvcnkuY3BwCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgICAgQ29weXJpZ2h0IChD
KSAyMDA5IEpha3ViIFdpZWN6b3JlaworCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAgICBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyovCisKKyNpbmNsdWRlIDxRdFRlc3QvUXRUZXN0PgorCisj
aW5jbHVkZSA8cXdlYmZyYW1lLmg+CisjaW5jbHVkZSA8cXdlYnBhZ2UuaD4KKyNpbmNsdWRlIDxx
d2VicGx1Z2luZmFjdG9yeS5oPgorI2luY2x1ZGUgPHF2YXJpYW50Lmg+CisKK2NsYXNzIHRzdF9R
V2ViUGx1Z2luRmFjdG9yeSA6IHB1YmxpYyBRT2JqZWN0Cit7CisgICAgUV9PQkpFQ1QKKworcHJp
dmF0ZSBzbG90czoKKyAgICB2b2lkIGluc3RhbGxlZFBsdWdpbnMoKTsKK307CisKK3R5cGVkZWYg
UVdlYlBsdWdpbkZhY3Rvcnk6OlBsdWdpbiBQbHVnaW47Cit0eXBlZGVmIFFXZWJQbHVnaW5GYWN0
b3J5OjpNaW1lVHlwZSBNaW1lVHlwZTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IE1pbWVUeXBl
JiBtaW1lVHlwZTEsIGNvbnN0IE1pbWVUeXBlJiBtaW1lVHlwZTIpCit7CisgICAgcmV0dXJuICht
aW1lVHlwZTEubmFtZSA9PSBtaW1lVHlwZTIubmFtZQorICAgICAgICAgICAgJiYgbWltZVR5cGUx
LmRlc2NyaXB0aW9uID09IG1pbWVUeXBlMi5kZXNjcmlwdGlvbgorICAgICAgICAgICAgJiYgbWlt
ZVR5cGUxLmZpbGVFeHRlbnNpb25zID09IG1pbWVUeXBlMi5maWxlRXh0ZW5zaW9ucyk7Cit9CisK
K2Jvb2wgb3BlcmF0b3I9PShjb25zdCBQbHVnaW4mIHBsdWdpbjEsIGNvbnN0IFBsdWdpbiYgcGx1
Z2luMikKK3sKKyAgICByZXR1cm4gKHBsdWdpbjEubmFtZSA9PSBwbHVnaW4yLm5hbWUKKyAgICAg
ICAgICAgICYmIHBsdWdpbjEuZGVzY3JpcHRpb24gPT0gcGx1Z2luMi5kZXNjcmlwdGlvbgorICAg
ICAgICAgICAgJiYgcGx1Z2luMS5taW1lVHlwZXMgPT0gcGx1Z2luMi5taW1lVHlwZXMpOworfQor
Cit2b2lkIHRzdF9RV2ViUGx1Z2luRmFjdG9yeTo6aW5zdGFsbGVkUGx1Z2lucygpCit7CisgICAg
UVdlYlBhZ2UgcGFnZTsKKyAgICBwYWdlLnNldHRpbmdzKCktPnNldEF0dHJpYnV0ZShRV2ViU2V0
dGluZ3M6OlBsdWdpbnNFbmFibGVkLCB0cnVlKTsKKyAgICBRV2ViRnJhbWUqIGZyYW1lID0gcGFn
ZS5tYWluRnJhbWUoKTsKKworICAgIFFWYXJpYW50TWFwIGpzUGx1Z2luc01hcCA9IGZyYW1lLT5l
dmFsdWF0ZUphdmFTY3JpcHQoIndpbmRvdy5uYXZpZ2F0b3IucGx1Z2lucyIpLnRvTWFwKCk7Cisg
ICAgUUxpc3Q8UGx1Z2luPiBwbHVnaW5zID0gUVdlYlBsdWdpbkZhY3Rvcnk6Omluc3RhbGxlZFBs
dWdpbnMoKTsKKworICAgIGludCBsZW5ndGggPSBqc1BsdWdpbnNNYXBbImxlbmd0aCJdLnRvSW50
KCk7CisgICAgUUNPTVBBUkUobGVuZ3RoLCBwbHVnaW5zLmNvdW50KCkpOworCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBQbHVnaW4gcGx1Z2luOworCisg
ICAgICAgIFFWYXJpYW50TWFwIGpzUGx1Z2luID0gZnJhbWUtPmV2YWx1YXRlSmF2YVNjcmlwdChR
U3RyaW5nKCJ3aW5kb3cubmF2aWdhdG9yLnBsdWdpbnNbJTFdIikuYXJnKGkpKS50b01hcCgpOwor
ICAgICAgICBwbHVnaW4ubmFtZSA9IGpzUGx1Z2luWyJuYW1lIl0udG9TdHJpbmcoKTsKKyAgICAg
ICAgcGx1Z2luLmRlc2NyaXB0aW9uID0ganNQbHVnaW5bImRlc2NyaXB0aW9uIl0udG9TdHJpbmco
KTsKKworICAgICAgICBRTGlzdDxNaW1lVHlwZT4gbWltZVR5cGVzOworICAgICAgICBpbnQgbWlt
ZVR5cGVzQ291bnQgPSBqc1BsdWdpblsibGVuZ3RoIl0udG9JbnQoKTsKKworICAgICAgICBmb3Ig
KGludCBqID0gMDsgaiA8IG1pbWVUeXBlc0NvdW50OyArK2opIHsKKyAgICAgICAgICAgIFFWYXJp
YW50TWFwIGpzTWltZVR5cGUgPSBmcmFtZS0+ZXZhbHVhdGVKYXZhU2NyaXB0KFFTdHJpbmcoIndp
bmRvdy5uYXZpZ2F0b3IucGx1Z2luc1slMV1bJTJdIikuYXJnKGkpLmFyZyhqKSkudG9NYXAoKTsK
KworICAgICAgICAgICAgTWltZVR5cGUgbWltZVR5cGU7CisgICAgICAgICAgICBtaW1lVHlwZS5u
YW1lID0ganNNaW1lVHlwZVsidHlwZSJdLnRvU3RyaW5nKCk7CisgICAgICAgICAgICBtaW1lVHlw
ZS5kZXNjcmlwdGlvbiA9IGpzTWltZVR5cGVbImRlc2NyaXB0aW9uIl0udG9TdHJpbmcoKTsKKyAg
ICAgICAgICAgIG1pbWVUeXBlLmZpbGVFeHRlbnNpb25zID0ganNNaW1lVHlwZVsic3VmZml4ZXMi
XS50b1N0cmluZygpLnNwbGl0KCcsJywgUVN0cmluZzo6U2tpcEVtcHR5UGFydHMpOworCisgICAg
ICAgICAgICBtaW1lVHlwZXMuYXBwZW5kKG1pbWVUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHBsdWdpbi5taW1lVHlwZXMgPSBtaW1lVHlwZXM7CisKKyAgICAgICAgUUNPTVBBUkUocGx1Z2lu
cy5hdChpKSwgcGx1Z2luKTsKKyAgICB9Cit9CisKK1FURVNUX01BSU4odHN0X1FXZWJQbHVnaW5G
YWN0b3J5KQorCisjaW5jbHVkZSAidHN0X3F3ZWJwbHVnaW5mYWN0b3J5Lm1vYyIKZGlmZiAtLWdp
dCBhL1dlYktpdC9xdC90ZXN0cy90ZXN0cy5wcm8gYi9XZWJLaXQvcXQvdGVzdHMvdGVzdHMucHJv
CmluZGV4IDA3NjA0NmYuLmViMzU5NWIgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC90ZXN0cy90ZXN0
cy5wcm8KKysrIGIvV2ViS2l0L3F0L3Rlc3RzL3Rlc3RzLnBybwpAQCAtMSwzICsxLDMgQEAKIAog
VEVNUExBVEUgPSBzdWJkaXJzCi1TVUJESVJTID0gcXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVt
ZW50IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3ZWJ2aWV3IHF3ZWJoaXN0b3J5CitTVUJESVJTID0g
cXdlYmZyYW1lIHF3ZWJwYWdlIHF3ZWJlbGVtZW50IHF3ZWJoaXN0b3J5aW50ZXJmYWNlIHF3ZWJw
bHVnaW5mYWN0b3J5IHF3ZWJ2aWV3IHF3ZWJoaXN0b3J5Cg==
</data>
<flag name="review"
          id="17051"
          type_id="1"
          status="-"
          setter="manyoso"
    />
          </attachment>
      

    </bug>

</bugzilla>