Switch IDB Database.transaction to use a template to do the right type conversions

BUG=

Review URL: https://codereview.chromium.org/1473443003 .
This commit is contained in:
Alan Knight 2015-11-23 14:29:44 -08:00
parent 670db50707
commit d2b1388ed1
6 changed files with 71 additions and 76 deletions

View file

@ -31921,9 +31921,9 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [Loading web pages]
* (http://www.whatwg.org/specs/web-apps/current-work/multipage/browsers.html)
* from WHATWG.
* * [Loading web
* pages](https://html.spec.whatwg.org/multipage/browsers.html)
* from WHATWG.
*/
Document get document => JS('Document', '#.document', this);
@ -31937,10 +31937,10 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [Window.open]
* (https://developer.mozilla.org/en-US/docs/Web/API/Window.open) from MDN.
* * [Window open]
* (http://docs.webplatform.org/wiki/dom/methods/open) from WebPlatform.org.
* * [Window.open](https://developer.mozilla.org/en-US/docs/Web/API/Window.open)
* from MDN.
* * [Window open](http://docs.webplatform.org/wiki/dom/methods/open)
* from WebPlatform.org.
*/
WindowBase open(String url, String name, [String options]) {
if (options == null) {
@ -32002,8 +32002,8 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [Window.cancelAnimationFrame]
* (https://developer.mozilla.org/en-US/docs/Web/API/Window.cancelAnimationFrame) from MDN.
* * [Window.cancelAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/Window.cancelAnimationFrame)
* from MDN.
*/
void cancelAnimationFrame(int id) {
_ensureRequestAnimationFrame();
@ -33772,10 +33772,10 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [Window.moveTo]
* (https://developer.mozilla.org/en-US/docs/Web/API/Window.moveTo) from MDN.
* * [Window.moveTo]
* (http://dev.w3.org/csswg/cssom-view/#dom-window-moveto) from W3C.
* * [Window.moveTo](https://developer.mozilla.org/en-US/docs/Web/API/Window.moveTo)
* from MDN.
* * [Window.moveTo](http://dev.w3.org/csswg/cssom-view/#dom-window-moveto)
* from W3C.
*/
void moveTo(Point p) {
_moveTo(p.x, p.y);
@ -33794,10 +33794,10 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [The Screen interface specification]
* (http://www.w3.org/TR/cssom-view/#screen) from W3C.
* * [scrollX]
* (https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX) from MDN.
* * [The Screen interface
* specification](http://www.w3.org/TR/cssom-view/#screen) from W3C.
* * [scrollX](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollX)
* from MDN.
*/
@DomName('Window.scrollX')
@DocsEditable()
@ -33810,10 +33810,10 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [The Screen interface specification]
* (http://www.w3.org/TR/cssom-view/#screen) from W3C.
* * [scrollY]
* (https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY) from MDN.
* * [The Screen interface
* specification](http://www.w3.org/TR/cssom-view/#screen) from W3C.
* * [scrollY](https://developer.mozilla.org/en-US/docs/Web/API/Window.scrollY)
* from MDN.
*/
@DomName('Window.scrollY')
@DocsEditable()

View file

@ -40454,10 +40454,10 @@ class Window extends EventTarget implements WindowEventHandlers, WindowBase, Glo
*
* ## Other resources
*
* * [Window.moveTo]
* (https://developer.mozilla.org/en-US/docs/Web/API/Window.moveTo) from MDN.
* * [Window.moveTo]
* (http://dev.w3.org/csswg/cssom-view/#dom-window-moveto) from W3C.
* * [Window.moveTo](https://developer.mozilla.org/en-US/docs/Web/API/Window.moveTo)
* from MDN.
* * [Window.moveTo](http://dev.w3.org/csswg/cssom-view/#dom-window-moveto)
* from W3C.
*/
void moveTo(Point p) {
_moveTo(p.x, p.y);

View file

@ -380,7 +380,7 @@ class Database extends EventTarget {
List storeNames_1 = convertDartToNative_StringArray(storeNames);
return _transaction(storeNames_1, mode);
}
Transaction transactionStores(DomStringList storeNames, String mode) {
if (mode != 'readonly' && mode != 'readwrite') {
throw new ArgumentError(mode);

View file

@ -292,6 +292,27 @@ class Database extends EventTarget {
return _createObjectStore(name, options);
}
Transaction transaction(storeName_OR_storeNames, String mode) {
if (mode != 'readonly' && mode != 'readwrite') {
throw new ArgumentError("Invalid transaction mode $mode");
}
var names;
if (storeName_OR_storeNames == null) {
throw new ArgumentError("stores may not be null in transaction");
} else if (storeName_OR_storeNames is String || storeName_OR_storeNames is DomStringList) {
names = unwrap_jso(storeName_OR_storeNames);
} else if (storeName_OR_storeNames is List<String>) {
names = convertDartToNative_List(storeName_OR_storeNames);
} else {
throw new ArgumentError("Invalid store(s) $store_Name_OR_storeNames");
}
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), names, mode));
}
Transaction transactionList(List<String> storeNames, String mode) => transaction(storeNames, mode);
Transaction transactionStores(List<String> storeNames, String mode) => transaction(storeNames, mode);
Transaction transactionStore(String storeName, String mode) => transaction(storeName, mode);
// To suppress missing implicit constructor warnings.
factory Database._() { throw new UnsupportedError("Not supported"); }
@ -379,49 +400,6 @@ class Database extends EventTarget {
@DocsEditable()
void deleteObjectStore(String name) => _blink.BlinkIDBDatabase.instance.deleteObjectStore_Callback_1_(unwrap_jso(this), name);
Transaction transaction(storeName_OR_storeNames, [String mode]) {
if ((storeName_OR_storeNames is String || storeName_OR_storeNames == null) && mode == null) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames)));
}
if ((mode is String || mode == null) && (storeName_OR_storeNames is String || storeName_OR_storeNames == null)) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames), mode));
}
if ((storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null) && mode == null) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames)));
}
if ((mode is String || mode == null) && (storeName_OR_storeNames is List<String> || storeName_OR_storeNames == null)) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames), mode));
}
if ((storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null) && mode == null) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames)));
}
if ((mode is String || mode == null) && (storeName_OR_storeNames is DomStringList || storeName_OR_storeNames == null)) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeName_OR_storeNames), mode));
}
throw new ArgumentError("Incorrect number or type of arguments");
}
Transaction transactionList(List<String> storeNames, [String mode]) {
if (mode != null) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), convertDartToNative_StringArray(storeNames), mode));
}
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), convertDartToNative_StringArray(storeNames)));
}
Transaction transactionStore(String storeName, [String mode]) {
if (mode != null) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), storeName, mode));
}
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), storeName));
}
Transaction transactionStores(List<String> storeNames, [String mode]) {
if (mode != null) {
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), unwrap_jso(storeNames), mode));
}
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_1_(unwrap_jso(this), unwrap_jso(storeNames)));
}
/// Stream of `abort` events handled by this [Database].
@DomName('IDBDatabase.onabort')
@DocsEditable()

View file

@ -439,12 +439,6 @@ renamed_overloads = monitored.Dict('htmldartgenerator.renamed_overloads', {
'DataTransferItemList.add(DOMString data, DOMString type)': 'addData',
'FormData.append(DOMString name, Blob value, DOMString filename)':
'appendBlob',
'IDBDatabase.transaction(DOMStringList storeNames, IDBTransactionMode mode)':
'transactionStores',
'IDBDatabase.transaction(sequence<DOMString> storeNames, IDBTransactionMode mode)':
'transactionList',
'IDBDatabase.transaction(DOMString storeName, IDBTransactionMode mode)':
'transactionStore',
'RTCDataChannel.send(ArrayBuffer data)': 'sendByteBuffer',
'RTCDataChannel.send(ArrayBufferView data)': 'sendTypedData',
'RTCDataChannel.send(Blob data)': 'sendBlob',
@ -777,6 +771,7 @@ removed_html_members = monitored.Set('htmlrenamer.removed_html_members', [
'HTMLTitleElement.text',
'HTMLUListElement.compact',
'HTMLUListElement.type',
'IDBDatabase.transaction', # We do this in a template without the generated implementation at all.
'Location.valueOf',
'MessageEvent.ports',
'MessageEvent.webkitInitMessageEvent',

View file

@ -53,7 +53,7 @@ $if DART2JS
List storeNames_1 = convertDartToNative_StringArray(storeNames);
return _transaction(storeNames_1, mode);
}
Transaction transactionStores(DomStringList storeNames, String mode) {
if (mode != 'readonly' && mode != 'readwrite') {
throw new ArgumentError(mode);
@ -63,6 +63,28 @@ $if DART2JS
@JSName('transaction')
Transaction _transaction(stores, mode) native;
$else
Transaction transaction(storeName_OR_storeNames, String mode) {
if (mode != 'readonly' && mode != 'readwrite') {
throw new ArgumentError("Invalid transaction mode $mode");
}
var names;
if (storeName_OR_storeNames == null) {
throw new ArgumentError("stores may not be null in transaction");
} else if (storeName_OR_storeNames is String || storeName_OR_storeNames is DomStringList) {
names = unwrap_jso(storeName_OR_storeNames);
} else if (storeName_OR_storeNames is List<String>) {
names = convertDartToNative_List(storeName_OR_storeNames);
} else {
throw new ArgumentError("Invalid store(s) $store_Name_OR_storeNames");
}
return wrap_jso(_blink.BlinkIDBDatabase.instance.transaction_Callback_2_(unwrap_jso(this), names, mode));
}
Transaction transactionList(List<String> storeNames, String mode) => transaction(storeNames, mode);
Transaction transactionStores(List<String> storeNames, String mode) => transaction(storeNames, mode);
Transaction transactionStore(String storeName, String mode) => transaction(storeName, mode);
$endif
$!MEMBERS}