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

Unified Diff: sky/sdk/lib/mojo/net/image_cache.dart

Issue 1218023013: Hoist knowledge of image_cache into widgets/basic.dart (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 6 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 side-by-side diff with in-line comments
Download patch
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;
+ });
}

Powered by Google App Engine
This is Rietveld 408576698