| Index: chrome/browser/resources/ntp_search/mock/mock.js
|
| diff --git a/chrome/browser/resources/ntp_search/mock/mock.js b/chrome/browser/resources/ntp_search/mock/mock.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..aa98f5771d27bb4c7de4a9b6ace94c71c67b594c
|
| --- /dev/null
|
| +++ b/chrome/browser/resources/ntp_search/mock/mock.js
|
| @@ -0,0 +1,257 @@
|
| +// Copyright (c) 2012 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.
|
| +
|
| +// TODO(pedrosimonetti): document how to generate the data pseudo-automatically.
|
| +!/^chrome:\/\/./.test(location.href) && (function() {
|
| +
|
| + var __chrome__ = chrome;
|
| + var shouldRegisterData = !!window.chrome && !!window.chrome.send;
|
| +
|
| + var NO_CALLBACK = 1;
|
| +
|
| + // Only messages registered in the callback map will be intercepted.
|
| + var callbackMap = {
|
| + 'metricsHandler:logEventTime': NO_CALLBACK,
|
| + 'metricsHandler:recordInHistogram': NO_CALLBACK,
|
| + 'getApps': 'ntp.getAppsCallback',
|
| + 'getRecentlyClosedTabs': 'ntp.setRecentlyClosedTabs',
|
| + 'getMostVisited': 'ntp.setMostVisitedPages'
|
| + };
|
| +
|
| + // TODO(pedrosimonetti): include automatically in the recorded data
|
| + // TODO(pedrosimonetti): document the special char replacement
|
| + var mockedThumbnailUrls = [
|
| + 'http---www.wikipedia.org-',
|
| + 'http---www.deviantart.com-',
|
| + 'http---wefunkradio.com-',
|
| + 'http---youtube.com-',
|
| + 'http---amazon.com-',
|
| + 'http---nytimes.com-',
|
| + 'http---news.ycombinator.com-',
|
| + 'http---cnn.com-',
|
| + 'http---ebay.com-',
|
| + 'http---www.google.com-chrome-intl-en-welcome.html',
|
| + 'https---chrome.google.com-webstore-hl-en'
|
| + ];
|
| +
|
| +
|
| + //----------------------------------------------------------------------------
|
| + // Internals
|
| + //----------------------------------------------------------------------------
|
| +
|
| + var dataMap = {};
|
| + var recordedDataMap = {};
|
| + var isInitialized = false;
|
| + var thumbnailUrlList = [];
|
| +
|
| + function initialize() {
|
| + if (shouldRegisterData || !namespace('ntp')) {
|
| + return;
|
| + }
|
| + isInitialized = true;
|
| + namespace('ntp.getThumbnailUrl', mockGetThumbnailUrl);
|
| +
|
| + var data = loadTimeData.data_;
|
| + document.documentElement.dir = data.textdirection;
|
| + document.body.style.fontSize = data.fontsize;
|
| + document.body.style.fontFamily = data.fontfamily;
|
| + }
|
| +
|
| + function namespace(str, data) {
|
| + var ns = str.split('.'), name, object = window;
|
| + for (var i = 0, l = ns.length; i < l; i++) {
|
| + name = ns[i];
|
| + if (data && i == (l - 1)) {
|
| + object = object[name] = data;
|
| + } else {
|
| + object = object[name];
|
| + }
|
| + }
|
| + return object == window ? null : object;
|
| + }
|
| +
|
| + function copyArray(arr) {
|
| + return Array.prototype.slice.call(arr, 0);
|
| + }
|
| +
|
| + function interceptCallback(message, callbackNamespace) {
|
| + var original = namespace(callbackNamespace);
|
| + namespace(callbackNamespace, function() {
|
| + recordedDataMap[message] = copyArray(arguments);
|
| + var result = original.apply(window, arguments);
|
| + namespace(callbackNamespace, original);
|
| + return result;
|
| + });
|
| + }
|
| +
|
| + function interceptLoadData() {
|
| + window.addEventListener('load', function() {
|
| + recordedDataMap['__loadTimeData__'] = loadTimeData.data_;
|
| + });
|
| + }
|
| +
|
| + function mockGetThumbnailUrl(url) {
|
| + url = url.replace(/[\:\/\?\=]/g, '-');
|
| +
|
| + if (thumbnailUrlList.length == 0) {
|
| + thumbnailUrlList = copyArray(mockedThumbnailUrls);
|
| + }
|
| + var mockUrl;
|
| + var index = thumbnailUrlList.indexOf(url);
|
| + if (index != -1) {
|
| + // Remove an element from a particular index.
|
| + mockUrl = thumbnailUrlList.splice(index, 1);
|
| + } else {
|
| + // Remove the first element.
|
| + mockUrl = thumbnailUrlList.shift();
|
| + }
|
| +
|
| + mockUrl = 'mock/images/' + mockUrl + '.jpg';
|
| + return mockUrl;
|
| + }
|
| +
|
| + function mockLoadData() {
|
| + if (loadTimeData) {
|
| + loadTimeData.data = dataMap['__loadTimeData__'];
|
| + }
|
| + }
|
| +
|
| +
|
| + //----------------------------------------------------------------------------
|
| + // ChromeMock implementation
|
| + //----------------------------------------------------------------------------
|
| +
|
| + ChromeMock = {
|
| + mock: function(newDataMap) {
|
| + if (newDataMap) {
|
| + dataMap = newDataMap;
|
| + if (!shouldRegisterData) {
|
| + mockLoadData();
|
| + }
|
| + } else {
|
| + return recordedDataMap;
|
| + }
|
| + },
|
| +
|
| + send: function() {
|
| + if (!isInitialized) {
|
| + initialize();
|
| + }
|
| +
|
| + var message = arguments[0];
|
| + var shouldCallChromeSend = false;
|
| +
|
| + var data;
|
| + var callback;
|
| + var callbackNamespace;
|
| +
|
| + if (callbackMap.hasOwnProperty(message)) {
|
| + callbackNamespace = callbackMap[message];
|
| +
|
| + if (shouldRegisterData) {
|
| + if (callbackNamespace !== NO_CALLBACK) {
|
| + interceptCallback(message, callbackNamespace);
|
| + }
|
| + } else {
|
| + if (dataMap.hasOwnProperty(message)) {
|
| + data = dataMap[message];
|
| + callback = namespace(callbackNamespace);
|
| + setTimeout(function() {
|
| + callback.apply(window, data);
|
| + }, 0);
|
| + } else {
|
| + if (callbackNamespace !== NO_CALLBACK) {
|
| + console.warn('No mock registered for message "%s".', message);
|
| + }
|
| + }
|
| + }
|
| + } else {
|
| + shouldCallChromeSend = true;
|
| + console.warn('No callback data registered for message "%s".', message);
|
| + }
|
| +
|
| + shouldCallChromeSend = shouldCallChromeSend || shouldRegisterData;
|
| + if (shouldCallChromeSend) {
|
| + if (__chrome__ && __chrome__.send) {
|
| + __chrome__.send(message);
|
| + }
|
| + }
|
| + },
|
| + };
|
| +
|
| + //----------------------------------------------------------------------------
|
| + // Debug
|
| + //----------------------------------------------------------------------------
|
| +
|
| + var debugArgs = {};
|
| + var debugStylesheet = null;
|
| + var animationSelectorSpeedMap = {
|
| + '#page-list': 200,
|
| + '.tile-grid': 200,
|
| + '.tile-grid-content': 200,
|
| + '.tile-row': 200,
|
| + '.animate-tile .tile-cell': 200,
|
| + '.debug .animate-tile .tile-cell': 200
|
| + };
|
| +
|
| + function adjustAnimationSpeed(slownessFactor) {
|
| + slownessFactor = slownessFactor || 1;
|
| +
|
| + var animationRules = [];
|
| + for (var selector in animationSelectorSpeedMap) {
|
| + if (animationSelectorSpeedMap.hasOwnProperty(selector)) {
|
| + animationRules.push(selector + ' { -webkit-transition-duration: ' +
|
| + Math.round(animationSelectorSpeedMap[selector] * slownessFactor) +
|
| + 'ms !important; }\n');
|
| + }
|
| + }
|
| +
|
| + var doc = document;
|
| + debugStylesheet = doc.getElementById('debugStylesheet');
|
| + if (debugStylesheet) {
|
| + debugStylesheet.parentElement.removeChild(debugStylesheet);
|
| + }
|
| + debugStylesheet = doc.createElement('style');
|
| + debugStylesheet.id = 'debugStylesheet';
|
| + debugStylesheet.textContent = animationRules.join('');
|
| + doc.querySelector('head').appendChild(debugStylesheet);
|
| + }
|
| +
|
| + function getArgs() {
|
| + var url = location.href;
|
| + var parts = url.split('?');
|
| + var args = parts[1];
|
| + if (args) {
|
| + var pairs = args.split('&');
|
| + for (var i = 0, l = pairs.length; i < l; i++) {
|
| + var pair = pairs[i];
|
| + var data = pair.split('=');
|
| + var key = data[0];
|
| + var value = data[1];
|
| + debugArgs[key] = typeof value == 'undefined' ? true :
|
| + parseInt(value) ? parseInt(value) : value;
|
| + }
|
| + }
|
| + }
|
| +
|
| + window.addEventListener('load', function() {
|
| + getArgs();
|
| +
|
| + if (debugArgs.debug)
|
| + document.body.classList.add('debug');
|
| +
|
| + if (debugArgs.slownessFactor)
|
| + adjustAnimationSpeed(debugArgs.slownessFactor);
|
| + });
|
| +
|
| + //----------------------------------------------------------------------------
|
| + // ChromeMock initialization
|
| + //----------------------------------------------------------------------------
|
| +
|
| + if (shouldRegisterData) {
|
| + interceptLoadData();
|
| + }
|
| +
|
| + window.chrome = ChromeMock;
|
| +})();
|
|
|