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

Unified Diff: tools/dom/templates/html/impl/impl_IDBFactory.darttemplate

Issue 12159005: Dartifying some IndexedDB APIs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: 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 side-by-side diff with in-line comments
Download patch
Index: tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
diff --git a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
index ec18dba4bd4bf522d8859300da861da6fcaebb82..3c9a5aef2dd8c44f6af8d29dac3c28d2606be7c1 100644
--- a/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
+++ b/tools/dom/templates/html/impl/impl_IDBFactory.darttemplate
@@ -19,5 +19,66 @@ $else
$endif
}
+ @DomName('IDBFactory.open')
+ Future<Database> open(String name,
+ {int version, void onUpgradeNeeded(VersionChangeEvent),
+ void onBlocked(Event)}) {
+ if ((version == null) != (onUpgradeNeeded == null)) {
+ return new Future.immediateError(new ArgumentError(
+ 'version specified but not onUpgradeNeeded'));
+ }
+ try {
+ var request;
+ if (version != null) {
+ request = $dom_open(name, version);
+ } else {
+ request = $dom_open(name);
+ }
+
+ if (onUpgradeNeeded != null) {
+ request.onUpgradeNeeded.listen(onUpgradeNeeded);
+ }
+ if (onBlocked != null) {
+ request.onBlocked.listen(onBlocked);
+ }
+ return _completeRequest(request);
+ } catch (e, stacktrace) {
+ return new Future.immediateError(e, stacktrace);
+ }
+ }
+
+ @DomName('IDBFactory.open')
+ Future<IdbFactory> deleteDatabase(String name,
+ {void onBlocked(Event)}) {
+ try {
+ var request = $dom_deleteDatabase(name);
+
+ if (onBlocked != null) {
+ request.onBlocked.listen(onBlocked);
+ }
+ return _completeRequest(request);
+ } catch (e, stacktrace) {
+ return new Future.immediateError(e, stacktrace);
+ }
+ }
+
$!MEMBERS
}
+
+
+/**
+ * Ties a request to a completer, so the completer is completed when it succeeds
+ * and errors out when the request errors.
+ */
+Future _completeRequest(Request request) {
+ var completer = new Completer();
+ // TODO: make sure that completer.complete is synchronous as transactions
+ // may be committed if the result is not processed immediately.
+ request.onSuccess.listen((e) {
+ completer.complete(request.result);
+ });
+ request.onError.listen((e) {
+ completer.completeError(e);
+ });
+ return completer.future;
+}

Powered by Google App Engine
This is Rietveld 408576698