| // Copyright (c) 2011 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. |
| |
| #include "chrome/renderer/playback_extension.h" |
| |
| #include "v8/include/v8.h" |
| |
| const char kPlaybackExtensionName[] = "v8/PlaybackMode"; |
| |
| namespace extensions_v8 { |
| |
| v8::Extension* PlaybackExtension::Get() { |
| v8::Extension* extension = new v8::Extension( |
| kPlaybackExtensionName, |
| "(function () {" |
| " var orig_date = Date;" |
| " var x = 0;" |
| " var time_seed = 1204251968254;" |
| " Math.random = function() {" |
| " x += .1;" |
| " return (x % 1);" |
| " };" |
| " Date = function() {" |
| " if (this instanceof Date) {" |
| " switch (arguments.length) {" |
| " case 0: return new orig_date(time_seed += 50);" |
| " 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.constructor = Date;" |
| " orig_date.now = function() {" |
| " return new Date().getTime();" |
| " };" |
| "})()"); |
| return extension; |
| } |
| |
| } // namespace extensions_v8 |