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

Side by Side Diff: chrome/browser/resources/file_manager/js/image_editor/image_view.js

Issue 9664045: [File Manager] Use content url for playing media files from a gdata directory (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments Created 8 years, 9 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 * The overlay displaying the image. 6 * The overlay displaying the image.
7 */ 7 */
8 function ImageView(container, viewport) { 8 function ImageView(container, viewport) {
9 this.container_ = container; 9 this.container_ = container;
10 this.viewport_ = viewport; 10 this.viewport_ = viewport;
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 173
174 var self = this; 174 var self = this;
175 175
176 this.contentID_ = id; 176 this.contentID_ = id;
177 177
178 if (FileType.getMediaType(source) == 'video') { 178 if (FileType.getMediaType(source) == 'video') {
179 var video = this.document_.createElement('video'); 179 var video = this.document_.createElement('video');
180 if (metadata.thumbnailURL) { 180 if (metadata.thumbnailURL) {
181 video.setAttribute('poster', metadata.thumbnailURL); 181 video.setAttribute('poster', metadata.thumbnailURL);
182 } 182 }
183 if (!metadata.thumbnailOnly) { 183 video.src = metadata.contentURL || source;
184 video.src = source; 184 video.load();
185 video.load(); 185 displayMainImage(ImageView.LOAD_TYPE_TOTAL, slide, video);
186 }
187 displayMainImage(ImageView.LOAD_TYPE_TOTAL, video);
188 return; 186 return;
189 } 187 }
190 var readyContent = this.getReadyContent(id, source); 188 var readyContent = this.getReadyContent(id, source);
191 if (readyContent) { 189 if (readyContent) {
192 displayMainImage(ImageView.LOAD_TYPE_CACHED_FULL, readyContent); 190 displayMainImage(ImageView.LOAD_TYPE_CACHED_FULL, slide, readyContent);
193 } else { 191 } else {
194 var cachedScreen = this.screenCache_.getItem(id); 192 var cachedScreen = this.screenCache_.getItem(id);
195 if (cachedScreen) { 193 if (cachedScreen) {
196 // We have a cached screen-scale canvas, use it instead of a thumbnail. 194 // We have a cached screen-scale canvas, use it instead of a thumbnail.
197 displayThumbnail(ImageView.LOAD_TYPE_CACHED_SCREEN, cachedScreen); 195 displayThumbnail(ImageView.LOAD_TYPE_CACHED_SCREEN, slide, cachedScreen);
198 // As far as the user can tell the image is loaded. We still need to load 196 // As far as the user can tell the image is loaded. We still need to load
199 // the full res image to make editing possible, but we can report now. 197 // the full res image to make editing possible, but we can report now.
200 ImageUtil.metrics.recordInterval(ImageUtil.getMetricName('DisplayTime')); 198 ImageUtil.metrics.recordInterval(ImageUtil.getMetricName('DisplayTime'));
201 } else if (metadata.thumbnailURL) { 199 } else if (metadata.thumbnailURL) {
202 this.imageLoader_.load( 200 this.imageLoader_.load(
203 metadata.thumbnailURL, 201 metadata.thumbnailURL,
204 metadata.thumbnailTransform, 202 metadata.thumbnailTransform,
205 displayThumbnail.bind(null, ImageView.LOAD_TYPE_FILE)); 203 displayThumbnail.bind(null, ImageView.LOAD_TYPE_FILE, slide));
206 } else { 204 } else {
207 loadMainImage(ImageView.LOAD_TYPE_FILE, 0); 205 loadMainImage(ImageView.LOAD_TYPE_FILE, slide, source, 0);
208 } 206 }
209 } 207 }
210 208
211 function displayThumbnail(loadType, canvas) { 209 function displayThumbnail(loadType, slide, canvas) {
212 // The thumbnail may have different aspect ratio than the main image. 210 // The thumbnail may have different aspect ratio than the main image.
213 // Force the main image proportions to avoid flicker. 211 // Force the main image proportions to avoid flicker.
214 var time = Date.now(); 212 var time = Date.now();
215 213
216 var mainImageLoadDelay = ImageView.ANIMATION_WAIT_INTERVAL; 214 var mainImageLoadDelay = ImageView.ANIMATION_WAIT_INTERVAL;
215 var mainImageSlide = slide;
217 216
218 // Do not do slide-in animation when scrolling very fast. 217 // Do not do slide-in animation when scrolling very fast.
219 if (self.lastLoadTime_ && 218 if (self.lastLoadTime_ &&
220 (time - self.lastLoadTime_) < ImageView.FAST_SCROLL_INTERVAL) { 219 (time - self.lastLoadTime_) < ImageView.FAST_SCROLL_INTERVAL) {
221 slide = 0; 220 mainImageSlide = 0;
222 } 221 }
223 self.lastLoadTime_ = time; 222 self.lastLoadTime_ = time;
224 223
225 if (metadata.thumbnailOnly) { 224 var contentURL;
225 if (metadata.contentURL) {
226 contentURL = metadata.contentURL;
226 // We do not know the main image size, but chances are that it is large 227 // We do not know the main image size, but chances are that it is large
227 // enough. Show the thumbnail at the maximum possible scale. 228 // enough. Show the thumbnail at the maximum possible scale.
228 var bounds = self.viewport_.getScreenBounds(); 229 var bounds = self.viewport_.getScreenBounds();
229 var scale = Math.min (bounds.width / canvas.width, 230 var scale = Math.min (bounds.width / canvas.width,
230 bounds.height / canvas.height); 231 bounds.height / canvas.height);
231 self.replace(canvas, slide, canvas.width * scale, canvas.height * scale); 232 self.replace(canvas, slide, canvas.width * scale, canvas.height * scale);
232 if (opt_callback) opt_callback(ImageView.LOAD_TYPE_TOTAL); 233 } else {
233 return; 234 contentURL = source;
235 self.replace(canvas, slide, metadata.width, metadata.height);
234 } 236 }
235 237 if (!mainImageSlide) mainImageLoadDelay = 0;
236 self.replace(canvas, slide, metadata.width, metadata.height); 238 mainImageSlide = 0;
237 if (!slide) mainImageLoadDelay = 0; 239 loadMainImage(loadType, mainImageSlide, contentURL, mainImageLoadDelay);
238 slide = 0;
239 loadMainImage(loadType, mainImageLoadDelay);
240 } 240 }
241 241
242 function loadMainImage(loadType, delay) { 242 function loadMainImage(loadType, slide, contentURL, delay) {
243 if (self.prefetchLoader_.isLoading(source)) { 243 if (self.prefetchLoader_.isLoading(contentURL)) {
244 // The image we need is already being prefetched. Initiating another load 244 // The image we need is already being prefetched. Initiating another load
245 // would be a waste. Hijack the load instead by overriding the callback. 245 // would be a waste. Hijack the load instead by overriding the callback.
246 self.prefetchLoader_.setCallback(displayMainImage.bind(null, loadType)); 246 self.prefetchLoader_.setCallback(
247 displayMainImage.bind(null, loadType, slide));
247 248
248 // Swap the loaders so that the self.isLoading works correctly. 249 // Swap the loaders so that the self.isLoading works correctly.
249 var temp = self.prefetchLoader_; 250 var temp = self.prefetchLoader_;
250 self.prefetchLoader_ = self.imageLoader_; 251 self.prefetchLoader_ = self.imageLoader_;
251 self.imageLoader_ = temp; 252 self.imageLoader_ = temp;
252 return; 253 return;
253 } 254 }
254 self.prefetchLoader_.cancel(); // The prefetch was doing something useless. 255 self.prefetchLoader_.cancel(); // The prefetch was doing something useless.
255 256
256 self.imageLoader_.load( 257 self.imageLoader_.load(
257 source, 258 contentURL,
258 metadata.imageTransform, 259 metadata.imageTransform,
259 displayMainImage.bind(null, loadType), 260 displayMainImage.bind(null, loadType, slide),
260 delay); 261 delay);
261 } 262 }
262 263
263 function displayMainImage(loadType, content) { 264 function displayMainImage(loadType, slide, content) {
264 self.replace(content, slide); 265 self.replace(content, slide);
265 ImageUtil.metrics.recordEnum(ImageUtil.getMetricName('LoadMode'), 266 ImageUtil.metrics.recordEnum(ImageUtil.getMetricName('LoadMode'),
266 loadType, ImageView.LOAD_TYPE_TOTAL); 267 loadType, ImageView.LOAD_TYPE_TOTAL);
267 if (loadType != ImageView.LOAD_TYPE_CACHED_SCREEN) { 268 if (loadType != ImageView.LOAD_TYPE_CACHED_SCREEN) {
268 ImageUtil.metrics.recordInterval(ImageUtil.getMetricName('DisplayTime')); 269 ImageUtil.metrics.recordInterval(ImageUtil.getMetricName('DisplayTime'));
269 } 270 }
270 if (opt_callback) opt_callback(loadType); 271 if (opt_callback) opt_callback(loadType);
271 } 272 }
272 }; 273 };
273 274
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 if (this.order_.length > this.capacity_) 523 if (this.order_.length > this.capacity_)
523 throw new Error('Exceeded cache capacity'); 524 throw new Error('Exceeded cache capacity');
524 }; 525 };
525 526
526 ImageView.Cache.prototype.evictLRU = function() { 527 ImageView.Cache.prototype.evictLRU = function() {
527 if (this.order_.length == this.capacity_) { 528 if (this.order_.length == this.capacity_) {
528 var id = this.order_.shift(); 529 var id = this.order_.shift();
529 delete this.map_[id]; 530 delete this.map_[id];
530 } 531 }
531 }; 532 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698