<?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>137407</bug_id>
          
          <creation_ts>2014-10-03 14:50:34 -0700</creation_ts>
          <short_desc>window.performance object resets script-applied properties</short_desc>
          <delta_ts>2016-09-12 14:25:23 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac (Intel)</rep_platform>
          <op_sys>Other</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://jsfiddle.net/dss8wudw/3/ </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="e.a. nakashima">eanakashima</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>alex.christensen</cc>
    
    <cc>ap</cc>
    
    <cc>aroben</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>godfreykfc</cc>
    
    <cc>hartman.wiki</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>krinklemail</cc>
    
    <cc>rniwa</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1039361</commentid>
    <comment_count>0</comment_count>
    <who name="e.a. nakashima">eanakashima</who>
    <bug_when>2014-10-03 14:50:34 -0700</bug_when>
    <thetext>To polyfill certain browser APIs that are not fully implemented in WebKit, including the User Timing API, it&apos;s useful to be able to add properties to the `window.performance` object, using code like `window.performance.mark = function() { [implementation here] }`. In Safari 8 we&apos;re seeing a behavior where the `window.performance` object is periodically reset, removing all properties applied with scripts. The point when the reset occurs can vary, but it seems to correlate to: 

- opening and closing the developer tools (console)
- a change in the document readyState
- triggering certain DOM events, e.g. clicking back on the document after you&apos;ve opened the developer tools

Admittedly it&apos;s questionable whether to consider this a bug, since it&apos;s typically considered a best practice to not modify built-in browser-provided objects. But it would be really helpful to be able to do this reliably in the case of polyfills.

Steps to Reproduce:

1. Set a property of `window.performance` in a script or in the console. For example, `window.performance.example = &quot;example&quot;`
2. `console.log(window.performance.example)` and see &quot;example&quot; printed
3. Open and close the developer tools (console) a few times.
4. `console.log(window.performance.example)` and see &quot;undefined&quot; printed

See this JS Fiddle http://jsfiddle.net/dss8wudw/3/ for demo setup.

Expected Results:
Ideally `window.performance` properties would remain set unless they are modified by a script (or the user refreshes or navigates to a new page). The value of `window.performance.example` should remain `&quot;example&quot;` until we delete it or set it to something else.

Configuration:

Browser: Safari Version 8.0 (10600.1.22)
OS: Mac OS X 10.10
Device: MacBook Air (11-inch, Mid 2012)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039513</commentid>
    <comment_count>1</comment_count>
    <who name="Alex Christensen">alex.christensen</who>
    <bug_when>2014-10-04 11:26:53 -0700</bug_when>
    <thetext>I think this is an issue with the JavaScript bindings and not with the underlying C++ object that is wrapped, and it may be intentionally resetting something.  Are there other built-in browser-provided objects that have similar behavior?  I unfortunately don&apos;t have access to build WebKit on Yosemite right now, but I could look into something that behaves similarly on Mavericks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1039519</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-10-04 11:54:14 -0700</bug_when>
    <thetext>Bug 122770 could be an example, it fixed the same problem for window.crypto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125752</commentid>
    <comment_count>3</comment_count>
    <who name="">krinklemail</who>
    <bug_when>2015-09-14 15:08:39 -0700</bug_when>
    <thetext>Downstream report from Wikimedia where this caused fatal
exceptions for Safari users reading Wikipedia:
https://phabricator.wikimedia.org/T112287#1638614

Test case:
http://codepen.io/Krinkle/debug/YywQJb

It has three checkpoints:
1) Immediately after definition.
2) From a &lt;script src&gt; loaded script.
3) After window.onload.

In Safari 8.0.8, sometimes &apos;performance.mark&apos; is defined at all thee, sometimes only at #1, sometimes at #1 and #2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1125756</commentid>
    <comment_count>4</comment_count>
    <who name="Derk-Jan Hartman">hartman.wiki</who>
    <bug_when>2015-09-14 15:15:42 -0700</bug_when>
    <thetext>Also confirmed as a problem in Version 9.0 (10601.1.56) btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228800</commentid>
    <comment_count>5</comment_count>
    <who name="Godfrey Chan">godfreykfc</who>
    <bug_when>2016-09-12 11:00:31 -0700</bug_when>
    <thetext>There is still an issue in 9.1.3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228850</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 12:22:29 -0700</bug_when>
    <thetext>I&apos;ll take a look soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228864</commentid>
    <comment_count>7</comment_count>
      <attachid>288603</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-09-12 13:09:04 -0700</bug_when>
    <thetext>Created attachment 288603
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228879</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-12 13:54:39 -0700</bug_when>
    <thetext>We can recommend a workaround for affected sites if they want to work properly with older versions of WebKit. I think that putting this line of code in will work around the bug:

    window.keepPerformanceAlive = window.performance;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228880</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-12 13:55:20 -0700</bug_when>
    <thetext>Note, that’s just a guess. Someone would need to test to be sure that works!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228896</commentid>
    <comment_count>10</comment_count>
      <attachid>288603</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 14:25:17 -0700</bug_when>
    <thetext>Comment on attachment 288603
Patch

Clearing flags on attachment: 288603

Committed r205823: &lt;http://trac.webkit.org/changeset/205823&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1228897</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-09-12 14:25:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>288603</attachid>
            <date>2016-09-12 13:09:04 -0700</date>
            <delta_ts>2016-09-12 14:25:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137407-20160912130631.patch</filename>
            <type>text/plain</type>
            <size>4305</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1ODE2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMGNjMmIwNzc5Zjk0YmI3
ZDRhOTI3MWJhOTNjNTQzODRiNjBiMTI1Mi4uMzM2OTI5ZTI0OTQ5NGVkNWFkNTM4ZmVjOTVmODli
YzQwMDNjNzIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE2LTA5LTEyICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgd2luZG93LnBlcmZvcm1hbmNl
IG9iamVjdCByZXNldHMgc2NyaXB0LWFwcGxpZWQgcHJvcGVydGllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NDA3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgTWFrZSBzdXJlIHRoZSB3aW5kb3cucGVy
Zm9ybWFuY2Ugd3JhcHBlciBzdGF5cyBhbGl2ZSBmb3IgYXMgbG9uZyBhcyB0aGUKKyAgICAgICAg
YXNzb2NpYXRlZCBmcmFtZSwgc2ltaWxhcmx5IHRvIHdoYXQgd2UgZG8gZm9yIHdpbmRvdy5zY3Jl
ZW4uCisKKyAgICAgICAgVGVzdDogZmFzdC9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS1vYmplY3Qt
Z2MuaHRtbAorCisgICAgICAgICogcGFnZS9QZXJmb3JtYW5jZS5pZGw6CisKIDIwMTYtMDktMTIg
IEJyYWR5IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIENyYXNoIGluIGNv
bS5hcHBsZS5XZWJDb3JlOiBXZWJDb3JlOjpOYXZpZ2F0b3JHYW1lcGFkOjpnYW1lcGFkRnJvbVBs
YXRmb3JtR2FtZXBhZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGVyZm9ybWFu
Y2UuaWRsIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwKaW5kZXggMzg5Mjg4
ZmU0NWYzMTkwNzNlYTcxOTY3MjNkZGYwMDUwMjhmMzhiZS4uNTg5OTVmZWI1ZGZmMDUwNjM3OWZl
NzdiOTAzZmI2NmRiNjM0YmQwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJm
b3JtYW5jZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QZXJmb3JtYW5jZS5pZGwKQEAg
LTMyLDYgKzMyLDcgQEAKIC8vIFNlZTogaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy93ZWJwZXJmL3Jh
dy1maWxlL3RpcC9zcGVjcy9OYXZpZ2F0aW9uVGltaW5nL092ZXJ2aWV3Lmh0bWwKIFsKICAgICBD
b25kaXRpb25hbD1XRUJfVElNSU5HLAorICAgIEdlbmVyYXRlSXNSZWFjaGFibGU9SW1wbEZyYW1l
LAogXSBpbnRlcmZhY2UgUGVyZm9ybWFuY2UgOiBFdmVudFRhcmdldCB7CiAgICAgcmVhZG9ubHkg
YXR0cmlidXRlIFBlcmZvcm1hbmNlTmF2aWdhdGlvbiBuYXZpZ2F0aW9uOwogICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBQZXJmb3JtYW5jZVRpbWluZyB0aW1pbmc7CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2NkZWRkZWJiOGNm
MjczNGNlNTYxODhiM2FkZDc2ODMzZTg0MjEyYi4uNWJmMjJlNDEwNzViZDg2MTM3MjZmZGJkMGVj
MmYzYTlmYTVjM2I0YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE2LTA5LTEyICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgd2luZG93LnBlcmZvcm1hbmNlIG9i
amVjdCByZXNldHMgc2NyaXB0LWFwcGxpZWQgcHJvcGVydGllcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3NDA3CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIGxheW91dCB0ZXN0IGNvdmVyYWdlLgor
CisgICAgICAgICogZmFzdC9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS1vYmplY3QtZ2MtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLW9i
amVjdC1nYy5odG1sOiBBZGRlZC4KKwogMjAxNi0wOS0xMiAgTWF0dCBCYWtlciAgPG1hdHRiYWtl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogT2JqZWN0LnNoYWxsb3dFcXVh
bCgpIHNob3VsZCByZXR1cm4gZmFsc2UgaWYgb2JqZWN0IHByb3RvdHlwZSBjaGFpbnMgZGlmZmVy
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLW9i
amVjdC1nYy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3BlcmZvcm1hbmNlL3BlcmZv
cm1hbmNlLW9iamVjdC1nYy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDhmYWZjZTU4NzA3ODJj
ZmVlYzZjNWJmYzMzOGRhMDM3YmVmNjY0ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvcGVyZm9ybWFuY2UvcGVyZm9ybWFuY2Utb2JqZWN0LWdjLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE2IEBACitUZXN0cyB0aGF0IHRoZSBQZXJmb3JtYW5jZSB3cmFwcGVyIHN0YXlzIGFs
aXZlIGZvciBhcyBsb25nIGFzIGl0cyBmcmFtZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2Vl
IGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUi
LgorCisKK1BBU1Mgd2luZG93LnBlcmZvcm1hbmNlLl9fcHJvdG9fXyBpcyBQZXJmb3JtYW5jZS5w
cm90b3R5cGUKK1BBU1Mgd2luZG93LnBlcmZvcm1hbmNlLmN1c3RvbVByb3BlcnR5IGlzIHVuZGVm
aW5lZC4KK3dpbmRvdy5wZXJmb3JtYW5jZS5jdXN0b21Qcm9wZXJ0eSA9IDEKK1BBU1Mgd2luZG93
LnBlcmZvcm1hbmNlLmN1c3RvbVByb3BlcnR5IGlzIDEKK1BBU1Mgd2luZG93LnBlcmZvcm1hbmNl
LmN1c3RvbVByb3BlcnR5IGlzIDEKK1BBU1Mgd2luZG93LnBlcmZvcm1hbmNlLmN1c3RvbVByb3Bl
cnR5IGlzIDEKK1BBU1Mgd2luZG93LnBlcmZvcm1hbmNlLmN1c3RvbVByb3BlcnR5IGlzIDEKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L3BlcmZvcm1hbmNlL3BlcmZvcm1hbmNlLW9iamVjdC1nYy5o
dG1sIGIvTGF5b3V0VGVzdHMvZmFzdC9wZXJmb3JtYW5jZS9wZXJmb3JtYW5jZS1vYmplY3QtZ2Mu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hM2FkYjk2NmQ1YTBmNzAzMDIxNWQwYjRkNDY0M2MyZGZmYjc2NGE3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9wZXJmb3JtYW5jZS9wZXJmb3Jt
YW5jZS1vYmplY3QtZ2MuaHRtbApAQCAtMCwwICsxLDMxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbigiVGVzdHMgdGhhdCB0aGUgUGVyZm9y
bWFuY2Ugd3JhcHBlciBzdGF5cyBhbGl2ZSBmb3IgYXMgbG9uZyBhcyBpdHMgZnJhbWUuIik7Citq
c1Rlc3RJc0FzeW5jID0gdHJ1ZTsKKworc2hvdWxkQmUoIndpbmRvdy5wZXJmb3JtYW5jZS5fX3By
b3RvX18iLCAiUGVyZm9ybWFuY2UucHJvdG90eXBlIik7CitzaG91bGRCZVVuZGVmaW5lZCgid2lu
ZG93LnBlcmZvcm1hbmNlLmN1c3RvbVByb3BlcnR5Iik7CitldmFsQW5kTG9nKCJ3aW5kb3cucGVy
Zm9ybWFuY2UuY3VzdG9tUHJvcGVydHkgPSAxIik7CitzaG91bGRCZSgid2luZG93LnBlcmZvcm1h
bmNlLmN1c3RvbVByb3BlcnR5IiwgIjEiKTsKK2djKCk7CitzaG91bGRCZSgid2luZG93LnBlcmZv
cm1hbmNlLmN1c3RvbVByb3BlcnR5IiwgIjEiKTsKKworb25sb2FkID0gZnVuY3Rpb24oKSB7Cisg
ICAgZ2MoKTsKKyAgICBzaG91bGRCZSgid2luZG93LnBlcmZvcm1hbmNlLmN1c3RvbVByb3BlcnR5
IiwgIjEiKTsKKyAgICBzZXRUaW1lb3V0KGNoZWNrQW5kRmluaXNoLCAwKTsKK30KKworZnVuY3Rp
b24gY2hlY2tBbmRGaW5pc2goKQoreworICAgIGdjKCk7CisgICAgc2hvdWxkQmUoIndpbmRvdy5w
ZXJmb3JtYW5jZS5jdXN0b21Qcm9wZXJ0eSIsICIxIik7CisgICAgZmluaXNoSlNUZXN0KCk7Cit9
Cis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>