15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/renderer/playback_extension.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "v8/include/v8.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kPlaybackExtensionName[] = "v8/PlaybackMode";
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions_v8 {
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)v8::Extension* PlaybackExtension::Get() {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  v8::Extension* extension = new v8::Extension(
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      kPlaybackExtensionName,
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "(function () {"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  var orig_date = Date;"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  var x = 0;"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  var time_seed = 1204251968254;"
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  Math.random = function() {"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "    x += .1;"
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "    return (x % 1);"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  };"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  Date = function() {"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "    if (this instanceof Date) {"
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "      switch (arguments.length) {"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "        case 0: return new orig_date(time_seed += 50);"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "        case 1: return new orig_date(arguments[0]);"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "        default: return new orig_date(arguments[0], arguments[1],"
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "            arguments.length >= 3 ? arguments[2] : 1,"
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "            arguments.length >= 4 ? arguments[3] : 0,"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "            arguments.length >= 5 ? arguments[4] : 0,"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "            arguments.length >= 6 ? arguments[5] : 0,"
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "            arguments.length >= 7 ? arguments[6] : 0);"
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "      }"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "    }"
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "    return new Date().toString();"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  };"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  Date.__proto__ = orig_date;"
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  Date.prototype.constructor = Date;"
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  orig_date.now = function() {"
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "    return new Date().getTime();"
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "  };"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "})()");
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return extension;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace extensions_v8
49