| Index: sky/sdk/lib/mojo/net/image_cache.dart
|
| diff --git a/sky/sdk/lib/mojo/net/image_cache.dart b/sky/sdk/lib/mojo/net/image_cache.dart
|
| index 5b0061ed16d84b298203383d69665d7b1abf7d40..b66d5fe67fcb92013db8cc1f3c396aa409a4aca2 100644
|
| --- a/sky/sdk/lib/mojo/net/image_cache.dart
|
| +++ b/sky/sdk/lib/mojo/net/image_cache.dart
|
| @@ -3,52 +3,26 @@
|
| // found in the LICENSE file.
|
|
|
| import 'dart:async';
|
| -import 'dart:sky' as sky;
|
| import 'dart:collection';
|
| +import 'dart:sky' as sky;
|
|
|
| import 'package:mojom/mojo/url_response.mojom.dart';
|
|
|
| import 'fetch.dart';
|
|
|
| -final HashMap<String, List<sky.ImageDecoderCallback>> _pendingRequests =
|
| - new HashMap<String, List<sky.ImageDecoderCallback>>();
|
| -
|
| -final HashMap<String, sky.Image> _completedRequests =
|
| - new HashMap<String, sky.Image>();
|
| -
|
| -void _loadComplete(String url, sky.Image image) {
|
| - _completedRequests[url] = image;
|
| - _pendingRequests[url].forEach((c) => c(image));
|
| - _pendingRequests.remove(url);
|
| -}
|
| -
|
| -void _load(String url, sky.ImageDecoderCallback callback) {
|
| - sky.Image result = _completedRequests[url];
|
| - if (result != null) {
|
| - callback(_completedRequests[url]);
|
| - return;
|
| - }
|
| +final HashMap<String, Future<sky.Image>> _cache =
|
| + new HashMap<String, Future<sky.Image>>();
|
|
|
| - bool newRequest = false;
|
| - _pendingRequests.putIfAbsent(url, () {
|
| - newRequest = true;
|
| - return new List<sky.ImageDecoderCallback>();
|
| - }).add(callback);
|
| - if (newRequest) {
|
| +Future<sky.Image> load(String url) {
|
| + return _cache.putIfAbsent(url, () {
|
| + Completer<sky.Image> completer = new Completer<sky.Image>();
|
| fetchUrl(url).then((UrlResponse response) {
|
| if (response.statusCode >= 400) {
|
| - _loadComplete(url, null);
|
| - return;
|
| + completer.complete(null);
|
| + } else {
|
| + new sky.ImageDecoder(response.body.handle.h, completer.complete);
|
| }
|
| - new sky.ImageDecoder(response.body.handle.h, (image) {
|
| - _loadComplete(url, image);
|
| - });
|
| });
|
| - }
|
| -}
|
| -
|
| -Future<sky.Image> load(String url) {
|
| - Completer<sky.Image> completer = new Completer<sky.Image>();
|
| - _load(url, completer.complete);
|
| - return completer.future;
|
| + return completer.future;
|
| + });
|
| }
|
|
|