OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 /** | 5 /** |
6 * The global object. | 6 * The global object. |
7 * @type {!Object} | 7 * @type {!Object} |
8 * @const | 8 * @const |
9 */ | 9 */ |
10 var global = this; | 10 var global = this; |
(...skipping 20 matching lines...) Expand all Loading... | |
31 // restore | 31 // restore |
32 global[callbackName] = old; | 32 global[callbackName] = old; |
33 | 33 |
34 var args = Array.prototype.slice.call(arguments); | 34 var args = Array.prototype.slice.call(arguments); |
35 return callback.apply(global, args); | 35 return callback.apply(global, args); |
36 }; | 36 }; |
37 chrome.send(name, params); | 37 chrome.send(name, params); |
38 } | 38 } |
39 | 39 |
40 /** | 40 /** |
41 * Returns the scale factors supported by this platform. | |
42 * @return {array} The supported scale factors. | |
43 */ | |
44 function getSupportedScaleFactors() { | |
45 var supportedScaleFactors = []; | |
46 if (cr.isMac || cr.isChromeOS) { | |
47 supportedScaleFactors.push(1); | |
48 supportedScaleFactors.push(2); | |
49 } else { | |
50 // Windows must be restarted to display at a different scale factor. | |
51 supportedScaleFactors.push(window.devicePixelRatio); | |
52 } | |
53 return supportedScaleFactors; | |
54 } | |
55 | |
56 /** | |
41 * Generates a CSS url string. | 57 * Generates a CSS url string. |
42 * @param {string} s The URL to generate the CSS url for. | 58 * @param {string} s The URL to generate the CSS url for. |
43 * @return {string} The CSS url string. | 59 * @return {string} The CSS url string. |
44 */ | 60 */ |
45 function url(s) { | 61 function url(s) { |
46 // http://www.w3.org/TR/css3-values/#uris | 62 // http://www.w3.org/TR/css3-values/#uris |
47 // Parentheses, commas, whitespace characters, single quotes (') and double | 63 // Parentheses, commas, whitespace characters, single quotes (') and double |
48 // quotes (") appearing in a URI must be escaped with a backslash | 64 // quotes (") appearing in a URI must be escaped with a backslash |
49 var s2 = s.replace(/(\(|\)|\,|\s|\'|\"|\\)/g, '\\$1'); | 65 var s2 = s.replace(/(\(|\)|\,|\s|\'|\"|\\)/g, '\\$1'); |
50 // WebKit has a bug when it comes to URLs that end with \ | 66 // WebKit has a bug when it comes to URLs that end with \ |
51 // https://bugs.webkit.org/show_bug.cgi?id=28885 | 67 // https://bugs.webkit.org/show_bug.cgi?id=28885 |
52 if (/\\\\$/.test(s2)) { | 68 if (/\\\\$/.test(s2)) { |
53 // Add a space to work around the WebKit bug. | 69 // Add a space to work around the WebKit bug. |
54 s2 += ' '; | 70 s2 += ' '; |
55 } | 71 } |
56 return 'url("' + s2 + '")'; | 72 return 'url("' + s2 + '")'; |
57 } | 73 } |
58 | 74 |
59 /** | 75 /** |
76 * Generates a CSS -webkit-image-set for a chrome:// url. | |
77 * An entry in the image set is added for each of getSupportedScaleFactors(). | |
78 * The scale-factor-specific url is generated by replacing the first instance of | |
79 * 'scalefactor' in |path| with the numeric scale factor. | |
80 * @param {string} path The URL to generate an image set for. | |
81 * 'scalefactor' should be a substring of |path|. | |
82 * @return {string} The CSS -webkit-image-set. | |
83 */ | |
84 function imageset(path) { | |
85 var supportedScaleFactors = getSupportedScaleFactors(); | |
86 | |
87 var replaceStartIndex = path.indexOf('scalefactor'); | |
88 if (replaceStartIndex < 0) | |
89 return url(path); | |
90 | |
91 var s = ''; | |
92 for (var i = 0; i < supportedScaleFactors.length; ++i) { | |
93 var scaleFactor = supportedScaleFactors[i]; | |
94 var pathWithScaleFactor = path.substr(0, replaceStartIndex) + scaleFactor + | |
95 path.substr(replaceStartIndex + 11); | |
Evan Stade
2013/01/04 21:43:44
what is this magic 11? use 'scalefactor'.length
pkotwicz
2013/01/04 23:06:53
Done.
| |
96 | |
97 s += url(pathWithScaleFactor) + ' ' + scaleFactor + 'x'; | |
Evan Stade
2013/01/04 21:43:44
indentation is wrong here
pkotwicz
2013/01/04 23:06:53
Done.
| |
98 | |
99 if (i != supportedScaleFactors.length - 1) | |
100 s += ', '; | |
101 } | |
102 return '-webkit-image-set(' + s + ')'; | |
103 } | |
104 | |
105 /** | |
60 * Parses query parameters from Location. | 106 * Parses query parameters from Location. |
61 * @param {string} location The URL to generate the CSS url for. | 107 * @param {string} location The URL to generate the CSS url for. |
62 * @return {object} Dictionary containing name value pairs for URL | 108 * @return {object} Dictionary containing name value pairs for URL |
63 */ | 109 */ |
64 function parseQueryParams(location) { | 110 function parseQueryParams(location) { |
65 var params = {}; | 111 var params = {}; |
66 var query = unescape(location.search.substring(1)); | 112 var query = unescape(location.search.substring(1)); |
67 var vars = query.split('&'); | 113 var vars = query.split('&'); |
68 for (var i = 0; i < vars.length; i++) { | 114 for (var i = 0; i < vars.length; i++) { |
69 var pair = vars[i].split('='); | 115 var pair = vars[i].split('='); |
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
221 */ | 267 */ |
222 function appendParam(url, key, value) { | 268 function appendParam(url, key, value) { |
223 var param = encodeURIComponent(key) + '=' + encodeURIComponent(value); | 269 var param = encodeURIComponent(key) + '=' + encodeURIComponent(value); |
224 | 270 |
225 if (url.indexOf('?') == -1) | 271 if (url.indexOf('?') == -1) |
226 return url + '?' + param; | 272 return url + '?' + param; |
227 return url + '&' + param; | 273 return url + '&' + param; |
228 } | 274 } |
229 | 275 |
230 /** | 276 /** |
231 * Creates a new URL for a favicon request. | 277 * Creates a CSS -webkit-image-set for a favicon request. |
278 * @param {string} url The url for the favicon. | |
279 * @param {number=} opt_size Optional preferred size of the favicon. | |
280 * @param {boolean=} opt_sessionFavicon Optional flag to indicate if | |
281 * requesting a session favicon. | |
282 * @return {string} -webkit-image-set for the favicon. | |
283 */ | |
284 function getFaviconImageSet(url, opt_size, opt_sessionFavicon) { | |
285 var size = opt_size || 16; | |
286 var type = opt_sessionFavicon ? 'session-favicon' : 'favicon'; | |
287 return imageset( | |
288 'chrome://' + type + '/size/' + size + '@scalefactorx/' + url); | |
289 } | |
290 | |
291 /** | |
292 * Creates a new URL for a request of the 1x favicon. | |
232 * @param {string} url The url for the favicon. | 293 * @param {string} url The url for the favicon. |
233 * @param {number=} opt_size Optional preferred size of the favicon. | 294 * @param {number=} opt_size Optional preferred size of the favicon. |
234 * @param {boolean=} opt_sessionFavicon Optional flag to indicate if | 295 * @param {boolean=} opt_sessionFavicon Optional flag to indicate if |
235 * requesting a session favicon. | 296 * requesting a session favicon. |
236 * @return {string} Updated URL for the favicon. | 297 * @return {string} Updated URL for the favicon. |
237 */ | 298 */ |
238 function getFaviconUrl(url, opt_size, opt_sessionFavicon) { | 299 function get1xFaviconUrl(url, opt_size, opt_sessionFavicon) { |
Evan Stade
2013/01/04 21:43:44
not a fan of this function name. Can you call it U
pkotwicz
2013/01/04 23:06:53
Renamed to getFaviconUrlForDevicePixelRatio().
Did
| |
239 var size = opt_size || 16; | 300 var size = opt_size || 16; |
240 var type = opt_sessionFavicon ? 'session-favicon' : 'favicon'; | 301 var type = opt_sessionFavicon ? 'session-favicon' : 'favicon'; |
241 return 'chrome://' + type + '/size/' + size + '@' + | 302 return 'chrome://' + type + '/size/' + size + '@1x/' + url; |
242 window.devicePixelRatio + 'x/' + url; | |
243 } | 303 } |
244 | 304 |
245 /** | 305 /** |
246 * Creates an element of a specified type with a specified class name. | 306 * Creates an element of a specified type with a specified class name. |
247 * @param {string} type The node type. | 307 * @param {string} type The node type. |
248 * @param {string} className The class name to use. | 308 * @param {string} className The class name to use. |
249 * @return {Element} The created element. | 309 * @return {Element} The created element. |
250 */ | 310 */ |
251 function createElementWithClassName(type, className) { | 311 function createElementWithClassName(type, className) { |
252 var elm = document.createElement(type); | 312 var elm = document.createElement(type); |
253 elm.className = className; | 313 elm.className = className; |
254 return elm; | 314 return elm; |
255 } | 315 } |
OLD | NEW |