OLD | NEW |
---|---|
(Empty) | |
1 var __chrome__ = chrome; | |
2 var chrome = (function(){ | |
3 | |
4 var shouldRegisterData = !!window.chrome && !!window.chrome.send; | |
5 | |
6 var callbackMap = { | |
7 'metricsHandler:logEventTime': 1, | |
8 'metricsHandler:recordInHistogram': 1, | |
9 'getApps': 'ntp.getAppsCallback', | |
10 'getRecentlyClosedTabs': 'ntp.setRecentlyClosedTabs', | |
11 'getMostVisited': 'ntp.setMostVisitedPages' | |
12 }; | |
13 | |
14 // TODO include automatically in the recorded data | |
15 var mockedThumbnailUrls = [ | |
16 "http---www.wikipedia.org-", | |
17 "http---www.deviantart.com-", | |
18 "http---wefunkradio.com-", | |
19 "http---youtube.com-", | |
20 "http---amazon.com-", | |
21 "http---nytimes.com-", | |
22 "http---news.ycombinator.com-", | |
23 "http---cnn.com-", | |
24 "http---ebay.com-", | |
25 "http---www.google.com-chrome-intl-en-welcome.html", | |
26 "https---chrome.google.com-webstore-hl-en" | |
27 ]; | |
28 | |
29 | |
30 //---------------------------------------------------------------------------- | |
31 // Internals | |
32 //---------------------------------------------------------------------------- | |
33 | |
34 var dataMap = {}; | |
35 var recordedDataMap = {}; | |
36 var isInitialized = false; | |
37 var thumbnailUrlList = []; | |
38 | |
39 function initialize() { | |
40 if (shouldRegisterData || !namespace('ntp')) { | |
41 return; | |
42 } | |
43 isInitialized = true; | |
44 namespace('ntp.getThumbnailUrl', mockGetThumbnailUrl); | |
45 } | |
46 | |
47 function namespace(str, data) { | |
48 var ns = str.split('.'), name, object = window; | |
49 for (var i = 0, l = ns.length; i < l; i++) { | |
50 name = ns[i]; | |
51 if (data && i == (l - 1)) { | |
52 object = object[name] = data; | |
53 } else { | |
54 object = object[name]; | |
55 } | |
56 } | |
57 return object == window ? null : object; | |
58 } | |
59 | |
60 function copyArray(arr) { | |
61 return Array.prototype.slice.call(arr, 0); | |
62 } | |
63 | |
64 function interceptCallback(message, callbackNamespace) { | |
65 var original = namespace(callbackNamespace); | |
66 namespace(callbackNamespace, function(){ | |
67 recordedDataMap[message] = copyArray(arguments); | |
68 var result = original.apply(window, arguments); | |
69 namespace(callbackNamespace, original); | |
70 return result; | |
71 }); | |
72 } | |
73 | |
74 function interceptLoadData() { | |
75 window.addEventListener('load', function() { | |
76 recordedDataMap['__loadTimeData__'] = loadTimeData.data_; | |
77 }); | |
78 } | |
79 | |
80 function mockGetThumbnailUrl(url) { | |
81 url = url.replace(/[\:\/\?\=]/g, '-'); | |
82 | |
83 if (thumbnailUrlList.length == 0) { | |
84 thumbnailUrlList = copyArray(mockedThumbnailUrls); | |
85 } | |
86 var mockUrl; | |
87 var index = thumbnailUrlList.indexOf(url); | |
88 if (index) { | |
89 mockUrl = thumbnailUrlList.splice(index, 0); | |
jeremycho_google
2012/07/31 03:09:16
What is this for? Shouldn't splice(index, 0) alwa
pedrosimonetti2
2012/08/03 18:14:01
Fixed.
On 2012/07/31 03:09:16, jeremycho wrote:
| |
90 } else { | |
91 mockUrl = thumbnailUrlList.shift(); | |
92 } | |
93 | |
94 mockUrl = 'mock/images/thumb/' + mockUrl + '.png'; | |
95 return mockUrl; | |
96 } | |
97 | |
98 function mockLoadData() { | |
99 if (loadTimeData) { | |
100 loadTimeData.data = dataMap['__loadTimeData__']; | |
101 } | |
102 } | |
103 | |
104 | |
105 //---------------------------------------------------------------------------- | |
106 // ChromeMock implementation | |
107 //---------------------------------------------------------------------------- | |
108 | |
109 ChromeMock = { | |
110 | |
111 mock: function(newDataMap) { | |
112 if (newDataMap) { | |
113 dataMap = newDataMap; | |
114 if (!shouldRegisterData) { | |
115 mockLoadData(); | |
116 } | |
117 } else { | |
118 return recordedDataMap; | |
119 } | |
120 }, | |
121 | |
122 send: function() { | |
123 //console.log(message, arguments.length, arguments); | |
124 if (!isInitialized) { | |
125 initialize(); | |
126 } | |
127 | |
128 var message = arguments[0]; | |
129 var souldCallChromeSend = false; | |
130 | |
131 var data; | |
132 var callback; | |
133 var callbackNamespace; | |
134 | |
135 if (callbackMap.hasOwnProperty(message)) { | |
136 | |
137 callbackNamespace = callbackMap[message]; | |
138 | |
139 if (shouldRegisterData) { | |
140 if (callbackNamespace !== 1) { | |
141 interceptCallback(message, callbackNamespace); | |
142 } | |
143 } else { | |
144 if (dataMap.hasOwnProperty(message)) { | |
145 data = dataMap[message]; | |
146 callback = namespace(callbackNamespace); | |
147 setTimeout(function(){ | |
148 callback.apply(window, data); | |
149 }, 0); | |
150 } else { | |
151 if (callbackNamespace !== 1) { | |
152 console.warn('No mock registered for message "%s".', message); | |
153 } | |
154 } | |
155 } | |
156 | |
157 } else { | |
158 souldCallChromeSend = true; | |
159 console.warn('No callback data registered for message "%s".', message); | |
160 } | |
161 | |
162 souldCallChromeSend = souldCallChromeSend || shouldRegisterData; | |
jeremycho_google
2012/07/31 03:09:16
should
pedrosimonetti2
2012/08/03 18:14:01
Done.
| |
163 if (souldCallChromeSend) { | |
164 if (__chrome__ && __chrome__.send) { | |
165 __chrome__.send(message); | |
166 } | |
167 } | |
168 }, | |
169 }; | |
170 | |
171 //---------------------------------------------------------------------------- | |
172 // ChromeMock initialization | |
173 //---------------------------------------------------------------------------- | |
174 | |
175 if (shouldRegisterData) { | |
176 interceptLoadData(); | |
177 } | |
178 | |
179 return ChromeMock; | |
180 })(); | |
181 | |
OLD | NEW |