Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: chrome/browser/resources/file_manager/js/util.js

Issue 12304013: Introduce Image loader extension. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Simplified. Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 * Namespace for utility functions. 6 * Namespace for utility functions.
7 */ 7 */
8 var util = {}; 8 var util = {};
9 9
10 /** 10 /**
(...skipping 1141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1152 1152
1153 var overCapacity = Math.max(0, keys.length - util.AppCache.CAPACITY); 1153 var overCapacity = Math.max(0, keys.length - util.AppCache.CAPACITY);
1154 1154
1155 var itemsToDelete = Math.max(obsolete, overCapacity); 1155 var itemsToDelete = Math.max(obsolete, overCapacity);
1156 for (var i = 0; i != itemsToDelete; i++) { 1156 for (var i = 0; i != itemsToDelete; i++) {
1157 delete map[keys[i]]; 1157 delete map[keys[i]];
1158 } 1158 }
1159 }; 1159 };
1160 1160
1161 /** 1161 /**
1162 * RemoteImageLoader loads an image from a remote url.
1163 *
1164 * Fetches a blob via XHR, converts it to a data: url and assigns to img.src.
1165 * @constructor
1166 */
1167 util.RemoteImageLoader = function() {};
1168
1169 /**
1170 * @param {Image} image Image element.
1171 * @param {string} url Remote url to load into the image.
1172 */
1173 util.RemoteImageLoader.prototype.load = function(image, url) {
1174 this.onSuccess_ = function(dataURL) { image.src = dataURL };
1175 this.onError_ = function() { image.onerror() };
1176
1177 var xhr = new XMLHttpRequest();
1178 xhr.responseType = 'blob';
1179 xhr.onload = function() {
1180 if (xhr.status == 200) {
1181 var reader = new FileReader;
1182 reader.onload = function(e) {
1183 this.onSuccess_(e.target.result);
1184 }.bind(this);
1185 reader.onerror = this.onError_;
1186 reader.readAsDataURL(xhr.response);
1187 } else {
1188 this.onError_();
1189 }
1190 }.bind(this);
1191 xhr.onerror = this.onError_;
1192
1193 try {
1194 xhr.open('GET', url, true);
1195 xhr.send();
1196 } catch (e) {
1197 console.log(e);
1198 this.onError_();
1199 }
1200 };
1201
1202 /**
1203 * Cancels the loading.
1204 */
1205 util.RemoteImageLoader.prototype.cancel = function() {
1206 // We cannot really cancel the XHR.send and FileReader.readAsDataURL,
1207 // silencing the callbacks instead.
1208 this.onSuccess_ = this.onError_ = function() {};
1209 };
1210
1211 /**
1212 * Load an image. 1162 * Load an image.
1213 * 1163 *
1214 * In packaged apps img.src is not allowed to point to http(s)://.
1215 * For such urls util.RemoteImageLoader is used.
1216 *
1217 * @param {Image} image Image element. 1164 * @param {Image} image Image element.
1218 * @param {string} url Source url. 1165 * @param {string} url Source url.
1219 * @return {util.RemoteImageLoader?} RemoteImageLoader object reference, use it 1166 * @param {Object=} opt_options Hash array of options, eg. width, height,
1220 * to cancel the loading. 1167 * maxWidth, maxHeight, scale, cache.
1168 * @param {function()=} opt_isValid Function returning false iff the task
1169 * is not valid and should be aborted.
1170 * @return {?number} Task identifier or null if fetched immediately from
1171 * cache.
1221 */ 1172 */
1222 util.loadImage = function(image, url) { 1173 util.loadImage = function(image, url, opt_options, opt_isValid) {
1223 if (util.platform.v2() && url.match(/^http(s):/)) { 1174 return ImageLoader.Client.loadToImage(url,
1224 var imageLoader = new util.RemoteImageLoader(); 1175 image,
1225 imageLoader.load(image, url); 1176 opt_options || {},
1226 return imageLoader; 1177 function() { },
1227 } 1178 function() { image.onerror(); },
1228 1179 opt_isValid);
1229 // OK to load directly.
1230 image.src = url;
1231 return null;
1232 }; 1180 };
1233 1181
1234 /** 1182 /**
1183 * Cancels loading an image.
1184 * @param {number} taskId Task identifier returned by util.loadImage().
1185 */
1186 util.cancelLoadImage = function(taskId) {
1187 ImageLoader.Client.getInstance().cancel(taskId);
1188 };
1189
1190 /**
1235 * Finds proerty descriptor in the object prototype chain. 1191 * Finds proerty descriptor in the object prototype chain.
1236 * @param {Object} object The object. 1192 * @param {Object} object The object.
1237 * @param {string} propertyName The property name. 1193 * @param {string} propertyName The property name.
1238 * @return {Object} Property descriptor. 1194 * @return {Object} Property descriptor.
1239 */ 1195 */
1240 util.findPropertyDescriptor = function(object, propertyName) { 1196 util.findPropertyDescriptor = function(object, propertyName) {
1241 for (var p = object; p; p = Object.getPrototypeOf(p)) { 1197 for (var p = object; p; p = Object.getPrototypeOf(p)) {
1242 var d = Object.getOwnPropertyDescriptor(p, propertyName); 1198 var d = Object.getOwnPropertyDescriptor(p, propertyName);
1243 if (d) 1199 if (d)
1244 return d; 1200 return d;
1245 } 1201 }
1246 return null; 1202 return null;
1247 }; 1203 };
1248 1204
1249 /** 1205 /**
1250 * Calls inherited property setter (useful when property is 1206 * Calls inherited property setter (useful when property is
1251 * overriden). 1207 * overriden).
1252 * @param {Object} object The object. 1208 * @param {Object} object The object.
1253 * @param {string} propertyName The property name. 1209 * @param {string} propertyName The property name.
1254 * @param {*} value Value to set. 1210 * @param {*} value Value to set.
1255 */ 1211 */
1256 util.callInheritedSetter = function(object, propertyName, value) { 1212 util.callInheritedSetter = function(object, propertyName, value) {
1257 var d = util.findPropertyDescriptor(Object.getPrototypeOf(object), 1213 var d = util.findPropertyDescriptor(Object.getPrototypeOf(object),
1258 propertyName); 1214 propertyName);
1259 d.set.call(object, value); 1215 d.set.call(object, value);
1260 }; 1216 };
OLDNEW
« no previous file with comments | « chrome/browser/resources/file_manager/js/photo/ribbon.js ('k') | chrome/browser/resources/file_manager/main.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698