Chromium Code Reviews| Index: web_page_replay_go/deterministic.js |
| diff --git a/web_page_replay_go/deterministic.js b/web_page_replay_go/deterministic.js |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5bd7707a0538da8858687e1475abaad82b891bdf |
| --- /dev/null |
| +++ b/web_page_replay_go/deterministic.js |
| @@ -0,0 +1,68 @@ |
| +// Copyright 2017 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +'use strict'; |
| + |
| +(function () { |
| + var random_count = 0; |
| + var random_count_threshold = 25; |
| + var random_seed = 0.462; |
| + Math.random = function() { |
| + random_count++; |
| + if (random_count > random_count_threshold){ |
| + random_seed += 0.1; |
| + random_count = 1; |
| + } |
| + return (random_seed % 1); |
| + }; |
| + if (typeof(crypto) == 'object' && |
| + typeof(crypto.getRandomValues) == 'function') { |
| + crypto.getRandomValues = function(arr) { |
| + var scale = Math.pow(256, arr.BYTES_PER_ELEMENT); |
| + for (var i = 0; i < arr.length; i++) { |
| + arr[i] = Math.floor(Math.random() * scale); |
| + } |
| + return arr; |
| + }; |
| + } |
| +})(); |
| +(function () { |
| + var date_count = 0; |
| + var date_count_threshold = 25; |
| + var orig_date = Date; |
| + var time_seed = 1204251968254; |
|
nednguyen
2017/06/16 17:13:05
at some point we should fix the time_see here to b
|
| + Date = function() { |
| + if (this instanceof Date) { |
| + date_count++; |
| + if (date_count > date_count_threshold){ |
| + time_seed += 50; |
| + date_count = 1; |
| + } |
| + switch (arguments.length) { |
| + case 0: return new orig_date(time_seed); |
| + case 1: return new orig_date(arguments[0]); |
| + default: return new orig_date(arguments[0], arguments[1], |
| + arguments.length >= 3 ? arguments[2] : 1, |
| + arguments.length >= 4 ? arguments[3] : 0, |
| + arguments.length >= 5 ? arguments[4] : 0, |
| + arguments.length >= 6 ? arguments[5] : 0, |
| + arguments.length >= 7 ? arguments[6] : 0); |
| + } |
| + } |
| + return new Date().toString(); |
| + }; |
| + Date.__proto__ = orig_date; |
| + Date.prototype = orig_date.prototype; |
| + Date.prototype.constructor = Date; |
| + orig_date.now = function() { |
| + return new Date().getTime(); |
| + }; |
| + orig_date.prototype.getTimezoneOffset = function() { |
| + var dst2010Start = 1268560800000; |
| + var dst2010End = 1289120400000; |
| + if (this.getTime() >= dst2010Start && this.getTime() < dst2010End) |
| + return 420; |
| + return 480; |
| + }; |
| +})(); |