| Index: dart/tools/dom/scripts/systemnative.py
 | 
| ===================================================================
 | 
| --- dart/tools/dom/scripts/systemnative.py	(revision 31530)
 | 
| +++ dart/tools/dom/scripts/systemnative.py	(working copy)
 | 
| @@ -89,6 +89,17 @@
 | 
|  
 | 
|  _cpp_partial_map = {}
 | 
|  
 | 
| +_cpp_no_auto_scope_list = set([
 | 
| +  ('Node', 'firstChild', 'Getter'),
 | 
| +  ('Node', 'lastChild', 'Getter'),
 | 
| +  ('Node', 'nextSibling', 'Getter'),
 | 
| +  ('Node', 'previousSibling', 'Getter'),
 | 
| +  ('Node', 'childNodes', 'Getter'),
 | 
| +  ('NodeList', 'length', 'Getter'),
 | 
| +  ('NodeList', 'item', 'Callback'),
 | 
| +  ('Document', 'body', 'Getter'),
 | 
| +])
 | 
| +
 | 
|  def _GetCPPPartialNames(interface):
 | 
|    interface_name = interface.ext_attrs.get('ImplementedAs', interface.id)
 | 
|    if not _cpp_partial_map:
 | 
| @@ -438,8 +449,10 @@
 | 
|          '                DartDOMWrapper::lookupWrapper<Dart$(INTERFACE)>(domData, value);\n'
 | 
|          '            if (result)\n'
 | 
|          '                Dart_SetWeakHandleReturnValue(args, result);\n'
 | 
| -        '            else\n'
 | 
| +        '            else {\n'
 | 
| +        '                DartApiScope apiScope();\n'
 | 
|          '                Dart_SetReturnValue(args, createWrapper(domData, value));\n'
 | 
| +        '            }\n'
 | 
|          '        }\n'
 | 
|          '    }\n',
 | 
|          INTERFACE=self._interface.id)
 | 
| @@ -1060,6 +1073,12 @@
 | 
|  
 | 
|    def _GenerateNativeBinding(self, idl_name, argument_count, dart_declaration,
 | 
|        native_suffix, is_custom, emit_metadata=True):
 | 
| +
 | 
| +    def _GenerateAutoSetupScope(self, idl_name, native_suffix):
 | 
| +      if ((self._interface.id, idl_name, native_suffix) not in _cpp_no_auto_scope_list):
 | 
| +        return 'true'
 | 
| +      return 'false'
 | 
| +
 | 
|      metadata = []
 | 
|      if emit_metadata:
 | 
|        metadata = self._metadata.GetFormattedMetadata(
 | 
| @@ -1076,15 +1095,17 @@
 | 
|          NATIVE_BINDING=native_binding)
 | 
|  
 | 
|      cpp_callback_name = '%s%s' % (idl_name, native_suffix)
 | 
| +    auto_scope_setup = _GenerateAutoSetupScope(self, idl_name, native_suffix)
 | 
|  
 | 
|      self._cpp_resolver_emitter.Emit(
 | 
|          '    if (argumentCount == $ARGC && name == "$NATIVE_BINDING") {\n'
 | 
| -        '        *autoSetupScope = true;\n'
 | 
| +        '        *autoSetupScope = $AUTO_SCOPE_SETUP;\n'
 | 
|          '        return Dart$(INTERFACE_NAME)Internal::$CPP_CALLBACK_NAME;\n'
 | 
|          '    }\n',
 | 
|          ARGC=argument_count,
 | 
|          NATIVE_BINDING=native_binding,
 | 
|          INTERFACE_NAME=self._interface.id,
 | 
| +        AUTO_SCOPE_SETUP=auto_scope_setup,
 | 
|          CPP_CALLBACK_NAME=cpp_callback_name)
 | 
|  
 | 
|      if is_custom:
 | 
| 
 |