Chromium Code Reviews| Index: client/dom/scripts/dartgenerator.py |
| diff --git a/client/dom/scripts/dartgenerator.py b/client/dom/scripts/dartgenerator.py |
| index 4f1f278b42a7a29472ead11ff24ac75bc3aa06ee..7eb98b57a9896239727a99e3afe8a62d095dadce 100755 |
| --- a/client/dom/scripts/dartgenerator.py |
| +++ b/client/dom/scripts/dartgenerator.py |
| @@ -137,6 +137,33 @@ _alternate_methods = { |
| ('WheelEvent', 'initWheelEvent'): ['initWebKitWheelEvent', 'initWheelEvent'] |
| } |
| +# |
| +# Unexpandable types require special support for |
| +# dartObjectLocalStorage. Normally, in the overlay dom, it is |
| +# implemented as an expando field. For these types, we cannot use an |
| +# expando. Instead, we define a specialized getter and setter. |
|
sra1
2012/01/09 22:20:06
Do you think this approach will work if we make al
vsm
2012/01/10 00:42:00
It feels like it should. It's legal dart to overr
|
| +# |
| +_unexpandable_types = { |
| + # (type name, ols getter, ols setter) |
| + 'Storage': ( |
| +''' |
| + if (this === window.localStorage) |
| + return window._dartLocalStorageLocalStorage; |
| + else if (this === window.sessionStorage) |
| + return window._dartSessionStorageLocalStorage; |
| + else |
| + throw new UnsupportedOperationException('Cannot dartObjectLocalStorage for unknown Storage object.'); |
| +''', |
| +''' |
| + if (this === window.localStorage) |
| + window._dartLocalStorageLocalStorage = value; |
| + else if (this === window.sessionStorage) |
| + window._dartSessionStorageLocalStorage = value; |
| + else |
| + throw new UnsupportedOperationException('Cannot dartObjectLocalStorage for unknown Storage object.'); |
| +'''), |
| +} |
| + |
| def _MatchSourceFilter(filter, thing): |
| if not filter: |
| return True |
| @@ -1866,10 +1893,25 @@ class FrogInterfaceGenerator(object): |
| if not base: |
| # Emit shared base functionality here as we have no common base type. |
| + if interface_name in _unexpandable_types.keys(): |
|
sra1
2012/01/09 22:20:06
I believe 'in' just works on the keys of a dict()
vsm
2012/01/10 00:42:00
Done.
|
| + (getter, setter) = _unexpandable_types[interface_name] |
| + self._base_emitter.Emit( |
| + '\n' |
| + ' var get dartObjectLocalStorage() native """') |
| + self._base_emitter.Emit(getter) |
| + self._base_emitter.Emit( |
| + '""";\n' |
| + '\n' |
| + ' void set dartObjectLocalStorage(var value) native """') |
| + self._base_emitter.Emit(setter) |
| + self._base_emitter.Emit( |
| + '""";\n') |
| + else: |
| + self._base_emitter.Emit( |
| + '\n' |
| + ' var dartObjectLocalStorage;\n') |
| self._base_emitter.Emit( |
| '\n' |
| - ' var dartObjectLocalStorage;\n' |
| - '\n' |
| ' String get typeName() native;\n') |
| def _ImplClassName(self, type_name): |