diff --git a/bindings/IDLExtendedAttributes.txt b/bindings/IDLExtendedAttributes.txt
index f823705..16296b6 100644
--- a/bindings/IDLExtendedAttributes.txt
+++ b/bindings/IDLExtendedAttributes.txt
@@ -79,6 +79,7 @@
 Global=|*
 Immutable
 ImplementedAs=*
+ImplementedInPrivateScript
 InitializedByEventConstructor
 LegacyTreatAsPartialInterface
 LogActivity=|GetterOnly|SetterOnly
@@ -88,6 +89,7 @@
 NamedConstructor=*
 NoInterfaceObject
 NotEnumerable
+OnlyExposedToPrivateScript
 OverrideBuiltins
 PartialInterfaceImplementedAs=*
 # Valid values for [PerContextEnabled] are Context Features, in
@@ -97,7 +99,6 @@
 PrimaryGlobal=|*
 PutForwards=*
 RaisesException=|Getter|Setter|Constructor
-ReadOnly
 Reflect=|*
 ReflectEmpty=*
 ReflectInvalid=*
@@ -111,10 +112,10 @@
 SetWrapperReferenceTo=*
 SetterCallWith=ExecutionContext|ScriptArguments|ActiveWindow|FirstWindow
 SpecialWrapFor=*
-TreatNullAs=NullString
+TreatNullAs=NullString|EmptyString
 TreatReturnedNullStringAs=Null|Undefined
 TreatUndefinedAs=NullString
-TypeChecking=Interface|Nullable|Unrestricted
+TypeChecking=Interface|Unrestricted
 URL
 Unforgeable
 WillBeGarbageCollected
diff --git a/bindings/README b/bindings/README
index 53c5767..1a601a7 100644
--- a/bindings/README
+++ b/bindings/README
@@ -6,4 +6,4 @@
 
 The current version corresponds to:
 URL: http://src.chromium.org/blink/branches/dart/dartium
-Current revision: 181823
+Current revision: 182210
diff --git a/bindings/dart/scripts/code_generator_dart.py b/bindings/dart/scripts/code_generator_dart.py
index 93a5f8d..3c1c2ea 100644
--- a/bindings/dart/scripts/code_generator_dart.py
+++ b/bindings/dart/scripts/code_generator_dart.py
@@ -128,6 +128,9 @@
             interface_name
             for interface_name, interface_info in interfaces_info.iteritems()
             if 'WillBeGarbageCollected' in interface_info['inherited_extended_attributes']))
+        dart_types.set_component_dirs(dict(
+            (interface_name, interface_info['component_dir'])
+            for interface_name, interface_info in interfaces_info.iteritems()))
 
     def generate_code(self, definitions, interface_name, idl_pickle_filename,
                       only_if_changed):
@@ -187,7 +190,8 @@
             idl_world['callback'] = idl_global_data['callback']
 
         if 'interface_name' in template_contents:
-            interface_global = {'name': template_contents['interface_name'],
+            interface_global = {'component_dir': interface_info['component_dir'],
+                                'name': template_contents['interface_name'],
                                 'parent_interface': template_contents['parent_interface'],
                                 'is_active_dom_object': template_contents['is_active_dom_object'],
                                 'is_event_target': template_contents['is_event_target'],
diff --git a/bindings/dart/scripts/dart_attributes.py b/bindings/dart/scripts/dart_attributes.py
index 7536f20..7aaec94 100644
--- a/bindings/dart/scripts/dart_attributes.py
+++ b/bindings/dart/scripts/dart_attributes.py
@@ -44,6 +44,10 @@
 def generate_attribute(interface, attribute):
     idl_type = attribute.idl_type
     base_idl_type = idl_type.base_type
+    # TODO(terry): Work around for DOMString[] base should be IDLTypeArray
+    if base_idl_type == None:
+        # Returns Array or Sequence.
+        base_idl_type = idl_type.inner_name
     extended_attributes = attribute.extended_attributes
 
     idl_type.add_includes_for_type()
@@ -83,7 +87,7 @@
     if (base_idl_type == 'EventHandler' and
         interface.name in ['Window', 'WorkerGlobalScope'] and
         attribute.name == 'onerror'):
-        includes.add('bindings/v8/V8ErrorHandler.h')
+        includes.add('bindings/core/v8/V8ErrorHandler.h')
 
     is_auto_scope = not 'DartNoAutoScope' in extended_attributes
     contents = {
@@ -243,7 +247,7 @@
          DartUtilities.has_extended_attribute_value(attribute, 'TypeChecking', 'Nullable')) and
          idl_type.is_wrapper_type)
 
-    if attribute.idl_type.is_nullable and not has_type_checking_nullable:
+    if attribute.idl_type.is_explicit_nullable:
         arguments.append('isNull')
     if contents['is_getter_raises_exception']:
         arguments.append('es')
@@ -274,7 +278,7 @@
         return CONTENT_ATTRIBUTE_GETTER_NAMES[base_idl_type]
     if 'URL' in attribute.extended_attributes:
         return 'getURLAttribute'
-    return 'getAttribute'
+    return 'fastGetAttribute'
 
 
 def is_keep_alive_for_gc(interface, attribute):
@@ -337,7 +341,7 @@
         'is_setter_suppressed':  suppress,
         'setter_lvalue': dart_types.check_reserved_name(attribute.name),
         'cpp_type': this_cpp_type,
-        'local_cpp_type': idl_type.cpp_type_args(attribute.extended_attributes, used_as_argument=True),
+        'local_cpp_type': idl_type.cpp_type_args(attribute.extended_attributes, raw_type=True),
         'cpp_setter': setter_expression(interface, attribute, contents),
         'dart_value_to_local_cpp_value':
             attribute.idl_type.dart_value_to_local_cpp_value(
@@ -366,7 +370,7 @@
         arguments.append('nullptr')
         # if (interface.name in ['Window', 'WorkerGlobalScope'] and
         #    attribute.name == 'onerror'):
-        #    includes.add('bindings/v8/V8ErrorHandler.h')
+        #    includes.add('bindings/core/v8/V8ErrorHandler.h')
         #    arguments.append('V8EventListenerList::findOrCreateWrapper<V8ErrorHandler>(jsValue, true, info.GetIsolate())')
         # else:
         #    arguments.append('V8EventListenerList::getEventListener(jsValue, true, ListenerFindOrCreate)')
@@ -399,9 +403,18 @@
 
 def scoped_content_attribute_name(interface, attribute):
     content_attribute_name = attribute.extended_attributes['Reflect'] or attribute.name.lower()
-    namespace = 'SVGNames' if interface.name.startswith('SVG') else 'HTMLNames'
-    includes.add('%s.h' % namespace)
-    return 'WebCore::%s::%sAttr' % (namespace, content_attribute_name)
+    if interface.name.startswith('SVG'):
+        # SVG's xmlbase/xmlspace/xmllang need special behavior, i.e.
+        # it is in XMLNames namespace and the generated attribute has no xml prefix.
+        if attribute.name.startswith('xml'):
+            namespace = 'XMLNames'
+            content_attribute_name = content_attribute_name[3:]
+        else:
+            namespace = 'SVGNames'
+    else:
+        namespace = 'HTMLNames'
+    includes.add('core/%s.h' % namespace)
+    return '%s::%sAttr' % (namespace, content_attribute_name)
 
 
 ################################################################################
@@ -465,7 +478,7 @@
 
 def is_constructor_attribute(attribute):
     # FIXME: replace this with [ConstructorAttribute] extended attribute
-    return attribute.idl_type.base_type.endswith('Constructor')
+    return attribute.idl_type.name.endswith('Constructor')
 
 
 def generate_constructor_getter(interface, attribute, contents):
diff --git a/bindings/dart/scripts/dart_callback_interface.py b/bindings/dart/scripts/dart_callback_interface.py
index 9fb0cea..5120af4 100644
--- a/bindings/dart/scripts/dart_callback_interface.py
+++ b/bindings/dart/scripts/dart_callback_interface.py
@@ -33,18 +33,18 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from idl_types import IdlType
+from idl_types import IdlType, IdlTypeBase
 import dart_types
 from dart_utilities import DartUtilities
 from v8_globals import includes
 
 CALLBACK_INTERFACE_H_INCLUDES = frozenset([
-    'bindings/dart/DartCallback.h',
-    'bindings/dart/DartDOMWrapper.h',
-    'bindings/v8/ActiveDOMCallback.h',
+    'bindings/core/dart/DartCallback.h',
+    'bindings/core/dart/DartDOMWrapper.h',
+    'bindings/core/v8/ActiveDOMCallback.h',
 ])
 CALLBACK_INTERFACE_CPP_INCLUDES = frozenset([
-    'bindings/dart/DartBindingsCommonIncludes.h',
+    'bindings/core/dart/DartBindingsCommonIncludes.h',
     'wtf/GetPtr.h',
     'wtf/RefPtr.h',
 ])
@@ -57,13 +57,13 @@
         return 'const String&'
     if idl_type_name == 'void':
         return 'void'
-    # Callbacks use raw pointers, so used_as_argument=True
-    usual_cpp_type = idl_type.cpp_type_args(used_as_argument=True)
+    # Callbacks use raw pointers, so raw_type=True
+    usual_cpp_type = idl_type.cpp_type_args(raw_type=True)
     if usual_cpp_type.startswith(('Vector', 'HeapVector', 'WillBeHeapVector')):
         return 'const %s&' % usual_cpp_type
     return usual_cpp_type
 
-IdlType.callback_cpp_type = property(cpp_type)
+IdlTypeBase.callback_cpp_type = property(cpp_type)
 
 
 def generate_callback_interface(callback_interface):
diff --git a/bindings/dart/scripts/dart_interface.py b/bindings/dart/scripts/dart_interface.py
index 6904c6d..c6a5702 100644
--- a/bindings/dart/scripts/dart_interface.py
+++ b/bindings/dart/scripts/dart_interface.py
@@ -34,7 +34,7 @@
 from collections import defaultdict
 
 import idl_types
-from idl_types import IdlType, inherits_interface
+from idl_types import IdlType, inherits_interface, IdlArrayOrSequenceType, IdlArrayType
 import dart_attributes
 import dart_methods
 import dart_types
@@ -43,12 +43,13 @@
 
 
 INTERFACE_H_INCLUDES = frozenset([
-    'bindings/dart/DartDOMWrapper.h',
+    'bindings/core/dart/DartDOMWrapper.h',
     'platform/heap/Handle.h',
 ])
 
 INTERFACE_CPP_INCLUDES = frozenset([
-    'DartUtilities.h',
+
+    'bindings/core/dart/DartUtilities.h',
     'wtf/GetPtr.h',
     'wtf/RefPtr.h',
 ])
@@ -435,7 +436,7 @@
 
 
     if inherits_interface(interface.name, 'EventTarget'):
-        includes.update(['DartEventListener.h'])
+        includes.update(['bindings/core/dart/DartEventListener.h'])
 
     # [ActiveDOMObject]
     is_active_dom_object = 'ActiveDOMObject' in extended_attributes
@@ -458,14 +459,14 @@
     reachable_node_function = extended_attributes.get('SetWrapperReferenceFrom')
     if reachable_node_function:
         # FIXME(vsm): We may need bindings/dart/DartGCController.h instead.
-        includes.update(['bindings/v8/V8GCController.h',
+        includes.update(['bindings/core/v8/V8GCController.h',
                          'core/dom/Element.h'])
 
     # [SetWrapperReferenceTo]
     set_wrapper_reference_to_list = [{
         'name': argument.name,
         # FIXME: properly should be:
-        # 'cpp_type': argument.idl_type.cpp_type_args(used_as_argument=True),
+        # 'cpp_type': argument.idl_type.cpp_type_args(used_as_rvalue_type=True),
         # (if type is non-wrapper type like NodeFilter, normally RefPtr)
         # Raw pointers faster though, and NodeFilter hacky anyway.
         'cpp_type': argument.idl_type.implemented_as + '*',
@@ -547,9 +548,9 @@
     any_type_attributes = [attribute for attribute in interface.attributes
                            if attribute.idl_type.name == 'Any']
     if has_event_constructor:
-        includes.add('bindings/common/Dictionary.h')
+        includes.add('bindings/core/v8/Dictionary.h')
         if any_type_attributes:
-            includes.add('bindings/v8/SerializedScriptValue.h')
+            includes.add('bindings/core/v8/SerializedScriptValue.h')
 
     # [NamedConstructor]
     named_constructor = generate_named_constructor(interface)
@@ -867,7 +868,7 @@
         return ' || '.join(['isUndefinedOrNull(%s)' % cpp_value,
                             '%s->IsString()' % cpp_value,
                             '%s->IsObject()' % cpp_value])
-    if idl_type.array_or_sequence_type:
+    if idl_type.native_array_element_type:
         return '%s->IsArray()' % cpp_value
     if idl_type.is_callback_interface:
         return ' || '.join(['%s->IsNull()' % cpp_value,
@@ -947,7 +948,9 @@
     def cpp_argument(argument):
         argument_name = dart_types.check_reserved_name(argument.name)
         idl_type = argument.idl_type
-        if idl_type.is_typed_array_type:
+        # FIXMEDART: there has to be a cleaner way to check for arraylike
+        # types such as Uint8ClampedArray.
+        if isinstance(idl_type, IdlArrayType) or idl_type.preprocessed_type.is_typed_array_type:
             return '%s.get()' % argument_name
 
         return argument_name
@@ -977,7 +980,7 @@
 
     argument_content = {
         'cpp_type': idl_type.cpp_type_args(),
-        'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, used_as_argument=True),
+        'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, raw_type=True),
         # FIXME: check that the default value's type is compatible with the argument's
         'default_value': default_value,
         # FIXME: remove once [Default] removed and just use argument.default_value
@@ -985,9 +988,9 @@
         'idl_type_object': idl_type,
         'preprocessed_type': str(idl_type.preprocessed_type),
         # Dictionary is special-cased, but arrays and sequences shouldn't be
-        'idl_type': not idl_type.array_or_sequence_type and idl_type.base_type,
+        'idl_type': idl_type.native_array_element_type,
         'index': index,
-        'is_array_or_sequence_type': not not idl_type.array_or_sequence_type,
+        'is_array_or_sequence_type': not not idl_type.native_array_element_type,
         'is_optional': argument.is_optional,
         'is_strict_type_checking': False,  # Required for overload resolution
         'name': argument.name,
diff --git a/bindings/dart/scripts/dart_methods.py b/bindings/dart/scripts/dart_methods.py
index 03d64a5..53997fd 100644
--- a/bindings/dart/scripts/dart_methods.py
+++ b/bindings/dart/scripts/dart_methods.py
@@ -33,8 +33,9 @@
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from idl_types import IdlType, IdlUnionType, inherits_interface
+from idl_types import IdlTypeBase, IdlType, IdlUnionType, inherits_interface, IdlArrayOrSequenceType, IdlArrayType
 import dart_types
+from idl_definitions import IdlArgument
 from dart_utilities import DartUtilities
 from v8_globals import includes
 
@@ -58,11 +59,11 @@
 
     is_call_with_script_arguments = DartUtilities.has_extended_attribute_value(method, 'CallWith', 'ScriptArguments')
     if is_call_with_script_arguments:
-        includes.update(['bindings/v8/ScriptCallStackFactory.h',
+        includes.update(['bindings/core/v8/ScriptCallStackFactory.h',
                          'core/inspector/ScriptArguments.h'])
     is_call_with_script_state = DartUtilities.has_extended_attribute_value(method, 'CallWith', 'ScriptState')
     if is_call_with_script_state:
-        includes.add('bindings/dart/DartScriptState.h')
+        includes.add('bindings/core/dart/DartScriptState.h')
     is_check_security_for_node = 'CheckSecurity' in extended_attributes
     if is_check_security_for_node:
         includes.add('bindings/common/BindingSecurity.h')
@@ -81,6 +82,8 @@
     if idl_type.union_arguments and len(idl_type.union_arguments) > 0:
         this_cpp_type = []
         for cpp_type in idl_type.member_types:
+            # FIXMEDART: we shouldn't just assume RefPtr. We should append
+            # WillBeGC as appropriate.
             this_cpp_type.append("RefPtr<%s>" % cpp_type)
     else:
         this_cpp_type = idl_type.cpp_type
@@ -182,9 +185,11 @@
     if preprocessed_type == 'unrestricted double':
         preprocessed_type = 'double'
     argument_data = {
-        'cpp_type': idl_type.cpp_type_args(used_in_cpp_sequence=use_heap_vector_type),
+        'cpp_type': idl_type.cpp_type_args(extended_attributes=extended_attributes,
+                                           raw_type=True,
+                                           used_in_cpp_sequence=use_heap_vector_type),
         'cpp_value': this_cpp_value,
-        'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, used_as_argument=True),
+        'local_cpp_type': idl_type.cpp_type_args(argument.extended_attributes, raw_type=True),
         # FIXME: check that the default value's type is compatible with the argument's
         'default_value': str(argument.default_value) if argument.default_value else None,
         'enum_validation_expression': idl_type.enum_validation_expression,
@@ -196,9 +201,9 @@
         'idl_type_object': idl_type,
         'preprocessed_type': preprocessed_type,
         # Dictionary is special-cased, but arrays and sequences shouldn't be
-        'idl_type': not idl_type.array_or_sequence_type and idl_type.base_type,
+        'idl_type': idl_type.base_type,
         'index': index,
-        'is_array_or_sequence_type': not not idl_type.array_or_sequence_type,
+        'is_array_or_sequence_type': not not idl_type.native_array_element_type,
         'is_clamp': 'Clamp' in extended_attributes,
         'is_callback_interface': idl_type.is_callback_interface,
         'is_nullable': idl_type.is_nullable,
@@ -338,11 +343,25 @@
     return property_attributes_list
 
 
-def union_arguments(idl_type):
-    """Return list of ['result0Enabled', 'result0', 'result1Enabled', ...] for union types, for use in setting return value"""
-    return [arg
-            for i in range(len(idl_type.member_types))
-            for arg in ['result%sEnabled' % i, 'result%s' % i]]
+# FIXMEDART: better align this method with the v8 version.
+def union_member_argument_context(idl_type, index):
+    """Returns a context of union member for argument."""
+    return 'result%d' % index
 
-IdlType.union_arguments = property(lambda self: None)
+def union_arguments(idl_type):
+    return [union_member_argument_context(member_idl_type, index)
+            for index, member_idl_type
+            in enumerate(idl_type.member_types)]
+
+
+def argument_default_cpp_value(argument):
+    if not argument.default_value:
+        return None
+    return argument.idl_type.literal_cpp_value(argument.default_value)
+
+
+IdlTypeBase.union_arguments = None
 IdlUnionType.union_arguments = property(union_arguments)
+IdlArgument.default_cpp_value = property(argument_default_cpp_value)
+#IdlType.union_arguments = property(lambda self: None)
+#IdlUnionType.union_arguments = property(union_arguments)
diff --git a/bindings/dart/scripts/dart_types.py b/bindings/dart/scripts/dart_types.py
index 1ca39fb..5078460 100644
--- a/bindings/dart/scripts/dart_types.py
+++ b/bindings/dart/scripts/dart_types.py
@@ -38,7 +38,8 @@
 """
 
 import posixpath
-from idl_types import IdlType, IdlUnionType, TYPE_NAMES
+from idl_types import IdlTypeBase, IdlType, IdlUnionType, TYPE_NAMES, IdlArrayOrSequenceType
+
 import dart_attributes  # for IdlType.constructor_type_name
 from dart_utilities import DartUtilities
 from v8_globals import includes
@@ -72,7 +73,8 @@
     'Uint32Array': ('unsigned int', 'Uint32List'),
 }
 
-IdlType.is_typed_array_type = property(
+
+IdlTypeBase.is_typed_array_type = property(
     lambda self: self.base_type in TYPED_ARRAYS)
 
 
@@ -118,7 +120,7 @@
 }
 
 
-def cpp_type(idl_type, extended_attributes=None, used_as_argument=False, used_in_cpp_sequence=False):
+def cpp_type(idl_type, extended_attributes=None, raw_type=False, used_as_rvalue_type=False, used_in_cpp_sequence=False):
     """Returns C++ type corresponding to IDL type.
 
     |idl_type| argument is of type IdlType, while return value is a string
@@ -126,21 +128,25 @@
     Args:
         idl_type:
             IdlType
-        used_as_argument:
+        raw_type:
             bool, True if idl_type's raw/primitive C++ type should be returned.
-        will_be_in_heap_object:
-            bool, True if idl_type will be part of a possibly heap allocated
-            object (e.g., appears as an element of a C++ heap vector type.)
-            The C++ type of an interface type changes, if so.
+        used_as_rvalue_type:
+            bool, True if the C++ type is used as an argument or the return
+            type of a method.
+        used_as_variadic_argument:
+            bool, True if the C++ type is used as a variadic argument of a method.
+        used_in_cpp_sequence:
+            bool, True if the C++ type is used as an element of a container.
+            Containers can be an array, a sequence or a dictionary.
     """
     extended_attributes = extended_attributes or {}
     idl_type = idl_type.preprocessed_type
 
     # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        vector_type = cpp_ptr_type('Vector', 'HeapVector', array_or_sequence_type.gc_type)
-        return cpp_template_type(vector_type, array_or_sequence_type.cpp_type_args(used_in_cpp_sequence=True))
+    native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        vector_type = cpp_ptr_type('Vector', 'HeapVector', native_array_element_type.gc_type)
+        return cpp_template_type(vector_type, native_array_element_type.cpp_type_args(used_in_cpp_sequence=True))
 
     # Simple types
     base_idl_type = idl_type.base_type
@@ -155,38 +161,44 @@
         return CPP_SPECIAL_CONVERSION_RULES[base_idl_type]
 
     if base_idl_type in NON_WRAPPER_TYPES:
-        return 'RefPtr<%s>' % base_idl_type
+        return ('PassRefPtr<%s>' if used_as_rvalue_type else 'RefPtr<%s>') % base_idl_type
     if base_idl_type in ('DOMString', 'ByteString', 'ScalarValueString'):
-        if not used_as_argument:
+        if not raw_type:
             return 'String'
         return 'DartStringAdapter'
 
-    if idl_type.is_typed_array_type and used_as_argument:
+    if idl_type.is_typed_array_type and raw_type:
         return 'RefPtr<%s>' % base_idl_type
     if idl_type.is_callback_interface:
         return 'OwnPtr<%s>' % base_idl_type
     if idl_type.is_interface_type:
         implemented_as_class = idl_type.implemented_as
-        if used_as_argument:
+        if raw_type:
             return implemented_as_class + '*'
         new_type = 'Member' if used_in_cpp_sequence else 'RawPtr'
-        ptr_type = cpp_ptr_type('RefPtr', new_type, idl_type.gc_type)
+        ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPtr'), new_type, idl_type.gc_type)
         return cpp_template_type(ptr_type, implemented_as_class)
 
     # Default, assume native type is a pointer with same type name as idl type
     return base_idl_type + '*'
 
 
-def cpp_type_union(idl_type, extended_attributes=None, used_as_argument=False, will_be_in_heap_object=False):
+def cpp_type_union(idl_type, extended_attributes=None, used_as_rvalue_type=False, will_be_in_heap_object=False):
     return (member_type.cpp_type for member_type in idl_type.member_types)
 
+
 # Allow access as idl_type.cpp_type if no arguments
-IdlType.cpp_type = property(cpp_type)
+IdlTypeBase.cpp_type = property(cpp_type)
+IdlTypeBase.cpp_type_args = cpp_type
 IdlUnionType.cpp_type = property(cpp_type_union)
-IdlType.cpp_type_args = cpp_type
 IdlUnionType.cpp_type_args = cpp_type_union
 
 
+IdlTypeBase.native_array_element_type = None
+IdlArrayOrSequenceType.native_array_element_type = property(
+    lambda self: self.element_type)
+
+
 def cpp_template_type(template, inner_type):
     """Returns C++ template specialized to type, with space added if needed."""
     if inner_type.endswith('>'):
@@ -238,9 +250,11 @@
     lambda cls, new_implemented_as_interfaces:
         cls.implemented_as_interfaces.update(new_implemented_as_interfaces))
 
+
 # [GarbageCollected]
 IdlType.garbage_collected_types = set()
 
+IdlTypeBase.is_garbage_collected = False
 IdlType.is_garbage_collected = property(
     lambda self: self.base_type in IdlType.garbage_collected_types)
 
@@ -252,6 +266,7 @@
 # [WillBeGarbageCollected]
 IdlType.will_be_garbage_collected_types = set()
 
+IdlTypeBase.is_will_be_garbage_collected = False
 IdlType.is_will_be_garbage_collected = property(
     lambda self: self.base_type in IdlType.will_be_garbage_collected_types)
 
@@ -267,7 +282,7 @@
         return 'WillBeGarbageCollectedObject'
     return 'RefCountedObject'
 
-IdlType.gc_type = property(gc_type)
+IdlTypeBase.gc_type = property(gc_type)
 
 
 ################################################################################
@@ -281,7 +296,7 @@
 INCLUDES_FOR_TYPE = {
     'object': set(),
     'CompareHow': set(),
-    'Dictionary': set(['bindings/common/Dictionary.h']),
+    'Dictionary': set(['bindings/core/v8/Dictionary.h']),
     'EventHandler': set(),
     'EventListener': set(),
     'HTMLCollection': set(['bindings/core/dart/DartHTMLCollection.h',
@@ -298,7 +313,7 @@
                      'core/html/LabelsNodeList.h']),
     'Promise': set(),
     'SerializedScriptValue': set(),
-    'ScriptValue': set(['bindings/dart/DartScriptValue.h']),
+    'ScriptValue': set(['bindings/core/dart/DartScriptValue.h']),
 }
 
 
@@ -306,9 +321,8 @@
     idl_type = idl_type.preprocessed_type
 
     # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        return includes_for_type(array_or_sequence_type)
+    if idl_type.native_array_element_type:
+        return includes_for_type(idl_type)
 
     # Simple types
     base_idl_type = idl_type.base_type
@@ -329,7 +343,10 @@
     if base_idl_type.endswith('Constructor'):
         # FIXME: replace with a [ConstructorAttribute] extended attribute
         base_idl_type = idl_type.constructor_type_name
-    return set(['Dart%s.h' % base_idl_type])
+    if base_idl_type not in component_dir:
+        return set()
+    return set(['bindings/%s/dart/Dart%s.h' % (component_dir[base_idl_type],
+                                               base_idl_type)])
 
 IdlType.includes_for_type = property(includes_for_type)
 IdlUnionType.includes_for_type = property(
@@ -340,7 +357,7 @@
 def add_includes_for_type(idl_type):
     includes.update(idl_type.includes_for_type)
 
-IdlType.add_includes_for_type = add_includes_for_type
+IdlTypeBase.add_includes_for_type = add_includes_for_type
 IdlUnionType.add_includes_for_type = add_includes_for_type
 
 
@@ -352,6 +369,13 @@
     includes.update(includes_for_interface(interface_name))
 
 
+component_dir = {}
+
+
+def set_component_dirs(new_component_dirs):
+    component_dir.update(new_component_dirs)
+
+
 ################################################################################
 # Dart -> C++
 ################################################################################
@@ -402,9 +426,9 @@
 def dart_value_to_cpp_value(idl_type, interface_extended_attributes, extended_attributes, variable_name,
                             null_check, index, auto_scope=True):
     # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        return dart_value_to_cpp_value_array_or_sequence(array_or_sequence_type, variable_name, index)
+    native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        return dart_value_to_cpp_value_array_or_sequence(native_array_element_type, variable_name, index)
 
     # Simple types
     idl_type = idl_type.preprocessed_type
@@ -444,31 +468,30 @@
                                         auto_scope=DartUtilities.bool_to_cpp(auto_scope))
 
 
-def dart_value_to_cpp_value_array_or_sequence(array_or_sequence_type, variable_name, index):
+def dart_value_to_cpp_value_array_or_sequence(native_array_element_type, variable_name, index):
     # Index is None for setters, index (starting at 0) for method arguments,
     # and is used to provide a human-readable exception message
-
     if index is None:
         index = 0  # special case, meaning "setter"
 #    else:
 #        index += 1  # human-readable index
-    if (array_or_sequence_type.is_interface_type and
-        array_or_sequence_type.name != 'Dictionary'):
-        this_cpp_type = array_or_sequence_type.cpp_type
-        ref_ptr_type = 'Member' if array_or_sequence_type.is_will_be_garbage_collected else 'RefPtr'
+    if (native_array_element_type.is_interface_type and
+        native_array_element_type.name != 'Dictionary'):
+        this_cpp_type = None
+        ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_type.gc_type)
         # FIXME(vsm): We're not using ref_ptr_type....
         expression_format = 'DartUtilities::toNativeVector<{cpp_type} >(args, {index}, {variable_name}, exception)'
-        add_includes_for_type(array_or_sequence_type)
+        add_includes_for_type(native_array_element_type)
     else:
         ref_ptr_type = None
-        this_cpp_type = array_or_sequence_type.cpp_type
+        this_cpp_type = native_array_element_type.cpp_type
         expression_format = 'DartUtilities::toNativeVector<{cpp_type}>(args, {index}, {variable_name}, exception)'
-    expression = expression_format.format(array_or_sequence_type=array_or_sequence_type.name,
+
+    expression = expression_format.format(native_array_element_type=native_array_element_type.name,
                                           cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_type,
                                           variable_name=variable_name)
     return expression
 
-
 def dart_value_to_local_cpp_value(idl_type, interface_extended_attributes, extended_attributes,
                                   variable_name, null_check, index=None, auto_scope=True):
     """Returns an expression that converts a Dart value to a C++ value as a local value."""
@@ -480,8 +503,8 @@
 
     return cpp_value
 
-IdlType.dart_value_to_local_cpp_value = dart_value_to_local_cpp_value
-IdlUnionType.dart_value_to_local_cpp_value = dart_value_to_local_cpp_value
+IdlTypeBase.dart_value_to_local_cpp_value = dart_value_to_local_cpp_value
+#IdlUnionType.dart_value_to_local_cpp_value = dart_value_to_local_cpp_value
 
 
 # Insure that we don't use C++ reserved names.  Today on default is a problem.
@@ -501,7 +524,7 @@
         return IdlType('ScriptValue')
     return idl_type
 
-IdlType.preprocessed_type = property(preprocess_idl_type)
+IdlTypeBase.preprocessed_type = property(preprocess_idl_type)
 IdlUnionType.preprocessed_type = property(preprocess_idl_type)
 
 
@@ -535,10 +558,10 @@
     extended_attributes = extended_attributes or {}
 
     # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        if array_or_sequence_type.is_interface_type:
-            add_includes_for_type(array_or_sequence_type)
+    native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        if native_array_element_type.is_interface_type:
+            add_includes_for_type(native_array_element_type)
         return 'array'
 
     # Simple types
@@ -575,7 +598,7 @@
     # Pointer type
     return 'DOMWrapper'
 
-IdlType.dart_conversion_type = dart_conversion_type
+IdlTypeBase.dart_conversion_type = dart_conversion_type
 
 
 DART_SET_RETURN_VALUE = {
@@ -642,8 +665,13 @@
         if this_dart_conversion_type == 'array':
             # FIXME: This is not right if the base type is a primitive, DOMString, etc.
             # What is the right check for base type?
-            if idl_type.base_type not in DART_TO_CPP_VALUE:
-                creation_context = '<Dart%s>' % idl_type.base_type
+            base_type = str(idl_type.element_type)
+            if base_type not in DART_TO_CPP_VALUE:
+                if base_type == 'None':
+                    raise Exception('Unknown base type for ' + str(idl_type))
+                creation_context = '<Dart%s>' % base_type
+            if idl_type.is_nullable:
+                creation_context = 'Nullable' + creation_context
 
         cpp_value = idl_type.cpp_value_to_dart_value(cpp_value, creation_context=creation_context,
                                                      extended_attributes=extended_attributes)
@@ -680,7 +708,7 @@
             for i, member_type in
             enumerate(idl_type.member_types)]
 
-IdlType.dart_set_return_value = dart_set_return_value
+IdlTypeBase.dart_set_return_value = dart_set_return_value
 IdlUnionType.dart_set_return_value = dart_set_return_value_union
 
 IdlType.release = property(lambda self: self.is_interface_type)
@@ -725,7 +753,7 @@
         idl_type=idl_type.base_type)
     return statement
 
-IdlType.cpp_value_to_dart_value = cpp_value_to_dart_value
+IdlTypeBase.cpp_value_to_dart_value = cpp_value_to_dart_value
 
 
 # Override idl_type.name to not suffix orNull to the name, in Dart we always
@@ -743,10 +771,8 @@
     """
     base_type = idl_type.base_type
     base_type_name = TYPE_NAMES.get(base_type, base_type)
-    if idl_type.is_array:
-        return base_type_name + 'Array'
-    if idl_type.is_sequence:
-        return base_type_name + 'Sequence'
+    if idl_type.native_array_element_type:
+        return idl_type.inner_name()
     return base_type_name
 
 IdlType.name = property(dart_name)
diff --git a/bindings/dart/scripts/dart_utilities.py b/bindings/dart/scripts/dart_utilities.py
index 9966323..4f888d6 100644
--- a/bindings/dart/scripts/dart_utilities.py
+++ b/bindings/dart/scripts/dart_utilities.py
@@ -77,7 +77,7 @@
     if not has_logging:
         return set()
 # TODO(terry): Remove Me?
-#    includes.add('bindings/v8/V8DOMActivityLogger.h')
+#    includes.add('bindings/core/v8/V8DOMActivityLogger.h')
     if activity_logging.endswith('ForIsolatedWorlds'):
         return set([''])
     return set(['', 'ForMainWorld'])  # endswith('ForAllWorlds')
@@ -85,7 +85,7 @@
 
 # [CallWith]
 _CALL_WITH_ARGUMENTS = {
-    'ScriptState': '&state',
+    'ScriptState': 'state',
     'ExecutionContext': 'context',
     'ScriptArguments': 'scriptArguments.release()',
     'ActiveWindow': 'DartUtilities::callingDomWindowForCurrentIsolate()',
diff --git a/bindings/scripts/aggregate_generated_bindings.py b/bindings/scripts/aggregate_generated_bindings.py
index abb2b81..98bbaa9 100755
--- a/bindings/scripts/aggregate_generated_bindings.py
+++ b/bindings/scripts/aggregate_generated_bindings.py
@@ -120,7 +120,7 @@
     if not match:
         return None
     conditional = match.group(1)
-    return re.split('([|&])', conditional)
+    return re.split('([|,])', conditional)
 
 
 def extract_meta_data(file_paths):
diff --git a/bindings/scripts/blink_idl_lexer.py b/bindings/scripts/blink_idl_lexer.py
index bbde342..ba68c6c 100644
--- a/bindings/scripts/blink_idl_lexer.py
+++ b/bindings/scripts/blink_idl_lexer.py
@@ -69,6 +69,7 @@
 sys.path.append(tools_dir)
 from idl_parser.idl_lexer import IDLLexer
 
+LEXTAB = 'lextab'
 REMOVE_TOKENS = ['COMMENT']
 
 
@@ -88,7 +89,8 @@
         for token in tokens:
             self._RemoveToken(token)
 
-    def __init__(self, debug=False, optimize=True, outputdir=None):
+    def __init__(self, debug=False, optimize=True, outputdir=None,
+                 rewrite_tables=False):
         if debug:
             # Turn off optimization and caching to help debugging
             optimize = False
@@ -98,6 +100,16 @@
             # as a Python module
             sys.path.append(outputdir)
 
+            if rewrite_tables:
+                tablefile_root = os.path.join(outputdir, LEXTAB)
+                # Also remove the .pyc/.pyo files, or they'll be used even if
+                # the .py file doesn't exist.
+                for ext in ('.py', '.pyc', '.pyo'):
+                    try:
+                        os.unlink(tablefile_root + ext)
+                    except OSError:
+                        pass
+
         IDLLexer.__init__(self)
         # Overrides to parent class
         self._RemoveTokens(REMOVE_TOKENS)
@@ -108,6 +120,7 @@
         self._lexobj = lex.lex(object=self,
                                debug=debug,
                                optimize=optimize,
+                               lextab=LEXTAB,
                                outputdir=outputdir)
 
 
@@ -120,7 +133,10 @@
     except IndexError as err:
         print 'Usage: %s OUTPUT_DIR' % argv[0]
         return 1
-    lexer = BlinkIDLLexer(outputdir=outputdir)
+    # Important: rewrite_tables=True causes the cache file to be deleted if it
+    # exists, thus making sure that PLY doesn't load it instead of regenerating
+    # the parse table.
+    lexer = BlinkIDLLexer(outputdir=outputdir, rewrite_tables=True)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/blink_idl_parser.py b/bindings/scripts/blink_idl_parser.py
index 6b205f2..59218a8 100644
--- a/bindings/scripts/blink_idl_parser.py
+++ b/bindings/scripts/blink_idl_parser.py
@@ -71,6 +71,7 @@
 from idl_parser.idl_parser import ParseFile as parse_file
 
 from blink_idl_lexer import BlinkIDLLexer
+import blink_idl_lexer
 
 
 # Explicitly set starting symbol to rule defined only in base parser.
@@ -332,23 +333,17 @@
         elif len(p) == 3:
             p[0] = ListFromConcat(self.BuildTrue('NULLABLE'), p[2])
 
-    # [b76.1] Add support for compound Extended Attribute values (A&B and A|B)
+    # [b94] Add support for OR Extended Attribute values "A|B"
     def p_ExtendedAttributeIdentList(self, p):
-        """ExtendedAttributeIdentList : identifier '=' identifier '&' IdentAndList
+        """ExtendedAttributeIdentList : identifier '=' '(' IdentifierList ')'
                                       | identifier '=' identifier '|' IdentOrList"""
-        value = self.BuildAttribute('VALUE', p[3] + p[4] + p[5])
+        if type(p[4]) is list:
+            value = self.BuildAttribute('VALUE', ','.join(p[4]))
+        else:
+            value = self.BuildAttribute('VALUE', p[3] + p[4] + p[5])
         p[0] = self.BuildNamed('ExtAttribute', p, 1, value)
 
-    # [b76.2] A&B&C
-    def p_IdentAndList(self, p):
-        """IdentAndList : identifier '&' IdentAndList
-                        | identifier"""
-        if len(p) > 3:
-            p[0] = p[1] + p[2] + p[3]
-        else:
-            p[0] = p[1]
-
-    # [b76.3] A|B|C
+    # [b94.1] A|B|C
     def p_IdentOrList(self, p):
         """IdentOrList : identifier '|' IdentOrList
                        | identifier"""
@@ -380,6 +375,8 @@
     def __init__(self,
                  # common parameters
                  debug=False,
+                 # local parameters
+                 rewrite_tables=False,
                  # idl_parser parameters
                  lexer=None, verbose=False, mute_error=False,
                  # yacc parameters
@@ -394,6 +391,11 @@
             write_tables = True
         if outputdir:
             picklefile = picklefile or os.path.join(outputdir, 'parsetab.pickle')
+            if rewrite_tables:
+                try:
+                    os.unlink(picklefile)
+                except OSError:
+                    pass
 
         lexer = lexer or BlinkIDLLexer(debug=debug,
                                        outputdir=outputdir,
@@ -433,13 +435,17 @@
 ################################################################################
 
 def main(argv):
-    # If file itself executed, cache parse table
+    # If file itself executed, cache lex/parse tables
     try:
         outputdir = argv[1]
     except IndexError as err:
         print 'Usage: %s OUTPUT_DIR' % argv[0]
         return 1
-    parser = BlinkIDLParser(outputdir=outputdir)
+    blink_idl_lexer.main(argv)
+    # Important: rewrite_tables=True causes the cache file to be deleted if it
+    # exists, thus making sure that PLY doesn't load it instead of regenerating
+    # the parse table.
+    parser = BlinkIDLParser(outputdir=outputdir, rewrite_tables=True)
 
 
 if __name__ == '__main__':
diff --git a/bindings/scripts/code_generator_v8.py b/bindings/scripts/code_generator_v8.py
index 778a87e..272b611 100644
--- a/bindings/scripts/code_generator_v8.py
+++ b/bindings/scripts/code_generator_v8.py
@@ -73,17 +73,34 @@
 import idl_types
 from idl_types import IdlType
 import v8_callback_interface
+import v8_dictionary
 from v8_globals import includes, interfaces
 import v8_interface
 import v8_types
 from v8_utilities import capitalize, cpp_name, conditional_string, v8_class_name
 
 
+def render_template(interface_info, header_template, cpp_template,
+                    template_context):
+    template_context['code_generator'] = module_pyname
+
+    # Add includes for any dependencies
+    template_context['header_includes'] = sorted(
+        template_context['header_includes'])
+    includes.update(interface_info.get('dependencies_include_paths', []))
+    template_context['cpp_includes'] = sorted(includes)
+
+    header_text = header_template.render(template_context)
+    cpp_text = cpp_template.render(template_context)
+    return header_text, cpp_text
+
+
 class CodeGeneratorV8(object):
-    def __init__(self, interfaces_info, cache_dir):
+    def __init__(self, interfaces_info, cache_dir, output_dir):
         interfaces_info = interfaces_info or {}
         self.interfaces_info = interfaces_info
         self.jinja_env = initialize_jinja_env(cache_dir)
+        self.output_dir = output_dir
 
         # Set global type info
         idl_types.set_ancestors(dict(
@@ -94,6 +111,10 @@
             interface_name
             for interface_name, interface_info in interfaces_info.iteritems()
             if interface_info['is_callback_interface']))
+        IdlType.set_dictionaries(set(
+            dictionary_name
+            for dictionary_name, interface_info in interfaces_info.iteritems()
+            if interface_info['is_dictionary']))
         IdlType.set_implemented_as_interfaces(dict(
             (interface_name, interface_info['implemented_as'])
             for interface_name, interface_info in interfaces_info.iteritems()
@@ -110,48 +131,100 @@
             (interface_name, interface_info['component_dir'])
             for interface_name, interface_info in interfaces_info.iteritems()))
 
-    def generate_code(self, definitions, interface_name):
+    def output_paths_for_bindings(self, definition_name):
+        header_path = posixpath.join(self.output_dir,
+                                     'V8%s.h' % definition_name)
+        cpp_path = posixpath.join(self.output_dir, 'V8%s.cpp' % definition_name)
+        return header_path, cpp_path
+
+    def output_paths_for_impl(self, definition_name):
+        header_path = posixpath.join(self.output_dir, '%s.h' % definition_name)
+        cpp_path = posixpath.join(self.output_dir, '%s.cpp' % definition_name)
+        return header_path, cpp_path
+
+    def generate_code(self, definitions, definition_name):
         """Returns .h/.cpp code as (header_text, cpp_text)."""
-        try:
-            interface = definitions.interfaces[interface_name]
-        except KeyError:
-            raise Exception('%s not in IDL definitions' % interface_name)
-
-        # Store other interfaces for introspection
-        interfaces.update(definitions.interfaces)
-
         # Set local type info
         IdlType.set_callback_functions(definitions.callback_functions.keys())
         IdlType.set_enums((enum.name, enum.values)
                           for enum in definitions.enumerations.values())
 
+        if definition_name in definitions.interfaces:
+            return self.generate_interface_code(
+                definitions, definition_name,
+                definitions.interfaces[definition_name])
+        if definition_name in definitions.dictionaries:
+            return self.generate_dictionary_code(
+                definitions, definition_name,
+                definitions.dictionaries[definition_name])
+        raise ValueError('%s is not in IDL definitions' % definition_name)
+
+    def generate_interface_code(self, definitions, interface_name, interface):
+        # Store other interfaces for introspection
+        interfaces.update(definitions.interfaces)
+
         # Select appropriate Jinja template and contents function
         if interface.is_callback:
             header_template_filename = 'callback_interface.h'
             cpp_template_filename = 'callback_interface.cpp'
-            generate_contents = v8_callback_interface.generate_callback_interface
+            interface_context = v8_callback_interface.callback_interface_context
         else:
             header_template_filename = 'interface.h'
             cpp_template_filename = 'interface.cpp'
-            generate_contents = v8_interface.generate_interface
+            interface_context = v8_interface.interface_context
         header_template = self.jinja_env.get_template(header_template_filename)
         cpp_template = self.jinja_env.get_template(cpp_template_filename)
 
-        # Generate contents (input parameters for Jinja)
-        template_contents = generate_contents(interface)
-        template_contents['code_generator'] = module_pyname
-
-        # Add includes for interface itself and any dependencies
         interface_info = self.interfaces_info[interface_name]
-        template_contents['header_includes'].add(interface_info['include_path'])
-        template_contents['header_includes'] = sorted(template_contents['header_includes'])
-        includes.update(interface_info.get('dependencies_include_paths', []))
-        template_contents['cpp_includes'] = sorted(includes)
 
-        # Render Jinja templates
-        header_text = header_template.render(template_contents)
-        cpp_text = cpp_template.render(template_contents)
-        return header_text, cpp_text
+        template_context = interface_context(interface)
+        # Add the include for interface itself
+        template_context['header_includes'].add(interface_info['include_path'])
+        header_text, cpp_text = render_template(
+            interface_info, header_template, cpp_template, template_context)
+        header_path, cpp_path = self.output_paths_for_bindings(interface_name)
+        return (
+            (header_path, header_text),
+            (cpp_path, cpp_text),
+        )
+
+    def generate_dictionary_code(self, definitions, dictionary_name,
+                                 dictionary):
+        interface_info = self.interfaces_info[dictionary_name]
+        bindings_results = self.generate_dictionary_bindings(
+            dictionary_name, interface_info, dictionary)
+        impl_results = self.generate_dictionary_impl(
+            dictionary_name, interface_info, dictionary)
+        return bindings_results + impl_results
+
+    def generate_dictionary_bindings(self, dictionary_name,
+                                     interface_info, dictionary):
+        header_template = self.jinja_env.get_template('dictionary_v8.h')
+        cpp_template = self.jinja_env.get_template('dictionary_v8.cpp')
+        template_context = v8_dictionary.dictionary_context(dictionary)
+        # Add the include for interface itself
+        template_context['header_includes'].add(interface_info['include_path'])
+        header_text, cpp_text = render_template(
+            interface_info, header_template, cpp_template, template_context)
+        header_path, cpp_path = self.output_paths_for_bindings(dictionary_name)
+        return (
+            (header_path, header_text),
+            (cpp_path, cpp_text),
+        )
+
+    def generate_dictionary_impl(self, dictionary_name,
+                                 interface_info, dictionary):
+        header_template = self.jinja_env.get_template('dictionary_impl.h')
+        cpp_template = self.jinja_env.get_template('dictionary_impl.cpp')
+        template_context = v8_dictionary.dictionary_impl_context(
+            dictionary, self.interfaces_info)
+        header_text, cpp_text = render_template(
+            interface_info, header_template, cpp_template, template_context)
+        header_path, cpp_path = self.output_paths_for_impl(dictionary_name)
+        return (
+            (header_path, header_text),
+            (cpp_path, cpp_text),
+        )
 
 
 def initialize_jinja_env(cache_dir):
@@ -166,11 +239,21 @@
     jinja_env.filters.update({
         'blink_capitalize': capitalize,
         'conditional': conditional_if_endif,
+        'exposed': exposed_if,
+        'per_context_enabled': per_context_enabled_if,
         'runtime_enabled': runtime_enabled_if,
         })
     return jinja_env
 
 
+def generate_indented_conditional(code, conditional):
+    # Indent if statement to level of original code
+    indent = re.match(' *', code).group(0)
+    return ('%sif (%s) {\n' % (indent, conditional) +
+            '    %s\n' % '\n    '.join(code.splitlines()) +
+            '%s}\n' % indent)
+
+
 # [Conditional]
 def conditional_if_endif(code, conditional_string):
     # Jinja2 filter to generate if/endif directive blocks
@@ -181,15 +264,25 @@
             '#endif // %s\n' % conditional_string)
 
 
+# [Exposed]
+def exposed_if(code, exposed_test):
+    if not exposed_test:
+        return code
+    return generate_indented_conditional(code, 'context && (%s)' % exposed_test)
+
+
+# [PerContextEnabled]
+def per_context_enabled_if(code, per_context_enabled_function):
+    if not per_context_enabled_function:
+        return code
+    return generate_indented_conditional(code, 'context && context->isDocument() && %s(toDocument(context))' % per_context_enabled_function)
+
+
 # [RuntimeEnabled]
 def runtime_enabled_if(code, runtime_enabled_function_name):
     if not runtime_enabled_function_name:
         return code
-    # Indent if statement to level of original code
-    indent = re.match(' *', code).group(0)
-    return ('%sif (%s()) {\n' % (indent, runtime_enabled_function_name) +
-            '    %s\n' % '\n    '.join(code.splitlines()) +
-            '%s}\n' % indent)
+    return generate_indented_conditional(code, '%s()' % runtime_enabled_function_name)
 
 
 ################################################################################
diff --git a/bindings/scripts/compute_global_objects.py b/bindings/scripts/compute_global_objects.py
index 93d2eed..2e83e46 100755
--- a/bindings/scripts/compute_global_objects.py
+++ b/bindings/scripts/compute_global_objects.py
@@ -73,9 +73,7 @@
 
     global_value = extended_attributes[global_key]
     if global_value:
-        # FIXME: In spec names are comma-separated, which makes parsing very
-        # difficult (https://www.w3.org/Bugs/Public/show_bug.cgi?id=24959).
-        return global_value.split('&')
+        return global_value.strip('()').split(',')
     return [interface_name]
 
 
diff --git a/bindings/scripts/compute_interfaces_info_individual.py b/bindings/scripts/compute_interfaces_info_individual.py
index c3671d9..d7b58e1 100755
--- a/bindings/scripts/compute_interfaces_info_individual.py
+++ b/bindings/scripts/compute_interfaces_info_individual.py
@@ -47,7 +47,7 @@
 import posixpath
 import sys
 
-from utilities import get_file_contents, read_file_to_list, idl_filename_to_interface_name, write_pickle_file, get_interface_extended_attributes_from_idl, is_callback_interface_from_idl, get_partial_interface_name_from_idl, get_implements_from_idl, get_parent_interface, get_put_forward_interfaces_from_idl
+from utilities import get_file_contents, read_file_to_list, idl_filename_to_interface_name, write_pickle_file, get_interface_extended_attributes_from_idl, is_callback_interface_from_idl, is_dictionary_from_idl, get_partial_interface_name_from_idl, get_implements_from_idl, get_parent_interface, get_put_forward_interfaces_from_idl
 
 module_path = os.path.dirname(__file__)
 source_path = os.path.normpath(os.path.join(module_path, os.pardir, os.pardir))
@@ -140,10 +140,11 @@
         'implemented_by_interfaces': left_interfaces,  # private, merged to next
         'implements_interfaces': right_interfaces,
         'include_path': this_include_path,
+        'is_callback_interface': is_callback_interface_from_idl(idl_file_contents),
+        'is_dictionary': is_dictionary_from_idl(idl_file_contents),
         # FIXME: temporary private field, while removing old treatement of
         # 'implements': http://crbug.com/360435
         'is_legacy_treat_as_partial_interface': 'LegacyTreatAsPartialInterface' in extended_attributes,
-        'is_callback_interface': is_callback_interface_from_idl(idl_file_contents),
         'parent': get_parent_interface(idl_file_contents),
         # Interfaces that are referenced (used as types) and that we introspect
         # during code generation (beyond interface-level data ([ImplementedAs],
diff --git a/bindings/scripts/generate_global_constructors.py b/bindings/scripts/generate_global_constructors.py
index 81838fe..1be2ac3 100755
--- a/bindings/scripts/generate_global_constructors.py
+++ b/bindings/scripts/generate_global_constructors.py
@@ -86,9 +86,7 @@
     # member the extended attribute applies to will be exposed only on objects
     # associated with ECMAScript global environments whose global object
     # implements an interface that has a matching global name.
-    # FIXME: In spec names are comma-separated, but that makes parsing very
-    # difficult (https://www.w3.org/Bugs/Public/show_bug.cgi?id=24959).
-    exposed_global_names = extended_attributes.get('Exposed', 'Window').split('&')
+    exposed_global_names = extended_attributes.get('Exposed', 'Window').strip('()').split(',')
     new_constructors_list = generate_global_constructors_list(interface_name, extended_attributes)
     for exposed_global_name in exposed_global_names:
         global_name_to_constructors[exposed_global_name].extend(new_constructors_list)
diff --git a/bindings/scripts/idl_compiler.py b/bindings/scripts/idl_compiler.py
index 6728aff..c74aae7 100755
--- a/bindings/scripts/idl_compiler.py
+++ b/bindings/scripts/idl_compiler.py
@@ -100,14 +100,13 @@
         self.output_directory = output_directory
         self.reader = IdlReader(interfaces_info, cache_directory)
 
-    def compile_and_write(self, idl_filename, output_filenames):
+    def compile_and_write(self, idl_filename):
         interface_name = idl_filename_to_interface_name(idl_filename)
         definitions = self.reader.read_idl_definitions(idl_filename)
         output_code_list = self.code_generator.generate_code(
             definitions, interface_name)
-        for output_code, output_filename in zip(output_code_list,
-                                                output_filenames):
-            write_file(output_code, output_filename, self.only_if_changed)
+        for output_path, output_code in output_code_list:
+            write_file(output_code, output_path, self.only_if_changed)
 
     @abc.abstractmethod
     def compile_file(self, idl_filename):
@@ -118,15 +117,11 @@
     def __init__(self, *args, **kwargs):
         IdlCompiler.__init__(self, *args, **kwargs)
         self.code_generator = CodeGeneratorV8(self.interfaces_info,
-                                              self.cache_directory)
+                                              self.cache_directory,
+                                              self.output_directory)
 
     def compile_file(self, idl_filename):
-        interface_name = idl_filename_to_interface_name(idl_filename)
-        header_filename = os.path.join(self.output_directory,
-                                       'V8%s.h' % interface_name)
-        cpp_filename = os.path.join(self.output_directory,
-                                    'V8%s.cpp' % interface_name)
-        self.compile_and_write(idl_filename, (header_filename, cpp_filename))
+        self.compile_and_write(idl_filename)
 
 
 def main():
diff --git a/bindings/scripts/idl_definitions.py b/bindings/scripts/idl_definitions.py
index 50664ba..d5dae32 100644
--- a/bindings/scripts/idl_definitions.py
+++ b/bindings/scripts/idl_definitions.py
@@ -48,8 +48,10 @@
     IdlInterface
         IdlAttribute < TypedObject
         IdlConstant < TypedObject
+        IdlLiteral
         IdlOperation < TypedObject
             IdlArgument < TypedObject
+        IdlStringifier
     IdlException < IdlInterface
         (same contents as IdlInterface)
 
@@ -60,7 +62,7 @@
 
 import abc
 
-from idl_types import IdlType, IdlUnionType
+from idl_types import IdlType, IdlUnionType, IdlArrayType, IdlSequenceType
 
 SPECIAL_KEYWORD_LIST = ['GETTER', 'SETTER', 'DELETER']
 STANDARD_TYPEDEFS = {
@@ -98,12 +100,13 @@
 ################################################################################
 
 class IdlDefinitions(object):
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         """Args: node: AST root node, class == 'File'"""
         self.callback_functions = {}
         self.dictionaries = {}
         self.enumerations = {}
         self.interfaces = {}
+        self.idl_name = idl_name
 
         node_class = node.GetClass()
         if node_class != 'File':
@@ -117,26 +120,26 @@
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Interface':
-                interface = IdlInterface(child)
+                interface = IdlInterface(idl_name, child)
                 self.interfaces[interface.name] = interface
             elif child_class == 'Exception':
-                exception = IdlException(child)
+                exception = IdlException(idl_name, child)
                 # For simplicity, treat exceptions as interfaces
                 self.interfaces[exception.name] = exception
             elif child_class == 'Typedef':
                 type_name = child.GetName()
                 typedefs[type_name] = typedef_node_to_type(child)
             elif child_class == 'Enum':
-                enumeration = IdlEnum(child)
+                enumeration = IdlEnum(idl_name, child)
                 self.enumerations[enumeration.name] = enumeration
             elif child_class == 'Callback':
-                callback_function = IdlCallbackFunction(child)
+                callback_function = IdlCallbackFunction(idl_name, child)
                 self.callback_functions[callback_function.name] = callback_function
             elif child_class == 'Implements':
                 # Implements is handled at the interface merging step
                 pass
             elif child_class == 'Dictionary':
-                dictionary = IdlDictionary(child)
+                dictionary = IdlDictionary(idl_name, child)
                 self.dictionaries[dictionary.name] = dictionary
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
@@ -178,7 +181,7 @@
 ################################################################################
 
 class IdlCallbackFunction(TypedObject):
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         children = node.GetChildren()
         num_children = len(children)
         if num_children != 2:
@@ -188,9 +191,10 @@
         if arguments_node_class != 'Arguments':
             raise ValueError('Expected Arguments node, got %s' % arguments_node_class)
 
+        self.idl_name = idl_name
         self.name = node.GetName()
         self.idl_type = type_node_to_type(type_node)
-        self.arguments = arguments_node_to_arguments(arguments_node)
+        self.arguments = arguments_node_to_arguments(idl_name, arguments_node)
 
     def resolve_typedefs(self, typedefs):
         TypedObject.resolve_typedefs(self, typedefs)
@@ -203,34 +207,42 @@
 ################################################################################
 
 class IdlDictionary(object):
-    def __init__(self, node):
-        self.parent = None
+    def __init__(self, idl_name, node):
+        self.extended_attributes = {}
+        self.is_partial = node.GetProperty('Partial') or False
+        self.idl_name = idl_name
         self.name = node.GetName()
         self.members = []
+        self.parent = None
         for child in node.GetChildren():
             child_class = child.GetClass()
             if child_class == 'Inherit':
                 self.parent = child.GetName()
             elif child_class == 'Key':
-                self.members.append(IdlDictionaryMember(child))
+                self.members.append(IdlDictionaryMember(idl_name, child))
+            elif child_class == 'ExtAttributes':
+                self.extended_attributes = (
+                    ext_attributes_node_to_extended_attributes(idl_name, child))
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
 
 class IdlDictionaryMember(object):
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         self.default_value = None
         self.extended_attributes = {}
         self.idl_type = None
+        self.idl_name = idl_name
         self.name = node.GetName()
         for child in node.GetChildren():
             child_class = child.GetClass()
             if child_class == 'Type':
                 self.idl_type = type_node_to_type(child)
             elif child_class == 'Default':
-                self.default_value = child.GetProperty('VALUE')
+                self.default_value = default_node_to_idl_literal(child)
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                self.extended_attributes = (
+                    ext_attributes_node_to_extended_attributes(idl_name, child))
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -241,7 +253,8 @@
 
 class IdlEnum(object):
     # FIXME: remove, just treat enums as a dictionary
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
+        self.idl_name = idl_name
         self.name = node.GetName()
         self.values = []
         for child in node.GetChildren():
@@ -253,7 +266,7 @@
 ################################################################################
 
 class IdlInterface(object):
-    def __init__(self, node=None):
+    def __init__(self, idl_name, node=None):
         self.attributes = []
         self.constants = []
         self.constructors = []
@@ -261,6 +274,7 @@
         self.extended_attributes = {}
         self.operations = []
         self.parent = None
+        self.stringifier = None
         if not node:  # Early exit for IdlException.__init__
             return
 
@@ -268,25 +282,29 @@
         self.is_exception = False
         # FIXME: uppercase 'Partial' => 'PARTIAL' in base IDL parser
         self.is_partial = node.GetProperty('Partial') or False
+        self.idl_name = idl_name
         self.name = node.GetName()
 
         children = node.GetChildren()
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Attribute':
-                self.attributes.append(IdlAttribute(child))
+                self.attributes.append(IdlAttribute(idl_name, child))
             elif child_class == 'Const':
-                self.constants.append(IdlConstant(child))
+                self.constants.append(IdlConstant(idl_name, child))
             elif child_class == 'ExtAttributes':
-                extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
                 self.constructors, self.custom_constructors = (
-                    extended_attributes_to_constructors(extended_attributes))
+                    extended_attributes_to_constructors(idl_name, extended_attributes))
                 clear_constructor_attributes(extended_attributes)
                 self.extended_attributes = extended_attributes
             elif child_class == 'Operation':
-                self.operations.append(IdlOperation(child))
+                self.operations.append(IdlOperation(idl_name, child))
             elif child_class == 'Inherit':
                 self.parent = child.GetName()
+            elif child_class == 'Stringifier':
+                self.stringifier = IdlStringifier(idl_name, child)
+                self.process_stringifier()
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -302,6 +320,14 @@
         for operation in self.operations:
             operation.resolve_typedefs(typedefs)
 
+    def process_stringifier(self):
+        """Add the stringifier's attribute or named operation child, if it has
+        one, as a regular attribute/operation of this interface."""
+        if self.stringifier.attribute:
+            self.attributes.append(self.stringifier.attribute)
+        elif self.stringifier.operation:
+            self.operations.append(self.stringifier.operation)
+
     def merge(self, other):
         """Merge in another interface's members (e.g., partial interface)"""
         self.attributes.extend(other.attributes)
@@ -316,26 +342,27 @@
     # are not expected. Thus it is easier to implement exceptions as a
     # restricted subclass of interfaces.
     # http://www.w3.org/TR/WebIDL/#idl-exceptions
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         # Exceptions are similar to Interfaces, but simpler
-        IdlInterface.__init__(self)
+        IdlInterface.__init__(self, idl_name)
         self.is_callback = False
         self.is_exception = True
         self.is_partial = False
+        self.idl_name = idl_name
         self.name = node.GetName()
 
         children = node.GetChildren()
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Attribute':
-                attribute = IdlAttribute(child)
+                attribute = IdlAttribute(idl_name, child)
                 self.attributes.append(attribute)
             elif child_class == 'Const':
-                self.constants.append(IdlConstant(child))
+                self.constants.append(IdlConstant(idl_name, child))
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
             elif child_class == 'ExceptionOperation':
-                self.operations.append(IdlOperation.from_exception_operation_node(child))
+                self.operations.append(IdlOperation.from_exception_operation_node(idl_name, child))
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -345,9 +372,10 @@
 ################################################################################
 
 class IdlAttribute(TypedObject):
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         self.is_read_only = node.GetProperty('READONLY') or False
         self.is_static = node.GetProperty('STATIC') or False
+        self.idl_name = idl_name
         self.name = node.GetName()
         # Defaults, overridden below
         self.idl_type = None
@@ -359,7 +387,7 @@
             if child_class == 'Type':
                 self.idl_type = type_node_to_type(child)
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
@@ -369,7 +397,7 @@
 ################################################################################
 
 class IdlConstant(TypedObject):
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         children = node.GetChildren()
         num_children = len(children)
         if num_children < 2 or num_children > 3:
@@ -380,15 +408,22 @@
         if value_node_class != 'Value':
             raise ValueError('Expected Value node, got %s' % value_node_class)
 
+        self.idl_name = idl_name
         self.name = node.GetName()
         # ConstType is more limited than Type, so subtree is smaller and
         # we don't use the full type_node_to_type function.
         self.idl_type = type_node_inner_to_type(type_node)
-        self.value = value_node.GetName()
+        # FIXME: This code is unnecessarily complicated due to the rather
+        # inconsistent way the upstream IDL parser outputs default values.
+        # http://crbug.com/374178
+        if value_node.GetProperty('TYPE') == 'float':
+            self.value = value_node.GetProperty('VALUE')
+        else:
+            self.value = value_node.GetName()
 
         if num_children == 3:
             ext_attributes_node = children[2]
-            self.extended_attributes = ext_attributes_node_to_extended_attributes(ext_attributes_node)
+            self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node)
         else:
             self.extended_attributes = {}
 
@@ -436,7 +471,7 @@
             raise ValueError('Unsupported string value: %r' % value)
         return IdlLiteral(idl_type, value)
     if idl_type == 'integer':
-        return IdlLiteral(idl_type, int(node.GetProperty('NAME')))
+        return IdlLiteral(idl_type, int(node.GetProperty('NAME'), base=0))
     if idl_type == 'float':
         return IdlLiteral(idl_type, float(node.GetProperty('VALUE')))
     if idl_type == 'boolean':
@@ -451,7 +486,7 @@
 ################################################################################
 
 class IdlOperation(TypedObject):
-    def __init__(self, node=None):
+    def __init__(self, idl_name, node=None):
         self.arguments = []
         self.extended_attributes = {}
         self.specials = []
@@ -460,6 +495,7 @@
         if not node:
             self.is_static = False
             return
+        self.idl_name = idl_name
         self.name = node.GetName()  # FIXME: should just be: or ''
         # FIXME: AST should use None internally
         if self.name == '_unnamed_':
@@ -476,21 +512,21 @@
         for child in children:
             child_class = child.GetClass()
             if child_class == 'Arguments':
-                self.arguments = arguments_node_to_arguments(child)
+                self.arguments = arguments_node_to_arguments(idl_name, child)
             elif child_class == 'Type':
                 self.idl_type = type_node_to_type(child)
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
             else:
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
     @classmethod
-    def from_exception_operation_node(cls, node):
+    def from_exception_operation_node(cls, idl_name, node):
         # Needed to handle one case in DOMException.idl:
         # // Override in a Mozilla compatible format
         # [NotEnumerable] DOMString toString();
         # FIXME: can we remove this? replace with a stringifier?
-        operation = cls()
+        operation = cls(idl_name)
         operation.name = node.GetName()
         children = node.GetChildren()
         if len(children) < 1 or len(children) > 2:
@@ -501,15 +537,15 @@
 
         if len(children) > 1:
             ext_attributes_node = children[1]
-            operation.extended_attributes = ext_attributes_node_to_extended_attributes(ext_attributes_node)
+            operation.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, ext_attributes_node)
 
         return operation
 
     @classmethod
-    def constructor_from_arguments_node(cls, name, arguments_node):
-        constructor = cls()
+    def constructor_from_arguments_node(cls, name, idl_name, arguments_node):
+        constructor = cls(idl_name)
         constructor.name = name
-        constructor.arguments = arguments_node_to_arguments(arguments_node)
+        constructor.arguments = arguments_node_to_arguments(idl_name, arguments_node)
         constructor.is_constructor = True
         return constructor
 
@@ -524,11 +560,12 @@
 ################################################################################
 
 class IdlArgument(TypedObject):
-    def __init__(self, node):
+    def __init__(self, idl_name, node):
         self.extended_attributes = {}
         self.idl_type = None
         self.is_optional = node.GetProperty('OPTIONAL')  # syntax: (optional T)
         self.is_variadic = False  # syntax: (T...)
+        self.idl_name = idl_name
         self.name = node.GetName()
         self.default_value = None
 
@@ -538,7 +575,7 @@
             if child_class == 'Type':
                 self.idl_type = type_node_to_type(child)
             elif child_class == 'ExtAttributes':
-                self.extended_attributes = ext_attributes_node_to_extended_attributes(child)
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
             elif child_class == 'Argument':
                 child_name = child.GetName()
                 if child_name != '...':
@@ -550,22 +587,53 @@
                 raise ValueError('Unrecognized node class: %s' % child_class)
 
 
-def arguments_node_to_arguments(node):
+def arguments_node_to_arguments(idl_name, node):
     # [Constructor] and [CustomConstructor] without arguments (the bare form)
     # have None instead of an arguments node, but have the same meaning as using
     # an empty argument list, [Constructor()], so special-case this.
     # http://www.w3.org/TR/WebIDL/#Constructor
     if node is None:
         return []
-    return [IdlArgument(argument_node)
+    return [IdlArgument(idl_name, argument_node)
             for argument_node in node.GetChildren()]
 
 
 ################################################################################
+# Stringifiers
+################################################################################
+
+class IdlStringifier(object):
+    def __init__(self, idl_name, node):
+        self.attribute = None
+        self.operation = None
+        self.extended_attributes = {}
+        self.idl_name = idl_name
+
+        for child in node.GetChildren():
+            child_class = child.GetClass()
+            if child_class == 'Attribute':
+                self.attribute = IdlAttribute(idl_name, child)
+            elif child_class == 'Operation':
+                operation = IdlOperation(idl_name, child)
+                if operation.name:
+                    self.operation = operation
+            elif child_class == 'ExtAttributes':
+                self.extended_attributes = ext_attributes_node_to_extended_attributes(idl_name, child)
+            else:
+                raise ValueError('Unrecognized node class: %s' % child_class)
+
+        # Copy the stringifier's extended attributes (such as [Unforgable]) onto
+        # the underlying attribute or operation, if there is one.
+        if self.attribute or self.operation:
+            (self.attribute or self.operation).extended_attributes.update(
+                self.extended_attributes)
+
+
+################################################################################
 # Extended attributes
 ################################################################################
 
-def ext_attributes_node_to_extended_attributes(node):
+def ext_attributes_node_to_extended_attributes(idl_name, node):
     """
     Returns:
       Dictionary of {ExtAttributeName: ExtAttributeValue}.
@@ -619,7 +687,7 @@
                 raise ValueError('[SetWrapperReferenceTo] requires a child, but has none.')
             if child_class != 'Arguments':
                 raise ValueError('[SetWrapperReferenceTo] only supports Arguments as child, but has child of class: %s' % child_class)
-            extended_attributes[name] = arguments_node_to_arguments(child)
+            extended_attributes[name] = arguments_node_to_arguments(idl_name, child)
         elif child:
             raise ValueError('ExtAttributes node with unexpected children: %s' % name)
         else:
@@ -636,7 +704,7 @@
     return extended_attributes
 
 
-def extended_attributes_to_constructors(extended_attributes):
+def extended_attributes_to_constructors(idl_name, extended_attributes):
     """Returns constructors and custom_constructors (lists of IdlOperations).
 
     Auxiliary function for IdlInterface.__init__.
@@ -644,12 +712,12 @@
 
     constructor_list = extended_attributes.get('Constructors', [])
     constructors = [
-        IdlOperation.constructor_from_arguments_node('Constructor', arguments_node)
+        IdlOperation.constructor_from_arguments_node('Constructor', idl_name, arguments_node)
         for arguments_node in constructor_list]
 
     custom_constructor_list = extended_attributes.get('CustomConstructors', [])
     custom_constructors = [
-        IdlOperation.constructor_from_arguments_node('CustomConstructor', arguments_node)
+        IdlOperation.constructor_from_arguments_node('CustomConstructor', idl_name, arguments_node)
         for arguments_node in custom_constructor_list]
 
     if 'NamedConstructor' in extended_attributes:
@@ -661,7 +729,7 @@
         if len(children) != 1:
             raise ValueError('NamedConstructor node expects 1 child, got %s.' % len(children))
         arguments_node = children[0]
-        named_constructor = IdlOperation.constructor_from_arguments_node('NamedConstructor', arguments_node)
+        named_constructor = IdlOperation.constructor_from_arguments_node('NamedConstructor', idl_name, arguments_node)
         # FIXME: should return named_constructor separately; appended for Perl
         constructors.append(named_constructor)
 
@@ -687,25 +755,23 @@
     if len(children) < 1 or len(children) > 2:
         raise ValueError('Type node expects 1 or 2 children (type + optional array []), got %s (multi-dimensional arrays are not supported).' % len(children))
 
+    is_nullable = node.GetProperty('NULLABLE') or False  # syntax: T?
     type_node_child = children[0]
+    base_type = type_node_inner_to_type(type_node_child, is_nullable=is_nullable)
 
     if len(children) == 2:
         array_node = children[1]
         array_node_class = array_node.GetClass()
         if array_node_class != 'Array':
             raise ValueError('Expected Array node as TypeSuffix, got %s node.' % array_node_class)
-        # FIXME: use IdlArrayType instead of is_array, once have that
-        is_array = True
-    else:
-        is_array = False
+        array_is_nullable = array_node.GetProperty('NULLABLE') or False
+        return IdlArrayType(base_type, is_nullable=array_is_nullable)
 
-    is_nullable = node.GetProperty('NULLABLE') or False  # syntax: T?
-
-    return type_node_inner_to_type(type_node_child, is_array=is_array, is_nullable=is_nullable)
+    return base_type
 
 
-def type_node_inner_to_type(node, is_array=False, is_nullable=False):
-    # FIXME: remove is_array and is_nullable once have IdlArrayType and IdlNullableType
+def type_node_inner_to_type(node, is_nullable=False):
+    # FIXME: remove is_nullable once have IdlNullableType
     node_class = node.GetClass()
     # Note Type*r*ef, not Typedef, meaning the type is an identifier, thus
     # either a typedef shorthand (but not a Typedef declaration itself) or an
@@ -713,16 +779,13 @@
     if node_class in ['PrimitiveType', 'Typeref']:
         # unrestricted syntax: unrestricted double | unrestricted float
         is_unrestricted = node.GetProperty('UNRESTRICTED') or False
-        return IdlType(node.GetName(), is_array=is_array, is_nullable=is_nullable, is_unrestricted=is_unrestricted)
+        return IdlType(node.GetName(), is_nullable=is_nullable, is_unrestricted=is_unrestricted)
     elif node_class == 'Any':
-        return IdlType('any', is_array=is_array, is_nullable=is_nullable)
+        return IdlType('any', is_nullable=is_nullable)
     elif node_class == 'Sequence':
-        if is_array:
-            raise ValueError('Arrays of sequences are not supported')
-        return sequence_node_to_type(node, is_nullable=is_nullable)
+        sequence_is_nullable = node.GetProperty('NULLABLE') or False
+        return sequence_node_to_type(node, is_nullable=sequence_is_nullable)
     elif node_class == 'UnionType':
-        if is_array:
-            raise ValueError('Arrays of unions are not supported')
         return union_type_node_to_idl_union_type(node, is_nullable=is_nullable)
     raise ValueError('Unrecognized node class: %s' % node_class)
 
@@ -735,8 +798,8 @@
     sequence_child_class = sequence_child.GetClass()
     if sequence_child_class != 'Type':
         raise ValueError('Unrecognized node class: %s' % sequence_child_class)
-    element_type = type_node_to_type(sequence_child).base_type
-    return IdlType(element_type, is_sequence=True, is_nullable=is_nullable)
+    element_type = type_node_to_type(sequence_child)
+    return IdlSequenceType(element_type, is_nullable=is_nullable)
 
 
 def typedef_node_to_type(node):
diff --git a/bindings/scripts/idl_reader.py b/bindings/scripts/idl_reader.py
index 3828668..23797a7 100644
--- a/bindings/scripts/idl_reader.py
+++ b/bindings/scripts/idl_reader.py
@@ -70,26 +70,28 @@
         ast = blink_idl_parser.parse_file(self.parser, idl_filename)
         if not ast:
             raise Exception('Failed to parse %s' % idl_filename)
-        definitions = IdlDefinitions(ast)
+        idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename))
+        definitions = IdlDefinitions(idl_file_basename, ast)
 
         if not self.multi_interface:
             # Validate file contents with filename convention
             # The Blink IDL filenaming convention is that the file
-            # <interface_name>.idl MUST contain exactly 1 interface (or exception),
-            # and the interface name must agree with the file's basename,
-            # unless it is a partial interface.
+            # <definition_name>.idl MUST contain exactly 1 definition
+            # (interface, dictionary or exception), and the definition name must
+            # agree with the file's basename, unless it is a partial definition.
             # (e.g., 'partial interface Foo' can be in FooBar.idl).
-            number_of_interfaces = len(definitions.interfaces)
-            if number_of_interfaces != 1:
+            targets = (definitions.interfaces.values() +
+                       definitions.dictionaries.values())
+            number_of_targets = len(targets)
+            if number_of_targets != 1:
                 raise Exception(
-                    'Expected exactly 1 interface in file {0}, but found {1}'
-                    .format(idl_filename, number_of_interfaces))
-            interface = next(definitions.interfaces.itervalues())
-            idl_file_basename, _ = os.path.splitext(os.path.basename(idl_filename))
-            if not interface.is_partial and interface.name != idl_file_basename:
+                    'Expected exactly 1 definition in file {0}, but found {1}'
+                    .format(idl_filename, number_of_targets))
+            target = targets[0]
+            if not target.is_partial and target.name != idl_file_basename:
                 raise Exception(
-                    'Interface name "{0}" disagrees with IDL file basename "{1}".'
-                    .format(interface.name, idl_file_basename))
+                    'Definition name "{0}" disagrees with IDL file basename "{1}".'
+                    .format(target.name, idl_file_basename))
         else:
             if len(definitions.interfaces) > 1:
                 print '----- Supplemental interfaces %s' % len(definitions.interfaces)
diff --git a/bindings/scripts/idl_types.py b/bindings/scripts/idl_types.py
index e488e33..d0797a6 100644
--- a/bindings/scripts/idl_types.py
+++ b/bindings/scripts/idl_types.py
@@ -4,8 +4,12 @@
 """IDL type handling.
 
 Classes:
-IdlType
-IdlUnionType
+IdlTypeBase
+ IdlType
+ IdlUnionType
+ IdlArrayOrSequenceType
+  IdlArrayType
+  IdlSequenceType
 """
 
 from collections import defaultdict
@@ -70,6 +74,14 @@
     'Date': 'Date',
 }
 
+STRING_TYPES = frozenset([
+    # http://heycam.github.io/webidl/#es-interface-call (step 10.11)
+    # (Interface object [[Call]] method's string types.)
+    'String',
+    'ByteString',
+    'ScalarValueString',
+])
+
 
 ################################################################################
 # Inheritance
@@ -86,63 +98,120 @@
     ancestors.update(new_ancestors)
 
 
-################################################################################
-# IdlType
-################################################################################
+class IdlTypeBase(object):
+    """Base class for IdlType, IdlUnionType and IdlArrayOrSequenceType."""
 
-class IdlType(object):
-    # FIXME: incorporate Nullable, etc.
-    # FIXME: use nested types: IdlArrayType, IdlNullableType, IdlSequenceType
-    # to support types like short?[] vs. short[]?, instead of treating these
-    # as orthogonal properties (via flags).
-    callback_functions = set()
-    callback_interfaces = set()
-    enums = {}  # name -> values
-
-    def __init__(self, base_type, is_array=False, is_sequence=False, is_nullable=False, is_unrestricted=False):
-        if is_array and is_sequence:
-            raise ValueError('Array of Sequences are not allowed.')
-        if is_unrestricted:
-            self.base_type = 'unrestricted %s' % base_type
-        else:
-            self.base_type = base_type
-        self.is_array = is_array
-        self.is_sequence = is_sequence
+    def __init__(self, is_nullable):
+        self.base_type = None
         self.is_nullable = is_nullable
 
     def __str__(self):
-        type_string = self.base_type
-        if self.is_array:
-            return type_string + '[]'
-        if self.is_sequence:
-            return 'sequence<%s>' % type_string
+        inner_string = self.inner_string
         if self.is_nullable:
             # FIXME: Dictionary::ConversionContext::setConversionType can't
             # handle the '?' in nullable types (passes nullability separately).
             # Update that function to handle nullability from the type name,
             # simplifying its signature.
-            # return type_string + '?'
-            return type_string
-        return type_string
+            # return inner_string + '?'
+            return inner_string
+        return inner_string
 
-    # FIXME: rename to native_array_element_type and move to v8_types.py
     @property
-    def array_or_sequence_type(self):
-        return self.array_type or self.sequence_type
-
-    # FIXME: rename to array_element_type
-    @property
-    def array_type(self):
-        return self.is_array and IdlType(self.base_type)
-
-    # FIXME: rename to sequence_element_type
-    @property
-    def sequence_type(self):
-        return self.is_sequence and IdlType(self.base_type)
+    def inner_string(self):
+        raise NotImplementedError(
+            'inner_string property should be defined in subclasses')
 
     @property
     def is_basic_type(self):
-        return self.base_type in BASIC_TYPES and not self.array_or_sequence_type
+        return False
+
+    @property
+    def is_callback_function(self):
+        return False
+
+    @property
+    def is_callback_interface(self):
+        return False
+
+    @property
+    def is_dictionary(self):
+        return False
+
+    @property
+    def is_enum(self):
+        return False
+
+    @property
+    def is_integer_type(self):
+        return False
+
+    @property
+    def is_numeric_type(self):
+        return False
+
+    @property
+    def is_primitive_type(self):
+        return False
+
+    @property
+    def is_interface_type(self):
+        return False
+
+    @property
+    def is_string_type(self):
+        return False
+
+    @property
+    def is_union_type(self):
+        return False
+
+    @property
+    def may_raise_exception_on_conversion(self):
+        return False
+
+    @property
+    def name(self):
+        if self.is_nullable:
+            return self.inner_name + 'OrNull'
+        return self.inner_name
+
+    @property
+    def inner_name(self):
+        raise NotImplementedError(
+            'inner_name property should be defined in subclasses')
+
+    def resolve_typedefs(self, typedefs):
+        raise NotImplementedError(
+            'resolve_typedefs should be defined in subclasses')
+
+
+################################################################################
+# IdlType
+################################################################################
+
+class IdlType(IdlTypeBase):
+    # FIXME: incorporate Nullable, etc.
+    # to support types like short?[] vs. short[]?, instead of treating these
+    # as orthogonal properties (via flags).
+    callback_functions = set()
+    callback_interfaces = set()
+    dictionaries = set()
+    enums = {}  # name -> values
+
+    def __init__(self, base_type, is_nullable=False, is_unrestricted=False):
+        super(IdlType, self).__init__(is_nullable)
+        if is_unrestricted:
+            self.base_type = 'unrestricted %s' % base_type
+        else:
+            self.base_type = base_type
+
+    @property
+    def inner_string(self):
+        return self.base_type
+
+    @property
+    def is_basic_type(self):
+        return self.base_type in BASIC_TYPES
 
     @property
     def is_callback_function(self):
@@ -153,11 +222,8 @@
         return self.base_type in IdlType.callback_interfaces
 
     @property
-    def is_composite_type(self):
-        return (self.name == 'Any' or
-                self.array_type or
-                self.sequence_type or
-                self.is_union_type)
+    def is_dictionary(self):
+        return self.base_type in IdlType.dictionaries
 
     @property
     def is_enum(self):
@@ -171,15 +237,15 @@
 
     @property
     def is_integer_type(self):
-        return self.base_type in INTEGER_TYPES and not self.array_or_sequence_type
+        return self.base_type in INTEGER_TYPES
 
     @property
     def is_numeric_type(self):
-        return self.base_type in NUMERIC_TYPES and not self.array_or_sequence_type
+        return self.base_type in NUMERIC_TYPES
 
     @property
     def is_primitive_type(self):
-        return self.base_type in PRIMITIVE_TYPES and not self.array_or_sequence_type
+        return self.base_type in PRIMITIVE_TYPES
 
     @property
     def is_interface_type(self):
@@ -188,31 +254,34 @@
         # http://www.w3.org/TR/WebIDL/#idl-interface
         # In C++ these are RefPtr or PassRefPtr types.
         return not(self.is_basic_type or
-                   self.is_composite_type or
                    self.is_callback_function or
+                   self.is_dictionary or
                    self.is_enum or
+                   self.name == 'Any' or
                    self.name == 'Object' or
                    self.name == 'Promise')  # Promise will be basic in future
 
     @property
+    def is_string_type(self):
+        return self.inner_name in STRING_TYPES
+
+    @property
+    def may_raise_exception_on_conversion(self):
+        return (self.is_integer_type or
+                self.name in ('ByteString', 'ScalarValueString'))
+
+    @property
     def is_union_type(self):
         return isinstance(self, IdlUnionType)
 
     @property
-    def name(self):
-        """Return type name.
+    def inner_name(self):
+        """Return type name (or inner type name if nullable)
 
         http://heycam.github.io/webidl/#dfn-type-name
         """
         base_type = self.base_type
-        base_type_name = TYPE_NAMES.get(base_type, base_type)
-        if self.is_array:
-            return base_type_name + 'Array'
-        if self.is_sequence:
-            return base_type_name + 'Sequence'
-        if self.is_nullable:
-            return base_type_name + 'OrNull'
-        return base_type_name
+        return TYPE_NAMES.get(base_type, base_type)
 
     @classmethod
     def set_callback_functions(cls, new_callback_functions):
@@ -223,10 +292,17 @@
         cls.callback_interfaces.update(new_callback_interfaces)
 
     @classmethod
+    def set_dictionaries(cls, new_dictionaries):
+        cls.dictionaries.update(new_dictionaries)
+
+    @classmethod
     def set_enums(cls, new_enums):
         cls.enums.update(new_enums)
 
     def resolve_typedefs(self, typedefs):
+        # This function either returns |self|, possibly mutated, or leaves this
+        # object unmodified and returns a different object.
+        # FIXME: Change to never mutate |self|, and rename typedefs_resolved().
         if self.base_type not in typedefs:
             return self
         new_type = typedefs[self.base_type]
@@ -235,16 +311,7 @@
             # since can't change type(self)
             return new_type
         # If type doesn't change, just mutate self to avoid a new object
-        # FIXME: a bit ugly; use __init__ instead of setting flags
-        self.base_type = new_type.base_type
-        # handle array both in use and in typedef itself:
-        # typedef Type TypeDef;
-        # TypeDef[] ...
-        # and:
-        # typedef Type[] TypeArray
-        # TypeArray ...
-        self.is_array |= new_type.is_array
-        self.is_sequence |= new_type.is_sequence
+        self.__init__(new_type.base_type, self.is_nullable or new_type.is_nullable)
         return self
 
 
@@ -252,66 +319,22 @@
 # IdlUnionType
 ################################################################################
 
-class IdlUnionType(object):
+class IdlUnionType(IdlTypeBase):
     # http://heycam.github.io/webidl/#idl-union
-    # FIXME: derive from IdlType, instead of stand-alone class, to reduce
-    # duplication.
     def __init__(self, member_types, is_nullable=False):
+        super(IdlUnionType, self).__init__(is_nullable=is_nullable)
         self.member_types = member_types
-        self.is_nullable = is_nullable
-
-    @property
-    def array_or_sequence_type(self):
-        return False
-
-    @property
-    def array_type(self):
-        return False
-
-    @property
-    def is_array(self):
-        # We do not support arrays of union types
-        return False
-
-    @property
-    def base_type(self):
-        return None
-
-    @property
-    def is_basic_type(self):
-        return False
-
-    @property
-    def is_callback_function(self):
-        return False
-
-    @property
-    def is_enum(self):
-        return False
-
-    @property
-    def is_integer_type(self):
-        return False
-
-    @property
-    def is_numeric_type(self):
-        return False
-
-    @property
-    def is_primitivee_type(self):
-        return False
-
-    @property
-    def is_sequence(self):
-        # We do not support sequences of union types
-        return False
 
     @property
     def is_union_type(self):
         return True
 
     @property
-    def name(self):
+    def inner_name(self):
+        """Return type name (or inner type name if nullable)
+
+        http://heycam.github.io/webidl/#dfn-type-name
+        """
         return 'Or'.join(member_type.name for member_type in self.member_types)
 
     def resolve_typedefs(self, typedefs):
@@ -319,3 +342,45 @@
             typedefs.get(member_type, member_type)
             for member_type in self.member_types]
         return self
+
+
+################################################################################
+# IdlArrayOrSequenceType, IdlArrayType, IdlSequenceType
+################################################################################
+
+class IdlArrayOrSequenceType(IdlTypeBase):
+    """Base class for IdlArrayType and IdlSequenceType."""
+
+    def __init__(self, element_type, is_nullable=False):
+        super(IdlArrayOrSequenceType, self).__init__(is_nullable)
+        self.element_type = element_type
+
+    def resolve_typedefs(self, typedefs):
+        self.element_type = self.element_type.resolve_typedefs(typedefs)
+        return self
+
+
+class IdlArrayType(IdlArrayOrSequenceType):
+    def __init__(self, element_type, is_nullable=False):
+        super(IdlArrayType, self).__init__(element_type, is_nullable)
+
+    @property
+    def inner_string(self):
+        return '%s[]' % self.element_type
+
+    @property
+    def inner_name(self):
+        return self.element_type.name + 'Array'
+
+
+class IdlSequenceType(IdlArrayOrSequenceType):
+    def __init__(self, element_type, is_nullable=False):
+        super(IdlSequenceType, self).__init__(element_type, is_nullable)
+
+    @property
+    def inner_string(self):
+        return 'sequence<%s>' % self.element_type
+
+    @property
+    def inner_name(self):
+        return self.element_type.name + 'Sequence'
diff --git a/bindings/scripts/idl_validator.py b/bindings/scripts/idl_validator.py
index e527442..29ccd7d 100644
--- a/bindings/scripts/idl_validator.py
+++ b/bindings/scripts/idl_validator.py
@@ -78,7 +78,7 @@
         if values_string is None:
             values = set([None])
         else:
-            values = set(re.split('[|&]', values_string))
+            values = set(re.split('[|,]', values_string))
         invalid_values = values - valid_values
         if invalid_values:
             invalid_value = invalid_values.pop()
diff --git a/bindings/scripts/interface_dependency_resolver.py b/bindings/scripts/interface_dependency_resolver.py
index c65d3f6..ece506a 100644
--- a/bindings/scripts/interface_dependency_resolver.py
+++ b/bindings/scripts/interface_dependency_resolver.py
@@ -82,6 +82,9 @@
         Args:
             definitions: IdlDefinitions object, modified in place
         """
+        if not definitions.interfaces:
+            # This definitions should have a dictionary. Nothing to do for it.
+            return
         target_interface = next(definitions.interfaces.itervalues())
         interface_name = target_interface.name
         interface_info = self.interfaces_info[interface_name]
diff --git a/bindings/scripts/utilities.py b/bindings/scripts/utilities.py
index 0aeabc2..3674765 100644
--- a/bindings/scripts/utilities.py
+++ b/bindings/scripts/utilities.py
@@ -119,6 +119,11 @@
     return bool(match)
 
 
+def is_dictionary_from_idl(file_contents):
+    match = re.search(r'dictionary\s+\w+\s*{', file_contents)
+    return bool(match)
+
+
 def get_parent_interface(file_contents):
     match = re.search(r'interface\s+'
                       r'\w+\s*'
@@ -148,10 +153,10 @@
 
     extended_attributes_string = match.group(1)
     extended_attributes = {}
-    # FIXME: this splitting is WRONG: it fails on ExtendedAttributeArgList like
-    # 'NamedConstructor=Foo(a, b)'
+    # FIXME: this splitting is WRONG: it fails on extended attributes where lists of
+    # multiple values are used, which are seperated by a comma and a space.
     parts = [extended_attribute.strip()
-             for extended_attribute in extended_attributes_string.split(',')
+             for extended_attribute in re.split(',\s+', extended_attributes_string)
              # Discard empty parts, which may exist due to trailing comma
              if extended_attribute.strip()]
     for part in parts:
diff --git a/bindings/scripts/v8_attributes.py b/bindings/scripts/v8_attributes.py
index 6dcb2d5..bb61ef9 100644
--- a/bindings/scripts/v8_attributes.py
+++ b/bindings/scripts/v8_attributes.py
@@ -41,7 +41,7 @@
 from v8_utilities import capitalize, cpp_name, has_extended_attribute, has_extended_attribute_value, scoped_name, strip_suffix, uncapitalize
 
 
-def generate_attribute(interface, attribute):
+def attribute_context(interface, attribute):
     idl_type = attribute.idl_type
     base_idl_type = idl_type.base_type
     extended_attributes = attribute.extended_attributes
@@ -52,12 +52,6 @@
     is_check_security_for_node = 'CheckSecurity' in extended_attributes
     if is_check_security_for_node:
         includes.add('bindings/common/BindingSecurity.h')
-    # [Custom]
-    has_custom_getter = ('Custom' in extended_attributes and
-                         extended_attributes['Custom'] in [None, 'Getter'])
-    has_custom_setter = (not attribute.is_read_only and
-                         'Custom' in extended_attributes and
-                         extended_attributes['Custom'] in [None, 'Setter'])
     # [CustomElementCallbacks], [Reflect]
     is_custom_element_callbacks = 'CustomElementCallbacks' in extended_attributes
     is_reflect = 'Reflect' in extended_attributes
@@ -66,53 +60,45 @@
     # [PerWorldBindings]
     if 'PerWorldBindings' in extended_attributes:
         assert idl_type.is_wrapper_type or 'LogActivity' in extended_attributes, '[PerWorldBindings] should only be used with wrapper types: %s.%s' % (interface.name, attribute.name)
-    # [RaisesException], [RaisesException=Setter]
-    is_setter_raises_exception = (
-        'RaisesException' in extended_attributes and
-        extended_attributes['RaisesException'] in [None, 'Setter'])
     # [TypeChecking]
-    has_type_checking_interface = (
-        (has_extended_attribute_value(interface, 'TypeChecking', 'Interface') or
-         has_extended_attribute_value(attribute, 'TypeChecking', 'Interface')) and
-        idl_type.is_wrapper_type)
-    has_type_checking_nullable = (
-        (has_extended_attribute_value(interface, 'TypeChecking', 'Nullable') or
-         has_extended_attribute_value(attribute, 'TypeChecking', 'Nullable')) and
-         idl_type.is_wrapper_type)
     has_type_checking_unrestricted = (
         (has_extended_attribute_value(interface, 'TypeChecking', 'Unrestricted') or
          has_extended_attribute_value(attribute, 'TypeChecking', 'Unrestricted')) and
          idl_type.name in ('Float', 'Double'))
+    # [ImplementedInPrivateScript]
+    is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_attributes
+    if is_implemented_in_private_script:
+        includes.add('bindings/core/v8/PrivateScriptRunner.h')
+        includes.add('core/frame/LocalFrame.h')
+        includes.add('platform/ScriptForbiddenScope.h')
+
+    # [OnlyExposedToPrivateScript]
+    is_only_exposed_to_private_script = 'OnlyExposedToPrivateScript' in extended_attributes
 
     if (base_idl_type == 'EventHandler' and
         interface.name in ['Window', 'WorkerGlobalScope'] and
         attribute.name == 'onerror'):
-        includes.add('bindings/v8/V8ErrorHandler.h')
+        includes.add('bindings/core/v8/V8ErrorHandler.h')
 
-    contents = {
+    context = {
         'access_control_list': access_control_list(attribute),
         'activity_logging_world_list_for_getter': v8_utilities.activity_logging_world_list(attribute, 'Getter'),  # [ActivityLogging]
         'activity_logging_world_list_for_setter': v8_utilities.activity_logging_world_list(attribute, 'Setter'),  # [ActivityLogging]
         'activity_logging_include_old_value_for_setter': 'LogPreviousValue' in extended_attributes,  # [ActivityLogging]
         'activity_logging_world_check': v8_utilities.activity_logging_world_check(attribute),  # [ActivityLogging]
+        'argument_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
         'cached_attribute_validation_method': extended_attributes.get('CachedAttribute'),
         'conditional_string': v8_utilities.conditional_string(attribute),
         'constructor_type': idl_type.constructor_type_name
                             if is_constructor_attribute(attribute) else None,
         'cpp_name': cpp_name(attribute),
         'cpp_type': idl_type.cpp_type,
-        'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(cpp_value='original', creation_context='info.Holder()'),
+        'cpp_type_initializer': idl_type.cpp_type_initializer,
         'deprecate_as': v8_utilities.deprecate_as(attribute),  # [DeprecateAs]
         'enum_validation_expression': idl_type.enum_validation_expression,
-        'has_custom_getter': has_custom_getter,
-        'has_custom_setter': has_custom_setter,
-        'has_setter_exception_state':
-            is_setter_raises_exception or has_type_checking_interface or
-            has_type_checking_nullable or has_type_checking_unrestricted or
-            idl_type.is_integer_type or
-            idl_type.name in ('ByteString', 'ScalarValueString'),
-        'has_type_checking_interface': has_type_checking_interface,
-        'has_type_checking_nullable': has_type_checking_nullable,
+        'exposed_test': v8_utilities.exposed(attribute, interface),  # [Exposed]
+        'has_custom_getter': has_custom_getter(attribute),
+        'has_custom_setter': has_custom_setter(attribute),
         'has_type_checking_unrestricted': has_type_checking_unrestricted,
         'idl_type': str(idl_type),  # need trailing [] on array for Dictionary::ConversionContext::setConversionType
         'is_call_with_execution_context': v8_utilities.has_extended_attribute_value(attribute, 'CallWith', 'ExecutionContext'),
@@ -123,24 +109,27 @@
         'is_getter_raises_exception':  # [RaisesException]
             'RaisesException' in extended_attributes and
             extended_attributes['RaisesException'] in (None, 'Getter'),
+        'is_implemented_in_private_script': is_implemented_in_private_script,
         'is_initialized_by_event_constructor':
             'InitializedByEventConstructor' in extended_attributes,
         'is_keep_alive_for_gc': is_keep_alive_for_gc(interface, attribute),
-        'is_nullable': attribute.idl_type.is_nullable,
+        'is_nullable': idl_type.is_nullable,
+        'is_explicit_nullable': idl_type.is_explicit_nullable,
         'is_partial_interface_member':
             'PartialInterfaceImplementedAs' in extended_attributes,
         'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
         'is_read_only': attribute.is_read_only,
         'is_reflect': is_reflect,
         'is_replaceable': 'Replaceable' in attribute.extended_attributes,
-        'is_setter_call_with_execution_context': v8_utilities.has_extended_attribute_value(attribute, 'SetterCallWith', 'ExecutionContext'),
-        'is_setter_raises_exception': is_setter_raises_exception,
         'is_static': attribute.is_static,
         'is_url': 'URL' in extended_attributes,
         'is_unforgeable': 'Unforgeable' in extended_attributes,
         'measure_as': v8_utilities.measure_as(attribute),  # [MeasureAs]
         'name': attribute.name,
+        'only_exposed_to_private_script': is_only_exposed_to_private_script,
         'per_context_enabled_function': v8_utilities.per_context_enabled_function_name(attribute),  # [PerContextEnabled]
+        'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
+            extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->isolate()', used_in_private_script=True),
         'property_attributes': property_attributes(attribute),
         'put_forwards': 'PutForwards' in extended_attributes,
         'reflect_empty': extended_attributes.get('ReflectEmpty'),
@@ -148,36 +137,36 @@
         'reflect_missing': extended_attributes.get('ReflectMissing'),
         'reflect_only': extended_attributes['ReflectOnly'].split('|')
             if 'ReflectOnly' in extended_attributes else None,
-        'setter_callback': setter_callback_name(interface, attribute),
-        'v8_type': v8_types.v8_type(base_idl_type),
         'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(attribute),  # [RuntimeEnabled]
+        'setter_callback': setter_callback_name(interface, attribute),
+        'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script),
         'world_suffixes': ['', 'ForMainWorld']
                           if 'PerWorldBindings' in extended_attributes
                           else [''],  # [PerWorldBindings]
     }
 
     if is_constructor_attribute(attribute):
-        generate_constructor_getter(interface, attribute, contents)
-        return contents
-    if not has_custom_getter:
-        generate_getter(interface, attribute, contents)
-    if (not has_custom_setter and
+        constructor_getter_context(interface, attribute, context)
+        return context
+    if not has_custom_getter(attribute):
+        getter_context(interface, attribute, context)
+    if (not has_custom_setter(attribute) and
         (not attribute.is_read_only or 'PutForwards' in extended_attributes)):
-        generate_setter(interface, attribute, contents)
+        setter_context(interface, attribute, context)
 
-    return contents
+    return context
 
 
 ################################################################################
 # Getter
 ################################################################################
 
-def generate_getter(interface, attribute, contents):
+def getter_context(interface, attribute, context):
     idl_type = attribute.idl_type
     base_idl_type = idl_type.base_type
     extended_attributes = attribute.extended_attributes
 
-    cpp_value = getter_expression(interface, attribute, contents)
+    cpp_value = getter_expression(interface, attribute, context)
     # Normally we can inline the function call into the return statement to
     # avoid the overhead of using a Ref<> temporary, but for some cases
     # (nullable types, EventHandler, [CachedAttribute], or if there are
@@ -185,46 +174,65 @@
     # FIXME: check if compilers are smart enough to inline this, and if so,
     # always use a local variable (for readability and CG simplicity).
     release = False
-    if (idl_type.is_nullable or
+    if 'ImplementedInPrivateScript' in extended_attributes:
+        if (not idl_type.is_wrapper_type and
+            not idl_type.is_basic_type):
+            raise Exception('Private scripts supports only primitive types and DOM wrappers.')
+
+        context['cpp_value_original'] = cpp_value
+        cpp_value = 'result'
+        # EventHandler has special handling
+        if base_idl_type != 'EventHandler':
+            release = idl_type.release
+    elif (idl_type.is_explicit_nullable or
         base_idl_type == 'EventHandler' or
         'CachedAttribute' in extended_attributes or
+        'LogPreviousValue' in extended_attributes or
         'ReflectOnly' in extended_attributes or
-        contents['is_getter_raises_exception']):
-        contents['cpp_value_original'] = cpp_value
-        cpp_value = 'v8Value'
+        context['is_keep_alive_for_gc'] or
+        context['is_getter_raises_exception']):
+        context['cpp_value_original'] = cpp_value
+        cpp_value = 'cppValue'
         # EventHandler has special handling
-        if base_idl_type != 'EventHandler' and idl_type.is_interface_type:
-            release = True
+        if base_idl_type != 'EventHandler':
+            release = idl_type.release
 
     def v8_set_return_value_statement(for_main_world=False):
-        if contents['is_keep_alive_for_gc']:
+        if context['is_keep_alive_for_gc']:
             return 'v8SetReturnValue(info, wrapper)'
         return idl_type.v8_set_return_value(cpp_value, extended_attributes=extended_attributes, script_wrappable='impl', release=release, for_main_world=for_main_world)
 
-    contents.update({
+    context.update({
         'cpp_value': cpp_value,
-        'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(cpp_value=cpp_value, creation_context='info.Holder()'),
+        'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
+            cpp_value=cpp_value, creation_context='info.Holder()',
+            extended_attributes=extended_attributes),
         'v8_set_return_value_for_main_world': v8_set_return_value_statement(for_main_world=True),
         'v8_set_return_value': v8_set_return_value_statement(),
     })
 
 
-def getter_expression(interface, attribute, contents):
+def getter_expression(interface, attribute, context):
     arguments = []
     this_getter_base_name = getter_base_name(interface, attribute, arguments)
     getter_name = scoped_name(interface, attribute, this_getter_base_name)
 
+    if 'ImplementedInPrivateScript' in attribute.extended_attributes:
+        arguments.append('toFrameIfNotDetached(info.GetIsolate()->GetCurrentContext())')
+        arguments.append('impl')
+        arguments.append('&result')
     arguments.extend(v8_utilities.call_with_arguments(
         attribute.extended_attributes.get('CallWith')))
     # Members of IDL partial interface definitions are implemented in C++ as
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in attribute.extended_attributes and
+        not 'ImplementedInPrivateScript' in attribute.extended_attributes and
         not attribute.is_static):
         arguments.append('*impl')
-    if attribute.idl_type.is_nullable and not contents['has_type_checking_nullable']:
+    if attribute.idl_type.is_explicit_nullable:
         arguments.append('isNull')
-    if contents['is_getter_raises_exception']:
+    if context['is_getter_raises_exception']:
         arguments.append('exceptionState')
     return '%s(%s)' % (getter_name, ', '.join(arguments))
 
@@ -238,6 +246,10 @@
 
 def getter_base_name(interface, attribute, arguments):
     extended_attributes = attribute.extended_attributes
+
+    if 'ImplementedInPrivateScript' in extended_attributes:
+        return '%sAttributeGetter' % uncapitalize(cpp_name(attribute))
+
     if 'Reflect' not in extended_attributes:
         return uncapitalize(cpp_name(attribute))
 
@@ -282,33 +294,56 @@
 # Setter
 ################################################################################
 
-def generate_setter(interface, attribute, contents):
-    def target_attribute():
+def setter_context(interface, attribute, context):
+    if 'PutForwards' in attribute.extended_attributes:
+        # Use target interface and attribute in place of original interface and
+        # attribute from this point onwards.
         target_interface_name = attribute.idl_type.base_type
-        target_attribute_name = extended_attributes['PutForwards']
-        target_interface = interfaces[target_interface_name]
+        target_attribute_name = attribute.extended_attributes['PutForwards']
+        interface = interfaces[target_interface_name]
         try:
-            return next(attribute
-                        for attribute in target_interface.attributes
-                        if attribute.name == target_attribute_name)
+            attribute = next(candidate
+                             for candidate in interface.attributes
+                             if candidate.name == target_attribute_name)
         except StopIteration:
             raise Exception('[PutForward] target not found:\n'
                             'Attribute "%s" is not present in interface "%s"' %
                             (target_attribute_name, target_interface_name))
 
     extended_attributes = attribute.extended_attributes
+    idl_type = attribute.idl_type
 
-    if 'PutForwards' in extended_attributes:
-        # Use target attribute in place of original attribute
-        attribute = target_attribute()
+    # [RaisesException], [RaisesException=Setter]
+    is_setter_raises_exception = (
+        'RaisesException' in extended_attributes and
+        extended_attributes['RaisesException'] in [None, 'Setter'])
+    # [TypeChecking=Interface]
+    has_type_checking_interface = (
+        (has_extended_attribute_value(interface, 'TypeChecking', 'Interface') or
+         has_extended_attribute_value(attribute, 'TypeChecking', 'Interface')) and
+        idl_type.is_wrapper_type)
 
-    contents.update({
-        'cpp_setter': setter_expression(interface, attribute, contents),
-        'v8_value_to_local_cpp_value': attribute.idl_type.v8_value_to_local_cpp_value(extended_attributes, 'v8Value', 'cppValue'),
+    context.update({
+        'has_setter_exception_state':
+            is_setter_raises_exception or has_type_checking_interface or
+            context['has_type_checking_unrestricted'] or
+            idl_type.may_raise_exception_on_conversion,
+        'has_type_checking_interface': has_type_checking_interface,
+        'is_setter_call_with_execution_context': v8_utilities.has_extended_attribute_value(
+            attribute, 'SetterCallWith', 'ExecutionContext'),
+        'is_setter_raises_exception': is_setter_raises_exception,
+        'private_script_cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
+            'cppValue', isolate='scriptState->isolate()',
+            creation_context='scriptState->context()->Global()'),
+        'v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
+            extended_attributes, 'v8Value', 'cppValue'),
     })
 
+    # setter_expression() depends on context values we set above.
+    context['cpp_setter'] = setter_expression(interface, attribute, context)
 
-def setter_expression(interface, attribute, contents):
+
+def setter_expression(interface, attribute, context):
     extended_attributes = attribute.extended_attributes
     arguments = v8_utilities.call_with_arguments(
         extended_attributes.get('SetterCallWith') or
@@ -321,25 +356,30 @@
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in extended_attributes and
+        not 'ImplementedInPrivateScript' in extended_attributes and
         not attribute.is_static):
         arguments.append('*impl')
     idl_type = attribute.idl_type
-    if idl_type.base_type == 'EventHandler':
+    if 'ImplementedInPrivateScript' in extended_attributes:
+        arguments.append('toFrameIfNotDetached(info.GetIsolate()->GetCurrentContext())')
+        arguments.append('impl')
+        arguments.append('cppValue')
+    elif idl_type.base_type == 'EventHandler':
         getter_name = scoped_name(interface, attribute, cpp_name(attribute))
-        contents['event_handler_getter_expression'] = '%s(%s)' % (
+        context['event_handler_getter_expression'] = '%s(%s)' % (
             getter_name, ', '.join(arguments))
         if (interface.name in ['Window', 'WorkerGlobalScope'] and
             attribute.name == 'onerror'):
-            includes.add('bindings/v8/V8ErrorHandler.h')
+            includes.add('bindings/core/v8/V8ErrorHandler.h')
             arguments.append('V8EventListenerList::findOrCreateWrapper<V8ErrorHandler>(v8Value, true, V8ScriptState::current(info.GetIsolate()))')
         else:
             arguments.append('V8EventListenerList::getEventListener(V8ScriptState::current(info.GetIsolate()), v8Value, true, ListenerFindOrCreate)')
-    elif idl_type.is_interface_type and not idl_type.array_type:
+    elif idl_type.is_interface_type:
         # FIXME: should be able to eliminate WTF::getPtr in most or all cases
         arguments.append('WTF::getPtr(cppValue)')
     else:
         arguments.append('cppValue')
-    if contents['is_setter_raises_exception']:
+    if context['is_setter_raises_exception']:
         arguments.append('exceptionState')
 
     return '%s(%s)' % (setter_name, ', '.join(arguments))
@@ -353,6 +393,9 @@
 
 
 def setter_base_name(interface, attribute, arguments):
+    if 'ImplementedInPrivateScript' in attribute.extended_attributes:
+        return '%sAttributeSetter' % uncapitalize(cpp_name(attribute))
+
     if 'Reflect' not in attribute.extended_attributes:
         return 'set%s' % capitalize(cpp_name(attribute))
     arguments.append(scoped_content_attribute_name(interface, attribute))
@@ -365,8 +408,17 @@
 
 def scoped_content_attribute_name(interface, attribute):
     content_attribute_name = attribute.extended_attributes['Reflect'] or attribute.name.lower()
-    namespace = 'SVGNames' if interface.name.startswith('SVG') else 'HTMLNames'
-    includes.add('%s.h' % namespace)
+    if interface.name.startswith('SVG'):
+        # SVG's xmlbase/xmlspace/xmllang need special behavior, i.e.
+        # it is in XMLNames namespace and the generated attribute has no xml prefix.
+        if attribute.name.startswith('xml'):
+            namespace = 'XMLNames'
+            content_attribute_name = content_attribute_name[3:]
+        else:
+            namespace = 'SVGNames'
+    else:
+        namespace = 'HTMLNames'
+    includes.add('core/%s.h' % namespace)
     return '%s::%sAttr' % (namespace, content_attribute_name)
 
 
@@ -381,8 +433,7 @@
     if (('Replaceable' in extended_attributes and
          'PutForwards' not in extended_attributes) or
         is_constructor_attribute(attribute)):
-        # FIXME: rename to ForceSetAttributeOnThisCallback, since also used for Constructors
-        return '{0}V8Internal::{0}ReplaceableAttributeSetterCallback'.format(cpp_class_name)
+        return '{0}V8Internal::{0}ForceSetAttributeOnThisCallback'.format(cpp_class_name)
     if attribute.is_read_only and 'PutForwards' not in extended_attributes:
         return '0'
     return '%sV8Internal::%sAttributeSetterCallback' % (cpp_class_name, attribute.name)
@@ -418,6 +469,21 @@
     return property_attributes_list or ['v8::None']
 
 
+# [Custom], [Custom=Getter]
+def has_custom_getter(attribute):
+    extended_attributes = attribute.extended_attributes
+    return ('Custom' in extended_attributes and
+            extended_attributes['Custom'] in [None, 'Getter'])
+
+
+# [Custom], [Custom=Setter]
+def has_custom_setter(attribute):
+    extended_attributes = attribute.extended_attributes
+    return (not attribute.is_read_only and
+            'Custom' in extended_attributes and
+            extended_attributes['Custom'] in [None, 'Setter'])
+
+
 ################################################################################
 # Constructors
 ################################################################################
@@ -429,8 +495,8 @@
 
 def is_constructor_attribute(attribute):
     # FIXME: replace this with [ConstructorAttribute] extended attribute
-    return attribute.idl_type.base_type.endswith('Constructor')
+    return attribute.idl_type.name.endswith('Constructor')
 
 
-def generate_constructor_getter(interface, attribute, contents):
-    contents['needs_constructor_getter_callback'] = contents['measure_as'] or contents['deprecate_as']
+def constructor_getter_context(interface, attribute, context):
+    context['needs_constructor_getter_callback'] = context['measure_as'] or context['deprecate_as']
diff --git a/bindings/scripts/v8_callback_interface.py b/bindings/scripts/v8_callback_interface.py
index b1e21d9..eafdba8 100644
--- a/bindings/scripts/v8_callback_interface.py
+++ b/bindings/scripts/v8_callback_interface.py
@@ -28,24 +28,24 @@
 
 """Generate template values for a callback interface.
 
-Extends IdlType with property |callback_cpp_type|.
+Extends IdlTypeBase with property |callback_cpp_type|.
 
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from idl_types import IdlType
+from idl_types import IdlTypeBase
 from v8_globals import includes
 import v8_types
 import v8_utilities
 
 CALLBACK_INTERFACE_H_INCLUDES = frozenset([
-    'bindings/v8/ActiveDOMCallback.h',
-    'bindings/v8/DOMWrapperWorld.h',
-    'bindings/v8/ScopedPersistent.h',
+    'bindings/core/v8/ActiveDOMCallback.h',
+    'bindings/core/v8/DOMWrapperWorld.h',
+    'bindings/core/v8/ScopedPersistent.h',
 ])
 CALLBACK_INTERFACE_CPP_INCLUDES = frozenset([
-    'bindings/v8/V8Binding.h',
-    'bindings/v8/V8Callback.h',
+    'bindings/core/v8/ScriptController.h',
+    'bindings/core/v8/V8Binding.h',
     'core/dom/ExecutionContext.h',
     'wtf/Assertions.h',
     'wtf/GetPtr.h',
@@ -61,16 +61,16 @@
         return 'const String&'
     if idl_type_name == 'void':
         return 'void'
-    # Callbacks use raw pointers, so used_as_argument=True
-    usual_cpp_type = idl_type.cpp_type_args(used_as_argument=True)
-    if usual_cpp_type.startswith(('Vector', 'HeapVector', 'WillBeHeapVector')):
-        return 'const %s&' % usual_cpp_type
-    return usual_cpp_type
+    # Callbacks use raw pointers, so raw_type=True
+    raw_cpp_type = idl_type.cpp_type_args(raw_type=True)
+    if raw_cpp_type.startswith(('Vector', 'HeapVector', 'WillBeHeapVector')):
+        return 'const %s&' % raw_cpp_type
+    return raw_cpp_type
 
-IdlType.callback_cpp_type = property(cpp_type)
+IdlTypeBase.callback_cpp_type = property(cpp_type)
 
 
-def generate_callback_interface(callback_interface):
+def callback_interface_context(callback_interface):
     includes.clear()
     includes.update(CALLBACK_INTERFACE_CPP_INCLUDES)
     return {
@@ -78,7 +78,7 @@
         'cpp_class': callback_interface.name,
         'v8_class': v8_utilities.v8_class_name(callback_interface),
         'header_includes': set(CALLBACK_INTERFACE_H_INCLUDES),
-        'methods': [generate_method(operation)
+        'methods': [method_context(operation)
                     for operation in callback_interface.operations
                     if not v8_utilities.dart_custom_method(operation.extended_attributes)],
     }
@@ -90,7 +90,7 @@
         argument.idl_type.add_includes_for_type()
 
 
-def generate_method(operation):
+def method_context(operation):
     extended_attributes = operation.extended_attributes
     idl_type = operation.idl_type
     idl_type_str = str(idl_type)
@@ -101,27 +101,24 @@
         add_includes_for_operation(operation)
     call_with = extended_attributes.get('CallWith')
     call_with_this_handle = v8_utilities.extended_attribute_value_contains(call_with, 'ThisValue')
-    contents = {
+    context = {
         'call_with_this_handle': call_with_this_handle,
         'cpp_type': idl_type.callback_cpp_type,
-        'custom': is_custom,
         'idl_type': idl_type_str,
+        'is_custom': is_custom,
         'name': operation.name,
     }
-    contents.update(generate_arguments_contents(operation.arguments, call_with_this_handle))
-    return contents
+    context.update(arguments_context(operation.arguments,
+                                     call_with_this_handle))
+    return context
 
 
-def generate_arguments_contents(arguments, call_with_this_handle):
-    def generate_argument(argument):
+def arguments_context(arguments, call_with_this_handle):
+    def argument_context(argument):
         return {
             'handle': '%sHandle' % argument.name,
-            # FIXME: setting creation_context=v8::Handle<v8::Object>() is
-            # wrong, as toV8 then implicitly uses the current context, which
-            # causes leaks between isolated worlds if a different context is
-            # used.
             'cpp_value_to_v8_value': argument.idl_type.cpp_value_to_v8_value(
-                argument.name, isolate='isolate',
+                argument.name, isolate='m_scriptState->isolate()',
                 creation_context='m_scriptState->context()->Global()'),
         }
 
@@ -131,5 +128,5 @@
         for argument in arguments)
     return  {
         'argument_declarations': argument_declarations,
-        'arguments': [generate_argument(argument) for argument in arguments],
+        'arguments': [argument_context(argument) for argument in arguments],
     }
diff --git a/bindings/scripts/v8_dictionary.py b/bindings/scripts/v8_dictionary.py
new file mode 100644
index 0000000..6dc772f
--- /dev/null
+++ b/bindings/scripts/v8_dictionary.py
@@ -0,0 +1,135 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Generate template contexts of dictionaries for both v8 bindings and
+implementation classes that are used by blink's core/modules.
+"""
+
+import copy
+import operator
+from v8_globals import includes
+import v8_types
+import v8_utilities
+
+
+DICTIONARY_H_INCLUDES = frozenset([
+    'bindings/core/v8/V8Binding.h',
+    'platform/heap/Handle.h',
+])
+
+DICTIONARY_CPP_INCLUDES = frozenset([
+    # FIXME: Remove this, http://crbug.com/321462
+    'bindings/core/v8/Dictionary.h',
+])
+
+
+def setter_name_for_dictionary_member(member):
+    return 'set%s' % v8_utilities.capitalize(member.name)
+
+
+def has_method_name_for_dictionary_member(member):
+    return 'has%s' % v8_utilities.capitalize(member.name)
+
+
+# Context for V8 bindings
+
+def dictionary_context(dictionary):
+    includes.clear()
+    includes.update(DICTIONARY_CPP_INCLUDES)
+    return {
+        'cpp_class': v8_utilities.cpp_name(dictionary),
+        'header_includes': set(DICTIONARY_H_INCLUDES),
+        'members': [member_context(member)
+                    for member in sorted(dictionary.members,
+                                         key=operator.attrgetter('name'))],
+        'v8_class': v8_utilities.v8_class_name(dictionary),
+    }
+
+
+def member_context(member):
+    idl_type = member.idl_type
+    idl_type.add_includes_for_type()
+
+    def idl_type_for_default_value():
+        copied_type = copy.copy(idl_type)
+        # IdlType for default values shouldn't be nullable. Otherwise,
+        # it will generate meaningless expression like
+        # 'String("default value").isNull() ? ...'.
+        copied_type.is_nullable = False
+        return copied_type
+
+    def default_values():
+        if not member.default_value:
+            return None, None
+        if member.default_value.is_null:
+            return None, 'v8::Null(isolate)'
+        cpp_default_value = str(member.default_value)
+        v8_default_value = idl_type_for_default_value().cpp_value_to_v8_value(
+            cpp_value=cpp_default_value, isolate='isolate',
+            creation_context='creationContext')
+        return cpp_default_value, v8_default_value
+
+    cpp_default_value, v8_default_value = default_values()
+
+    return {
+        'cpp_default_value': cpp_default_value,
+        'cpp_type': idl_type.cpp_type,
+        'cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
+            cpp_value='impl->%s()' % member.name, isolate='isolate',
+            creation_context='creationContext',
+            extended_attributes=member.extended_attributes),
+        'has_method_name': has_method_name_for_dictionary_member(member),
+        'name': member.name,
+        'setter_name': setter_name_for_dictionary_member(member),
+        'v8_default_value': v8_default_value,
+    }
+
+
+# Context for implementation classes
+
+def dictionary_impl_context(dictionary, interfaces_info):
+    includes.clear()
+    header_includes = set(['platform/heap/Handle.h'])
+    return {
+        'header_includes': header_includes,
+        'cpp_class': v8_utilities.cpp_name(dictionary),
+        'members': [member_impl_context(member, interfaces_info,
+                                        header_includes)
+                    for member in dictionary.members],
+    }
+
+
+def member_impl_context(member, interfaces_info, header_includes):
+    idl_type = member.idl_type
+
+    def getter_expression():
+        if idl_type.impl_should_use_nullable_container:
+            return 'm_%s.get()' % member.name
+        return 'm_%s' % member.name
+
+    def has_method_expression():
+        if (idl_type.impl_should_use_nullable_container or
+            idl_type.is_string_type):
+            return '!m_%s.isNull()' % member.name
+        else:
+            return 'm_%s' % member.name
+
+    def member_cpp_type():
+        member_cpp_type = idl_type.cpp_type_args(used_in_cpp_sequence=True)
+        if idl_type.impl_should_use_nullable_container:
+            return v8_types.cpp_template_type('Nullable', member_cpp_type)
+        return member_cpp_type
+
+    header_includes.update(idl_type.impl_includes_for_type(interfaces_info))
+    return {
+        'getter_expression': getter_expression(),
+        'has_method_expression': has_method_expression(),
+        'has_method_name': has_method_name_for_dictionary_member(member),
+        'is_traceable': (idl_type.is_garbage_collected or
+                         idl_type.is_will_be_garbage_collected),
+        'member_cpp_type': member_cpp_type(),
+        'name': member.name,
+        'rvalue_cpp_type': idl_type.cpp_type_args(used_as_rvalue_type=True),
+        'setter_name': setter_name_for_dictionary_member(member),
+    }
diff --git a/bindings/scripts/v8_interface.py b/bindings/scripts/v8_interface.py
index 02f0860..2980628 100644
--- a/bindings/scripts/v8_interface.py
+++ b/bindings/scripts/v8_interface.py
@@ -36,6 +36,8 @@
 import itertools
 from operator import itemgetter
 
+import idl_definitions
+from idl_definitions import IdlOperation
 import idl_types
 from idl_types import IdlType, inherits_interface
 import v8_attributes
@@ -48,16 +50,17 @@
 
 
 INTERFACE_H_INCLUDES = frozenset([
-    'bindings/v8/V8Binding.h',
-    'bindings/v8/V8DOMWrapper.h',
-    'bindings/v8/WrapperTypeInfo.h',
+    'bindings/common/ScriptWrappable.h',
+    'bindings/core/v8/V8Binding.h',
+    'bindings/core/v8/V8DOMWrapper.h',
+    'bindings/core/v8/WrapperTypeInfo.h',
     'platform/heap/Handle.h',
 ])
 INTERFACE_CPP_INCLUDES = frozenset([
-    'bindings/v8/V8ExceptionState.h',
-    'bindings/v8/V8DOMConfiguration.h',
-    'bindings/v8/V8HiddenValue.h',
-    'bindings/v8/V8ObjectConstructor.h',
+    'bindings/core/v8/V8ExceptionState.h',
+    'bindings/core/v8/V8DOMConfiguration.h',
+    'bindings/core/v8/V8HiddenValue.h',
+    'bindings/core/v8/V8ObjectConstructor.h',
     'core/dom/ContextFeatures.h',
     'core/dom/Document.h',
     'platform/RuntimeEnabledFeatures.h',
@@ -67,7 +70,7 @@
 ])
 
 
-def generate_interface(interface):
+def interface_context(interface):
     includes.clear()
     includes.update(INTERFACE_CPP_INCLUDES)
     header_includes = set(INTERFACE_H_INCLUDES)
@@ -83,8 +86,8 @@
 
     is_document = inherits_interface(interface.name, 'Document')
     if is_document:
-        includes.update(['bindings/v8/ScriptController.h',
-                         'bindings/v8/V8WindowShell.h',
+        includes.update(['bindings/core/v8/ScriptController.h',
+                         'bindings/core/v8/WindowProxy.h',
                          'core/frame/LocalFrame.h'])
 
     # [ActiveDOMObject]
@@ -106,14 +109,14 @@
     # [SetWrapperReferenceFrom]
     reachable_node_function = extended_attributes.get('SetWrapperReferenceFrom')
     if reachable_node_function:
-        includes.update(['bindings/v8/V8GCController.h',
+        includes.update(['bindings/core/v8/V8GCController.h',
                          'core/dom/Element.h'])
 
     # [SetWrapperReferenceTo]
     set_wrapper_reference_to_list = [{
         'name': argument.name,
         # FIXME: properly should be:
-        # 'cpp_type': argument.idl_type.cpp_type_args(used_as_argument=True),
+        # 'cpp_type': argument.idl_type.cpp_type_args(raw_type=True),
         # (if type is non-wrapper type like NodeFilter, normally RefPtr)
         # Raw pointers faster though, and NodeFilter hacky anyway.
         'cpp_type': argument.idl_type.implemented_as + '*',
@@ -139,7 +142,7 @@
 
     this_gc_type = gc_type(interface)
 
-    template_contents = {
+    context = {
         'conditional_string': conditional_string(interface),  # [Conditional]
         'cpp_class': cpp_name(interface),
         'gc_type': this_gc_type,
@@ -175,14 +178,14 @@
     }
 
     # Constructors
-    constructors = [generate_constructor(interface, constructor)
+    constructors = [constructor_context(interface, constructor)
                     for constructor in interface.constructors
                     # FIXME: shouldn't put named constructors with constructors
                     # (currently needed for Perl compatibility)
                     # Handle named constructors separately
                     if constructor.name == 'Constructor']
     if len(constructors) > 1:
-        template_contents['constructor_overloads'] = generate_overloads(constructors)
+        context['constructor_overloads'] = overloads_context(constructors)
 
     # [CustomConstructor]
     custom_constructors = [{  # Only needed for computing interface length
@@ -195,65 +198,76 @@
     any_type_attributes = [attribute for attribute in interface.attributes
                            if attribute.idl_type.name == 'Any']
     if has_event_constructor:
-        includes.add('bindings/common/Dictionary.h')
+        includes.add('bindings/core/v8/Dictionary.h')
         if any_type_attributes:
-            includes.add('bindings/v8/SerializedScriptValue.h')
+            includes.add('bindings/core/v8/SerializedScriptValue.h')
 
     # [NamedConstructor]
-    named_constructor = generate_named_constructor(interface)
+    named_constructor = named_constructor_context(interface)
 
     if (constructors or custom_constructors or has_event_constructor or
         named_constructor):
-        includes.add('bindings/v8/V8ObjectConstructor.h')
+        includes.add('bindings/core/v8/V8ObjectConstructor.h')
         includes.add('core/frame/LocalDOMWindow.h')
 
-    template_contents.update({
+    context.update({
         'any_type_attributes': any_type_attributes,
         'constructors': constructors,
         'has_custom_constructor': bool(custom_constructors),
         'has_event_constructor': has_event_constructor,
         'interface_length':
             interface_length(interface, constructors + custom_constructors),
-        'is_constructor_call_with_document': has_extended_attribute_value(
-            interface, 'ConstructorCallWith', 'Document'),  # [ConstructorCallWith=Document]
-        'is_constructor_call_with_execution_context': has_extended_attribute_value(
-            interface, 'ConstructorCallWith', 'ExecutionContext'),  # [ConstructorCallWith=ExeuctionContext]
         'is_constructor_raises_exception': extended_attributes.get('RaisesException') == 'Constructor',  # [RaisesException=Constructor]
         'named_constructor': named_constructor,
     })
 
     # Constants
-    template_contents.update({
-        'constants': [generate_constant(constant) for constant in interface.constants],
+    context.update({
+        'constants': [constant_context(constant)
+                      for constant in interface.constants],
         'do_not_check_constants': 'DoNotCheckConstants' in extended_attributes,
     })
 
     # Attributes
-    attributes = [v8_attributes.generate_attribute(interface, attribute)
+    attributes = [v8_attributes.attribute_context(interface, attribute)
                   for attribute in interface.attributes
                   if not v8_utilities.dart_custom_method(attribute.extended_attributes)]
-    template_contents.update({
+    context.update({
         'attributes': attributes,
-        'has_accessors': any(attribute['is_expose_js_accessors'] for attribute in attributes),
+        'has_accessors': any(attribute['is_expose_js_accessors'] and attribute['should_be_exposed_to_script'] for attribute in attributes),
         'has_attribute_configuration': any(
              not (attribute['is_expose_js_accessors'] or
                   attribute['is_static'] or
                   attribute['runtime_enabled_function'] or
                   attribute['per_context_enabled_function'])
+             and attribute['should_be_exposed_to_script']
              for attribute in attributes),
+        'has_conditional_attributes': any(attribute['per_context_enabled_function'] or attribute['exposed_test'] for attribute in attributes),
         'has_constructor_attributes': any(attribute['constructor_type'] for attribute in attributes),
-        'has_per_context_enabled_attributes': any(attribute['per_context_enabled_function'] for attribute in attributes),
         'has_replaceable_attributes': any(attribute['is_replaceable'] for attribute in attributes),
     })
 
     # Methods
-    methods = [v8_methods.generate_method(interface, method)
+    methods = [v8_methods.method_context(interface, method)
                for method in interface.operations
                if (method.name and  # Skip anonymous special operations (methods)
                    not v8_utilities.dart_custom_method(method.extended_attributes))]
-    generate_method_overloads(methods)
+    compute_method_overloads_context(methods)
 
-    per_context_enabled_methods = []
+    # Stringifier
+    if interface.stringifier:
+        stringifier = interface.stringifier
+        method = IdlOperation(interface.idl_name)
+        method.name = 'toString'
+        method.idl_type = IdlType('DOMString')
+        method.extended_attributes.update(stringifier.extended_attributes)
+        if stringifier.attribute:
+            method.extended_attributes['ImplementedAs'] = stringifier.attribute.name
+        elif stringifier.operation:
+            method.extended_attributes['ImplementedAs'] = stringifier.operation.name
+        methods.append(v8_methods.method_context(interface, method))
+
+    conditionally_enabled_methods = []
     custom_registration_methods = []
     method_configuration_methods = []
 
@@ -265,20 +279,23 @@
         if 'overloads' in method:
             overloads = method['overloads']
             per_context_enabled_function = overloads['per_context_enabled_function_all']
+            conditionally_exposed_function = overloads['exposed_test_all']
             runtime_enabled_function = overloads['runtime_enabled_function_all']
             has_custom_registration = overloads['has_custom_registration_all']
         else:
             per_context_enabled_function = method['per_context_enabled_function']
+            conditionally_exposed_function = method['exposed_test']
             runtime_enabled_function = method['runtime_enabled_function']
             has_custom_registration = method['has_custom_registration']
 
-        if per_context_enabled_function:
-            per_context_enabled_methods.append(method)
+        if per_context_enabled_function or conditionally_exposed_function:
+            conditionally_enabled_methods.append(method)
             continue
         if runtime_enabled_function or has_custom_registration:
             custom_registration_methods.append(method)
             continue
-        method_configuration_methods.append(method)
+        if method['should_be_exposed_to_script']:
+            method_configuration_methods.append(method)
 
     for method in methods:
         # The value of the Function object’s “length” property is a Number
@@ -295,17 +312,19 @@
         method['length'] = (method['overloads']['minarg'] if 'overloads' in method else
                             method['number_of_required_arguments'])
 
-    template_contents.update({
+    context.update({
+        'conditionally_enabled_methods': conditionally_enabled_methods,
         'custom_registration_methods': custom_registration_methods,
         'has_origin_safe_method_setter': any(
             method['is_check_security_for_frame'] and not method['is_read_only']
             for method in methods),
+        'has_private_script': any(attribute['is_implemented_in_private_script'] for attribute in attributes) or
+            any(method['is_implemented_in_private_script'] for method in methods),
         'method_configuration_methods': method_configuration_methods,
-        'per_context_enabled_methods': per_context_enabled_methods,
         'methods': methods,
     })
 
-    template_contents.update({
+    context.update({
         'indexed_property_getter': indexed_property_getter(interface),
         'indexed_property_setter': indexed_property_setter(interface),
         'indexed_property_deleter': indexed_property_deleter(interface),
@@ -315,11 +334,11 @@
         'named_property_deleter': named_property_deleter(interface),
     })
 
-    return template_contents
+    return context
 
 
 # [DeprecateAs], [Reflect], [RuntimeEnabled]
-def generate_constant(constant):
+def constant_context(constant):
     # (Blink-only) string literals are unquoted in tokenizer, must be re-quoted
     # in C++.
     if constant.idl_type.name == 'String':
@@ -330,6 +349,7 @@
     extended_attributes = constant.extended_attributes
     return {
         'cpp_class': extended_attributes.get('PartialInterfaceImplementedAs'),
+        'idl_type': constant.idl_type.name,
         'name': constant.name,
         # FIXME: use 'reflected_name' as correct 'name'
         'reflected_name': extended_attributes.get('Reflect', constant.name),
@@ -342,17 +362,17 @@
 # Overloads
 ################################################################################
 
-def generate_method_overloads(methods):
+def compute_method_overloads_context(methods):
     # Regular methods
-    generate_overloads_by_type([method for method in methods
-                                if not method['is_static']])
+    compute_method_overloads_context_by_type([method for method in methods
+                                              if not method['is_static']])
     # Static methods
-    generate_overloads_by_type([method for method in methods
-                                if method['is_static']])
+    compute_method_overloads_context_by_type([method for method in methods
+                                              if method['is_static']])
 
 
-def generate_overloads_by_type(methods):
-    """Generates |method.overload*| template values.
+def compute_method_overloads_context_by_type(methods):
+    """Computes |method.overload*| template values.
 
     Called separately for static and non-static (regular) methods,
     as these are overloaded separately.
@@ -365,7 +385,7 @@
     for name, overloads in method_overloads_by_name(methods):
         # Resolution function is generated after last overloaded function;
         # package necessary information into |method.overloads| for that method.
-        overloads[-1]['overloads'] = generate_overloads(overloads)
+        overloads[-1]['overloads'] = overloads_context(overloads)
         overloads[-1]['overloads']['name'] = name
 
 
@@ -383,7 +403,7 @@
     return sort_and_groupby(overloaded_methods, itemgetter('name'))
 
 
-def generate_overloads(overloads):
+def overloads_context(overloads):
     """Returns |overloads| template values for a single name.
 
     Sets |method.overload_index| in place for |method| in |overloads|
@@ -424,13 +444,14 @@
 
     return {
         'deprecate_all_as': common_value(overloads, 'deprecate_as'),  # [DeprecateAs]
+        'exposed_test_all': common_value(overloads, 'exposed_test'),  # [Exposed]
+        'has_custom_registration_all': common_value(overloads, 'has_custom_registration'),
         'length_tests_methods': length_tests_methods(effective_overloads_by_length),
-        'minarg': lengths[0],
         # 1. Let maxarg be the length of the longest type list of the
         # entries in S.
         'maxarg': lengths[-1],
         'measure_all_as': common_value(overloads, 'measure_as'),  # [MeasureAs]
-        'has_custom_registration_all': common_value(overloads, 'has_custom_registration'),
+        'minarg': lengths[0],
         'per_context_enabled_function_all': common_value(overloads, 'per_context_enabled_function'),  # [PerContextEnabled]
         'runtime_enabled_function_all': common_value(overloads, 'runtime_enabled_function'),  # [RuntimeEnabled]
         'valid_arities': lengths
@@ -705,7 +726,7 @@
     for idl_type, method in ((idl_type, method)
                              for idl_type, method in idl_types_methods
                              if idl_type.is_wrapper_type):
-        test = 'V8{idl_type}::hasInstance({cpp_value}, isolate)'.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
+        test = 'V8{idl_type}::hasInstance({cpp_value}, info.GetIsolate())'.format(idl_type=idl_type.base_type, cpp_value=cpp_value)
         yield test, method
 
     # 8. Otherwise: if V is any kind of object except for a native Date object,
@@ -720,9 +741,9 @@
         # http://crbug.com/321462
         idl_type, method = next((idl_type, method)
                                 for idl_type, method in idl_types_methods
-                                if (idl_type.array_or_sequence_type or
+                                if (idl_type.native_array_element_type or
                                     idl_type.name == 'Dictionary'))
-        if idl_type.array_or_sequence_type:
+        if idl_type.native_array_element_type:
             # (We test for Array instead of generic Object to type-check.)
             # FIXME: test for Object during resolution, then have type check for
             # Array in overloaded method: http://crbug.com/262383
@@ -740,7 +761,7 @@
     # only needed if distinguishing between primitive types.)
     if len([idl_type.is_primitive_type for idl_type in idl_types]) > 1:
         # (Only needed if match in step 11, otherwise redundant.)
-        if any(idl_type.name == 'String' or idl_type.is_enum
+        if any(idl_type.is_string_type or idl_type.is_enum
                for idl_type in idl_types):
             # 10. Otherwise: if V is a Number value, and there is an entry in S
             # that has one of the following types at position i of its type
@@ -762,15 +783,12 @@
     # 11. Otherwise: if there is an entry in S that has one of the following
     # types at position i of its type list,
     # • DOMString
+    # • ByteString
+    # • ScalarValueString [a DOMString typedef, per definition.]
     # • an enumeration type
-    # * ByteString
-    # Blink: ScalarValueString is a pending Web IDL addition
     try:
         method = next(method for idl_type, method in idl_types_methods
-                      if idl_type.name in ('String',
-                                           'ByteString',
-                                           'ScalarValueString') or
-                      idl_type.is_enum)
+                      if idl_type.is_string_type or idl_type.is_enum)
         yield 'true', method
     except StopIteration:
         pass
@@ -839,12 +857,16 @@
 ################################################################################
 
 # [Constructor]
-def generate_constructor(interface, constructor):
-    arguments_need_try_catch = any(v8_methods.argument_needs_try_catch(argument)
+def constructor_context(interface, constructor):
+    arguments_need_try_catch = any(v8_methods.argument_needs_try_catch(argument, return_promise=False)
                                    for argument in constructor.arguments)
 
+    # [RaisesException=Constructor]
+    is_constructor_raises_exception = \
+        interface.extended_attributes.get('RaisesException') == 'Constructor'
+
     return {
-        'arguments': [v8_methods.generate_argument(interface, constructor, argument, index)
+        'arguments': [v8_methods.argument_context(interface, constructor, argument, index)
                       for index, argument in enumerate(constructor.arguments)],
         'arguments_need_try_catch': arguments_need_try_catch,
         'cpp_type': cpp_template_type(
@@ -853,20 +875,28 @@
         'cpp_value': v8_methods.cpp_value(
             interface, constructor, len(constructor.arguments)),
         'has_exception_state':
-            # [RaisesException=Constructor]
-            interface.extended_attributes.get('RaisesException') == 'Constructor' or
+            is_constructor_raises_exception or
             any(argument for argument in constructor.arguments
                 if argument.idl_type.name == 'SerializedScriptValue' or
-                   argument.idl_type.is_integer_type),
+                   argument.idl_type.may_raise_exception_on_conversion),
+        'is_call_with_document':
+            # [ConstructorCallWith=Document]
+            has_extended_attribute_value(interface,
+                'ConstructorCallWith', 'Document'),
+        'is_call_with_execution_context':
+            # [ConstructorCallWith=ExecutionContext]
+            has_extended_attribute_value(interface,
+                'ConstructorCallWith', 'ExecutionContext'),
         'is_constructor': True,
         'is_named_constructor': False,
+        'is_raises_exception': is_constructor_raises_exception,
         'number_of_required_arguments':
             number_of_required_arguments(constructor),
     }
 
 
 # [NamedConstructor]
-def generate_named_constructor(interface):
+def named_constructor_context(interface):
     extended_attributes = interface.extended_attributes
     if 'NamedConstructor' not in extended_attributes:
         return None
@@ -875,12 +905,12 @@
     # for Perl compatibility
     idl_constructor = interface.constructors[-1]
     assert idl_constructor.name == 'NamedConstructor'
-    constructor = generate_constructor(interface, idl_constructor)
-    constructor.update({
+    context = constructor_context(interface, idl_constructor)
+    context.update({
         'name': extended_attributes['NamedConstructor'],
         'is_named_constructor': True,
     })
-    return constructor
+    return context
 
 
 def number_of_required_arguments(constructor):
@@ -906,8 +936,10 @@
 def property_getter(getter, cpp_arguments):
     def is_null_expression(idl_type):
         if idl_type.is_union_type:
-            return ' && '.join('!result%sEnabled' % i
-                               for i, _ in enumerate(idl_type.member_types))
+            notnull = ' || '.join([
+                    member_argument['null_check_value']
+                    for member_argument in idl_type.union_arguments])
+            return '!(%s)' % notnull
         if idl_type.name == 'String':
             return 'result.isNull()'
         if idl_type.is_interface_type:
@@ -925,7 +957,8 @@
         cpp_arguments.append('exceptionState')
     union_arguments = idl_type.union_arguments
     if union_arguments:
-        cpp_arguments.extend(union_arguments)
+        cpp_arguments.extend([member_argument['cpp_value']
+                              for member_argument in union_arguments])
 
     cpp_value = '%s(%s)' % (cpp_method_name, ', '.join(cpp_arguments))
 
diff --git a/bindings/scripts/v8_methods.py b/bindings/scripts/v8_methods.py
index 38baa7b..16fceaa 100644
--- a/bindings/scripts/v8_methods.py
+++ b/bindings/scripts/v8_methods.py
@@ -28,12 +28,14 @@
 
 """Generate template values for methods.
 
-Extends IdlType and IdlUnionType with property |union_arguments|.
+Extends IdlArgument with property |default_cpp_value|.
+Extends IdlTypeBase and IdlUnionType with property |union_arguments|.
 
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
-from idl_types import IdlType, IdlUnionType, inherits_interface
+from idl_definitions import IdlArgument
+from idl_types import IdlTypeBase, IdlUnionType, inherits_interface
 from v8_globals import includes
 import v8_types
 import v8_utilities
@@ -46,14 +48,13 @@
     'DoNotCheckSecurity',
     'DoNotCheckSignature',
     'NotEnumerable',
-    'ReadOnly',
     'Unforgeable',
 ])
 
 
-def argument_needs_try_catch(argument):
+def argument_needs_try_catch(argument, return_promise):
     idl_type = argument.idl_type
-    base_type = not idl_type.array_or_sequence_type and idl_type.base_type
+    base_type = idl_type.base_type
 
     return not (
         # These cases are handled by separate code paths in the
@@ -62,17 +63,29 @@
         base_type == 'SerializedScriptValue' or
         (argument.is_variadic and idl_type.is_wrapper_type) or
         # String and enumeration arguments converted using one of the
-        # TOSTRING_* macros in Source/bindings/v8/V8BindingMacros.h don't
-        # use a v8::TryCatch.
-        (base_type == 'DOMString' and not argument.is_variadic))
+        # TOSTRING_* macros except for _PROMISE variants in
+        # Source/bindings/core/v8/V8BindingMacros.h don't use a v8::TryCatch.
+        (base_type == 'DOMString' and not argument.is_variadic and
+         not return_promise))
 
 
-def generate_method(interface, method):
+def use_local_result(method):
+    extended_attributes = method.extended_attributes
+    idl_type = method.idl_type
+    return (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or
+            'ImplementedInPrivateScript' in extended_attributes or
+            'RaisesException' in extended_attributes or
+            idl_type.is_union_type or
+            idl_type.is_explicit_nullable)
+
+
+def method_context(interface, method):
     arguments = method.arguments
     extended_attributes = method.extended_attributes
     idl_type = method.idl_type
     is_static = method.is_static
     name = method.name
+    return_promise = idl_type.name == 'Promise'
 
     idl_type.add_includes_for_type()
     this_cpp_value = cpp_value(interface, method, len(arguments))
@@ -84,13 +97,22 @@
             return 'instanceTemplate'
         return 'prototypeTemplate'
 
+    is_implemented_in_private_script = 'ImplementedInPrivateScript' in extended_attributes
+    if is_implemented_in_private_script:
+        includes.add('bindings/core/v8/PrivateScriptRunner.h')
+        includes.add('core/frame/LocalFrame.h')
+        includes.add('platform/ScriptForbiddenScope.h')
+
+    # [OnlyExposedToPrivateScript]
+    is_only_exposed_to_private_script = 'OnlyExposedToPrivateScript' in extended_attributes
+
     is_call_with_script_arguments = has_extended_attribute_value(method, 'CallWith', 'ScriptArguments')
     if is_call_with_script_arguments:
-        includes.update(['bindings/v8/ScriptCallStackFactory.h',
+        includes.update(['bindings/core/v8/ScriptCallStackFactory.h',
                          'core/inspector/ScriptArguments.h'])
     is_call_with_script_state = has_extended_attribute_value(method, 'CallWith', 'ScriptState')
     if is_call_with_script_state:
-        includes.add('bindings/v8/V8ScriptState.h')
+        includes.add('bindings/core/v8/V8ScriptState.h')
     is_check_security_for_node = 'CheckSecurity' in extended_attributes
     if is_check_security_for_node:
         includes.add('bindings/common/BindingSecurity.h')
@@ -98,43 +120,43 @@
     if is_custom_element_callbacks:
         includes.add('core/dom/custom/CustomElementCallbackDispatcher.h')
 
-    has_event_listener_argument = any(
-        argument for argument in arguments
-        if argument.idl_type.name == 'EventListener')
     is_check_security_for_frame = (
         'CheckSecurity' in interface.extended_attributes and
         'DoNotCheckSecurity' not in extended_attributes)
     is_raises_exception = 'RaisesException' in extended_attributes
 
-    arguments_need_try_catch = any(argument_needs_try_catch(argument)
-                                   for argument in arguments)
+    arguments_need_try_catch = (
+        any(argument_needs_try_catch(argument, return_promise)
+            for argument in arguments))
 
     return {
         'activity_logging_world_list': v8_utilities.activity_logging_world_list(method),  # [ActivityLogging]
-        'arguments': [generate_argument(interface, method, argument, index)
+        'arguments': [argument_context(interface, method, argument, index)
                       for index, argument in enumerate(arguments)],
+        'argument_declarations_for_private_script':
+            argument_declarations_for_private_script(interface, method),
         'arguments_need_try_catch': arguments_need_try_catch,
         'conditional_string': v8_utilities.conditional_string(method),
-        'cpp_type': idl_type.cpp_type,
+        'cpp_type': (v8_types.cpp_template_type('Nullable', idl_type.cpp_type)
+                     if idl_type.is_explicit_nullable else idl_type.cpp_type),
         'cpp_value': this_cpp_value,
+        'cpp_type_initializer': idl_type.cpp_type_initializer,
         'custom_registration_extended_attributes':
             CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES.intersection(
                 extended_attributes.iterkeys()),
         'deprecate_as': v8_utilities.deprecate_as(method),  # [DeprecateAs]
+        'exposed_test': v8_utilities.exposed(method, interface),  # [Exposed]
         'function_template': function_template(),
         'has_custom_registration': is_static or
             v8_utilities.has_extended_attribute(
                 method, CUSTOM_REGISTRATION_EXTENDED_ATTRIBUTES),
-        'has_event_listener_argument': has_event_listener_argument,
         'has_exception_state':
-            has_event_listener_argument or
             is_raises_exception or
             is_check_security_for_frame or
+            interface.name == 'EventTarget' or  # FIXME: merge with is_check_security_for_frame http://crbug.com/383699
             any(argument for argument in arguments
-                if argument.idl_type.name in ('ByteString',
-                                              'ScalarValueString',
-                                              'SerializedScriptValue') or
-                   argument.idl_type.is_integer_type),
+                if argument.idl_type.name == 'SerializedScriptValue' or
+                   argument.idl_type.may_raise_exception_on_conversion),
         'idl_type': idl_type.base_type,
         'is_call_with_execution_context': has_extended_attribute_value(method, 'CallWith', 'ExecutionContext'),
         'is_call_with_script_arguments': is_call_with_script_arguments,
@@ -145,11 +167,13 @@
         'is_custom_element_callbacks': is_custom_element_callbacks,
         'is_do_not_check_security': 'DoNotCheckSecurity' in extended_attributes,
         'is_do_not_check_signature': 'DoNotCheckSignature' in extended_attributes,
+        'is_explicit_nullable': idl_type.is_explicit_nullable,
+        'is_implemented_in_private_script': is_implemented_in_private_script,
         'is_partial_interface_member':
             'PartialInterfaceImplementedAs' in extended_attributes,
         'is_per_world_bindings': 'PerWorldBindings' in extended_attributes,
         'is_raises_exception': is_raises_exception,
-        'is_read_only': 'ReadOnly' in extended_attributes,
+        'is_read_only': 'Unforgeable' in extended_attributes,
         'is_static': is_static,
         'is_variadic': arguments and arguments[-1].is_variadic,
         'measure_as': v8_utilities.measure_as(method),  # [MeasureAs]
@@ -161,36 +185,47 @@
         'number_of_required_or_variadic_arguments': len([
             argument for argument in arguments
             if not argument.is_optional]),
+        'only_exposed_to_private_script': is_only_exposed_to_private_script,
         'per_context_enabled_function': v8_utilities.per_context_enabled_function_name(method),  # [PerContextEnabled]
+        'private_script_v8_value_to_local_cpp_value': idl_type.v8_value_to_local_cpp_value(
+            extended_attributes, 'v8Value', 'cppValue', isolate='scriptState->isolate()', used_in_private_script=True),
         'property_attributes': property_attributes(method),
         'runtime_enabled_function': v8_utilities.runtime_enabled_function_name(method),  # [RuntimeEnabled]
+        'should_be_exposed_to_script': not (is_implemented_in_private_script and is_only_exposed_to_private_script),
         'signature': 'v8::Local<v8::Signature>()' if is_static or 'DoNotCheckSignature' in extended_attributes else 'defaultSignature',
         'union_arguments': idl_type.union_arguments,
-        'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
+        'use_local_result': use_local_result(method),
         'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value),
-        'world_suffixes': ['', 'ForMainWorld'] if 'PerWorldBindings' in extended_attributes else [''],  # [PerWorldBindings]
+        'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
+        'world_suffixes': ['', 'ForMainWorld'] if 'PerWorldBindings' in extended_attributes else [''],  # [PerWorldBindings],
     }
 
 
-def generate_argument(interface, method, argument, index):
+def argument_context(interface, method, argument, index):
     extended_attributes = argument.extended_attributes
     idl_type = argument.idl_type
     this_cpp_value = cpp_value(interface, method, index)
     is_variadic_wrapper_type = argument.is_variadic and idl_type.is_wrapper_type
+    return_promise = (method.idl_type.name == 'Promise' if method.idl_type
+                                                        else False)
+
+    if ('ImplementedInPrivateScript' in extended_attributes and
+        not idl_type.is_wrapper_type and
+        not idl_type.is_basic_type):
+        raise Exception('Private scripts supports only primitive types and DOM wrappers.')
 
     return {
         'cpp_type': idl_type.cpp_type_args(extended_attributes=extended_attributes,
-                                           used_as_argument=True,
+                                           raw_type=True,
                                            used_as_variadic_argument=argument.is_variadic),
+        'cpp_type_initializer': idl_type.cpp_type_initializer,
         'cpp_value': this_cpp_value,
         # FIXME: check that the default value's type is compatible with the argument's
-        'default_value': str(argument.default_value) if argument.default_value else None,
+        'default_value': argument.default_cpp_value,
         'enum_validation_expression': idl_type.enum_validation_expression,
+        'handle': '%sHandle' % argument.name,
         # FIXME: remove once [Default] removed and just use argument.default_value
         'has_default': 'Default' in extended_attributes or argument.default_value,
-        'has_event_listener_argument': any(
-            argument_so_far for argument_so_far in method.arguments[:index]
-            if argument_so_far.idl_type.name == 'EventListener'),
         'has_type_checking_interface':
             (has_extended_attribute_value(interface, 'TypeChecking', 'Interface') or
              has_extended_attribute_value(method, 'TypeChecking', 'Interface')) and
@@ -200,7 +235,7 @@
              has_extended_attribute_value(method, 'TypeChecking', 'Unrestricted')) and
             idl_type.name in ('Float', 'Double'),
         # Dictionary is special-cased, but arrays and sequences shouldn't be
-        'idl_type': not idl_type.array_or_sequence_type and idl_type.base_type,
+        'idl_type': idl_type.base_type,
         'idl_type_object': idl_type,
         'index': index,
         'is_clamp': 'Clamp' in extended_attributes,
@@ -208,15 +243,28 @@
         'is_nullable': idl_type.is_nullable,
         'is_optional': argument.is_optional,
         'is_variadic_wrapper_type': is_variadic_wrapper_type,
-        'vector_type': v8_types.cpp_ptr_type('Vector', 'HeapVector', idl_type.gc_type),
         'is_wrapper_type': idl_type.is_wrapper_type,
         'name': argument.name,
-        'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
+        'private_script_cpp_value_to_v8_value': idl_type.cpp_value_to_v8_value(
+            argument.name, isolate='scriptState->isolate()',
+            creation_context='scriptState->context()->Global()'),
         'v8_set_return_value': v8_set_return_value(interface.name, method, this_cpp_value),
-        'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index),
+        'v8_set_return_value_for_main_world': v8_set_return_value(interface.name, method, this_cpp_value, for_main_world=True),
+        'v8_value_to_local_cpp_value': v8_value_to_local_cpp_value(argument, index, return_promise=return_promise),
+        'vector_type': v8_types.cpp_ptr_type('Vector', 'HeapVector', idl_type.gc_type),
     }
 
 
+def argument_declarations_for_private_script(interface, method):
+    argument_declarations = ['LocalFrame* frame']
+    argument_declarations.append('%s* holderImpl' % interface.name)
+    argument_declarations.extend(['%s %s' % (argument.idl_type.cpp_type_args(
+        used_as_rvalue_type=True), argument.name) for argument in method.arguments])
+    if method.idl_type.name != 'void':
+        argument_declarations.append('%s* %s' % (method.idl_type.cpp_type, 'result'))
+    return argument_declarations
+
+
 ################################################################################
 # Value handling
 ################################################################################
@@ -225,14 +273,10 @@
     def cpp_argument(argument):
         idl_type = argument.idl_type
         if idl_type.name == 'EventListener':
-            if (interface.name == 'EventTarget' and
-                method.name == 'removeEventListener'):
-                # FIXME: remove this special case by moving get() into
-                # EventTarget::removeEventListener
-                return '%s.get()' % argument.name
             return argument.name
         if (idl_type.is_callback_interface or
-            idl_type.name in ['NodeFilter', 'XPathNSResolver']):
+            idl_type.name in ['NodeFilter', 'NodeFilterOrNull',
+                              'XPathNSResolver', 'XPathNSResolverOrNull']):
             # FIXME: remove this special case
             return '%s.release()' % argument.name
         return argument.name
@@ -240,23 +284,34 @@
     # Truncate omitted optional arguments
     arguments = method.arguments[:number_of_arguments]
     cpp_arguments = []
+    if 'ImplementedInPrivateScript' in method.extended_attributes:
+        cpp_arguments.append('toFrameIfNotDetached(info.GetIsolate()->GetCurrentContext())')
+        cpp_arguments.append('impl')
+
     if method.is_constructor:
         call_with_values = interface.extended_attributes.get('ConstructorCallWith')
     else:
         call_with_values = method.extended_attributes.get('CallWith')
     cpp_arguments.extend(v8_utilities.call_with_arguments(call_with_values))
+
     # Members of IDL partial interface definitions are implemented in C++ as
     # static member functions, which for instance members (non-static members)
     # take *impl as their first argument
     if ('PartialInterfaceImplementedAs' in method.extended_attributes and
+        not 'ImplementedInPrivateScript' in method.extended_attributes and
         not method.is_static):
         cpp_arguments.append('*impl')
     cpp_arguments.extend(cpp_argument(argument) for argument in arguments)
+
     this_union_arguments = method.idl_type and method.idl_type.union_arguments
     if this_union_arguments:
-        cpp_arguments.extend(this_union_arguments)
+        cpp_arguments.extend([member_argument['cpp_value']
+                              for member_argument in this_union_arguments])
 
-    if ('RaisesException' in method.extended_attributes or
+    if 'ImplementedInPrivateScript' in method.extended_attributes:
+        if method.idl_type.name != 'void':
+            cpp_arguments.append('&result')
+    elif ('RaisesException' in method.extended_attributes or
         (method.is_constructor and
          has_extended_attribute_value(interface, 'RaisesException', 'Constructor'))):
         cpp_arguments.append('exceptionState')
@@ -265,6 +320,8 @@
         base_name = 'create'
     elif method.name == 'NamedConstructor':
         base_name = 'createForJSConstructor'
+    elif 'ImplementedInPrivateScript' in method.extended_attributes:
+        base_name = '%sMethod' % method.name
     else:
         base_name = v8_utilities.cpp_name(method)
 
@@ -279,47 +336,54 @@
         # Constructors and void methods don't have a return type
         return None
 
+    if ('ImplementedInPrivateScript' in extended_attributes and
+        not idl_type.is_wrapper_type and
+        not idl_type.is_basic_type):
+        raise Exception('Private scripts supports only primitive types and DOM wrappers.')
+
     release = False
     # [CallWith=ScriptState], [RaisesException]
-    if (has_extended_attribute_value(method, 'CallWith', 'ScriptState') or
-        'RaisesException' in extended_attributes or
-        idl_type.is_union_type):
-        cpp_value = 'result'  # use local variable for value
+    if use_local_result(method):
+        if idl_type.is_explicit_nullable:
+            # result is of type Nullable<T>
+            cpp_value = 'result.get()'
+        else:
+            cpp_value = 'result'
         release = idl_type.release
 
     script_wrappable = 'impl' if inherits_interface(interface_name, 'Node') else ''
     return idl_type.v8_set_return_value(cpp_value, extended_attributes, script_wrappable=script_wrappable, release=release, for_main_world=for_main_world)
 
 
-def v8_value_to_local_cpp_variadic_value(argument, index):
+def v8_value_to_local_cpp_variadic_value(argument, index, return_promise):
     assert argument.is_variadic
     idl_type = argument.idl_type
 
-    macro = 'TONATIVE_VOID_INTERNAL'
+    suffix = ''
+
+    macro = 'TONATIVE_VOID'
     macro_args = [
       argument.name,
       'toNativeArguments<%s>(info, %s)' % (idl_type.cpp_type, index),
     ]
 
-    return '%s(%s)' % (macro, ', '.join(macro_args))
+    if return_promise:
+        suffix += '_PROMISE'
+        macro_args.append('info')
+
+    suffix += '_INTERNAL'
+
+    return '%s%s(%s)' % (macro, suffix, ', '.join(macro_args))
 
 
-def v8_value_to_local_cpp_value(argument, index):
+def v8_value_to_local_cpp_value(argument, index, return_promise=False):
     extended_attributes = argument.extended_attributes
     idl_type = argument.idl_type
     name = argument.name
     if argument.is_variadic:
-        return v8_value_to_local_cpp_variadic_value(argument, index)
-    # FIXME: This special way of handling string arguments with null defaults
-    # can go away once we fully support default values.
-    if (argument.is_optional and
-        idl_type.name in ('String', 'ByteString', 'ScalarValueString') and
-        argument.default_value and argument.default_value.is_null):
-        v8_value = 'argumentOrNull(info, %s)' % index
-    else:
-        v8_value = 'info[%s]' % index
-    return idl_type.v8_value_to_local_cpp_value(extended_attributes, v8_value,
-                                                name, index=index, declare_variable=False)
+        return v8_value_to_local_cpp_variadic_value(argument, index, return_promise)
+    return idl_type.v8_value_to_local_cpp_value(extended_attributes, 'info[%s]' % index,
+                                                name, index=index, declare_variable=False, return_promise=return_promise)
 
 
 ################################################################################
@@ -332,18 +396,49 @@
     property_attributes_list = []
     if 'NotEnumerable' in extended_attributes:
         property_attributes_list.append('v8::DontEnum')
-    if 'ReadOnly' in extended_attributes:
+    if 'Unforgeable' in extended_attributes:
         property_attributes_list.append('v8::ReadOnly')
     if property_attributes_list:
         property_attributes_list.insert(0, 'v8::DontDelete')
     return property_attributes_list
 
 
-def union_arguments(idl_type):
-    """Return list of ['result0Enabled', 'result0', 'result1Enabled', ...] for union types, for use in setting return value"""
-    return [arg
-            for i in range(len(idl_type.member_types))
-            for arg in ['result%sEnabled' % i, 'result%s' % i]]
+def union_member_argument_context(idl_type, index):
+    """Returns a context of union member for argument."""
+    this_cpp_value = 'result%d' % index
+    this_cpp_type = idl_type.cpp_type
+    cpp_return_value = this_cpp_value
 
-IdlType.union_arguments = property(lambda self: None)
+    if not idl_type.cpp_type_has_null_value:
+        this_cpp_type = v8_types.cpp_template_type('Nullable', this_cpp_type)
+        cpp_return_value = '%s.get()' % this_cpp_value
+
+    if idl_type.is_string_type:
+        null_check_value = '!%s.isNull()' % this_cpp_value
+    else:
+        null_check_value = this_cpp_value
+
+    return {
+        'cpp_type': this_cpp_type,
+        'cpp_value': this_cpp_value,
+        'null_check_value': null_check_value,
+        'v8_set_return_value': idl_type.v8_set_return_value(
+            cpp_value=cpp_return_value,
+            release=idl_type.release),
+    }
+
+
+def union_arguments(idl_type):
+    return [union_member_argument_context(member_idl_type, index)
+            for index, member_idl_type
+            in enumerate(idl_type.member_types)]
+
+
+def argument_default_cpp_value(argument):
+    if not argument.default_value:
+        return None
+    return argument.idl_type.literal_cpp_value(argument.default_value)
+
+IdlTypeBase.union_arguments = None
 IdlUnionType.union_arguments = property(union_arguments)
+IdlArgument.default_cpp_value = property(argument_default_cpp_value)
diff --git a/bindings/scripts/v8_types.py b/bindings/scripts/v8_types.py
index 50e512b..1ee093a 100644
--- a/bindings/scripts/v8_types.py
+++ b/bindings/scripts/v8_types.py
@@ -39,7 +39,7 @@
 
 import posixpath
 
-from idl_types import IdlType, IdlUnionType
+from idl_types import IdlTypeBase, IdlType, IdlUnionType, IdlArrayOrSequenceType
 import v8_attributes  # for IdlType.constructor_type_name
 from v8_globals import includes
 
@@ -72,10 +72,12 @@
     'Uint32Array': ('unsigned int', 'v8::kExternalUnsignedIntArray'),
 }
 
-IdlType.is_typed_array_type = property(
+IdlTypeBase.is_typed_array_element_type = False
+IdlType.is_typed_array_element_type = property(
     lambda self: self.base_type in TYPED_ARRAYS)
 
 
+IdlTypeBase.is_wrapper_type = False
 IdlType.is_wrapper_type = property(
     lambda self: (self.is_interface_type and
                   self.base_type not in NON_WRAPPER_TYPES))
@@ -119,7 +121,7 @@
 }
 
 
-def cpp_type(idl_type, extended_attributes=None, used_as_argument=False, used_as_variadic_argument=False, used_in_cpp_sequence=False):
+def cpp_type(idl_type, extended_attributes=None, raw_type=False, used_as_rvalue_type=False, used_as_variadic_argument=False, used_in_cpp_sequence=False):
     """Returns C++ type corresponding to IDL type.
 
     |idl_type| argument is of type IdlType, while return value is a string
@@ -127,31 +129,40 @@
     Args:
         idl_type:
             IdlType
-        used_as_argument:
+        raw_type:
             bool, True if idl_type's raw/primitive C++ type should be returned.
+        used_as_rvalue_type:
+            bool, True if the C++ type is used as an argument or the return
+            type of a method.
+        used_as_variadic_argument:
+            bool, True if the C++ type is used as a variadic argument of a method.
         used_in_cpp_sequence:
-            bool, True if the C++ type is used as an element of an array or sequence.
+            bool, True if the C++ type is used as an element of a container.
+            Containers can be an array, a sequence or a dictionary.
     """
     def string_mode():
-        # FIXME: the Web IDL spec requires 'EmptyString', not 'NullString',
-        # but we use NullString for performance.
-        if extended_attributes.get('TreatNullAs') != 'NullString':
-            return ''
-        if extended_attributes.get('TreatUndefinedAs') != 'NullString':
-            return 'WithNullCheck'
-        return 'WithUndefinedOrNullCheck'
+        if extended_attributes.get('TreatNullAs') == 'EmptyString':
+            return 'TreatNullAsEmptyString'
+        if idl_type.is_nullable or extended_attributes.get('TreatNullAs') == 'NullString':
+            if extended_attributes.get('TreatUndefinedAs') == 'NullString':
+                return 'TreatNullAndUndefinedAsNullString'
+            return 'TreatNullAsNullString'
+        return ''
 
     extended_attributes = extended_attributes or {}
     idl_type = idl_type.preprocessed_type
 
-    # Composite types
+    # Array or sequence types
     if used_as_variadic_argument:
-        array_or_sequence_type = idl_type
+        native_array_element_type = idl_type
     else:
-        array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        vector_type = cpp_ptr_type('Vector', 'HeapVector', array_or_sequence_type.gc_type)
-        return cpp_template_type(vector_type, array_or_sequence_type.cpp_type_args(used_in_cpp_sequence=True))
+        native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        vector_type = cpp_ptr_type('Vector', 'HeapVector', native_array_element_type.gc_type)
+        vector_template_type = cpp_template_type(vector_type, native_array_element_type.cpp_type_args(used_in_cpp_sequence=True))
+        if used_as_rvalue_type:
+            return 'const %s&' % vector_template_type
+        return vector_template_type
 
     # Simple types
     base_idl_type = idl_type.base_type
@@ -166,36 +177,65 @@
         return CPP_SPECIAL_CONVERSION_RULES[base_idl_type]
 
     if base_idl_type in NON_WRAPPER_TYPES:
-        return 'RefPtr<%s>' % base_idl_type
-    if base_idl_type in ('DOMString', 'ByteString', 'ScalarValueString'):
-        if not used_as_argument:
+        return ('PassRefPtr<%s>' if used_as_rvalue_type else 'RefPtr<%s>') % base_idl_type
+    if idl_type.is_string_type:
+        if not raw_type:
             return 'String'
         return 'V8StringResource<%s>' % string_mode()
 
-    if idl_type.is_typed_array_type and used_as_argument:
+    if idl_type.is_typed_array_element_type and raw_type:
         return base_idl_type + '*'
     if idl_type.is_interface_type:
         implemented_as_class = idl_type.implemented_as
-        if used_as_argument:
+        if raw_type:
             return implemented_as_class + '*'
         new_type = 'Member' if used_in_cpp_sequence else 'RawPtr'
-        ptr_type = cpp_ptr_type('RefPtr', new_type, idl_type.gc_type)
+        ptr_type = cpp_ptr_type(('PassRefPtr' if used_as_rvalue_type else 'RefPtr'), new_type, idl_type.gc_type)
         return cpp_template_type(ptr_type, implemented_as_class)
     # Default, assume native type is a pointer with same type name as idl type
     return base_idl_type + '*'
 
 
-def cpp_type_union(idl_type, extended_attributes=None, used_as_argument=False):
-    return (member_type.cpp_type for member_type in idl_type.member_types)
+def cpp_type_initializer(idl_type):
+    """Returns a string containing a C++ initialization statement for the
+    corresponding type.
+
+    |idl_type| argument is of type IdlType.
+    """
+
+    if (idl_type.is_numeric_type):
+        return ' = 0'
+    if idl_type.base_type == 'boolean':
+        return ' = false'
+    if idl_type.base_type == 'Promise':
+        return '(nullptr)'
+    return ''
+
+
+def cpp_type_union(idl_type, extended_attributes=None, raw_type=False):
+    # FIXME: Need to revisit the design of union support.
+    # http://crbug.com/240176
+    return None
+
+
+def cpp_type_initializer_union(idl_type):
+    return (member_type.cpp_type_initializer for member_type in idl_type.member_types)
 
 
 # Allow access as idl_type.cpp_type if no arguments
-IdlType.cpp_type = property(cpp_type)
+IdlTypeBase.cpp_type = property(cpp_type)
+IdlTypeBase.cpp_type_initializer = property(cpp_type_initializer)
+IdlTypeBase.cpp_type_args = cpp_type
 IdlUnionType.cpp_type = property(cpp_type_union)
-IdlType.cpp_type_args = cpp_type
+IdlUnionType.cpp_type_initializer = property(cpp_type_initializer_union)
 IdlUnionType.cpp_type_args = cpp_type_union
 
 
+IdlTypeBase.native_array_element_type = None
+IdlArrayOrSequenceType.native_array_element_type = property(
+    lambda self: self.element_type)
+
+
 def cpp_template_type(template, inner_type):
     """Returns C++ template specialized to type, with space added if needed."""
     if inner_type.endswith('>'):
@@ -247,6 +287,7 @@
 # [GarbageCollected]
 IdlType.garbage_collected_types = set()
 
+IdlTypeBase.is_garbage_collected = False
 IdlType.is_garbage_collected = property(
     lambda self: self.base_type in IdlType.garbage_collected_types)
 
@@ -258,6 +299,7 @@
 # [WillBeGarbageCollected]
 IdlType.will_be_garbage_collected_types = set()
 
+IdlTypeBase.is_will_be_garbage_collected = False
 IdlType.is_will_be_garbage_collected = property(
     lambda self: self.base_type in IdlType.will_be_garbage_collected_types)
 
@@ -273,7 +315,7 @@
         return 'WillBeGarbageCollectedObject'
     return 'RefCountedObject'
 
-IdlType.gc_type = property(gc_type)
+IdlTypeBase.gc_type = property(gc_type)
 
 
 ################################################################################
@@ -287,11 +329,11 @@
 INCLUDES_FOR_TYPE = {
     'object': set(),
     'CompareHow': set(),
-    'Dictionary': set(['bindings/common/Dictionary.h']),
-    'EventHandler': set(['bindings/v8/V8AbstractEventListener.h',
-                         'bindings/v8/V8EventListenerList.h']),
+    'Dictionary': set(['bindings/core/v8/Dictionary.h']),
+    'EventHandler': set(['bindings/core/v8/V8AbstractEventListener.h',
+                         'bindings/core/v8/V8EventListenerList.h']),
     'EventListener': set(['bindings/common/BindingSecurity.h',
-                          'bindings/v8/V8EventListenerList.h',
+                          'bindings/core/v8/V8EventListenerList.h',
                           'core/frame/LocalDOMWindow.h']),
     'HTMLCollection': set(['bindings/core/v8/V8HTMLCollection.h',
                            'core/dom/ClassCollection.h',
@@ -305,8 +347,8 @@
                      'core/dom/NodeList.h',
                      'core/dom/StaticNodeList.h',
                      'core/html/LabelsNodeList.h']),
-    'Promise': set(['bindings/v8/ScriptPromise.h']),
-    'SerializedScriptValue': set(['bindings/v8/SerializedScriptValue.h']),
+    'Promise': set(['bindings/core/v8/V8ScriptPromise.h']),
+    'SerializedScriptValue': set(['bindings/core/v8/SerializedScriptValue.h']),
     'ScriptValue': set(['bindings/common/ScriptValue.h']),
 }
 
@@ -314,19 +356,14 @@
 def includes_for_type(idl_type):
     idl_type = idl_type.preprocessed_type
 
-    # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        return includes_for_type(array_or_sequence_type)
-
     # Simple types
     base_idl_type = idl_type.base_type
     if base_idl_type in INCLUDES_FOR_TYPE:
         return INCLUDES_FOR_TYPE[base_idl_type]
     if idl_type.is_basic_type:
         return set()
-    if idl_type.is_typed_array_type:
-        return set(['bindings/v8/custom/V8%sCustom.h' % base_idl_type])
+    if idl_type.is_typed_array_element_type:
+        return set(['bindings/core/v8/custom/V8%sCustom.h' % base_idl_type])
     if base_idl_type.endswith('ConstructorConstructor'):
         # FIXME: rename to NamedConstructor
         # FIXME: replace with a [NamedConstructorAttribute] extended attribute
@@ -337,6 +374,8 @@
     if base_idl_type.endswith('Constructor'):
         # FIXME: replace with a [ConstructorAttribute] extended attribute
         base_idl_type = idl_type.constructor_type_name
+    if base_idl_type not in component_dir:
+        return set()
     return set(['bindings/%s/v8/V8%s.h' % (component_dir[base_idl_type],
                                            base_idl_type)])
 
@@ -344,13 +383,14 @@
 IdlUnionType.includes_for_type = property(
     lambda self: set.union(*[includes_for_type(member_type)
                              for member_type in self.member_types]))
+IdlArrayOrSequenceType.includes_for_type = property(
+    lambda self: self.element_type.includes_for_type)
 
 
 def add_includes_for_type(idl_type):
     includes.update(idl_type.includes_for_type)
 
-IdlType.add_includes_for_type = add_includes_for_type
-IdlUnionType.add_includes_for_type = add_includes_for_type
+IdlTypeBase.add_includes_for_type = add_includes_for_type
 
 
 def includes_for_interface(interface_name):
@@ -360,11 +400,41 @@
 def add_includes_for_interface(interface_name):
     includes.update(includes_for_interface(interface_name))
 
+
+def impl_should_use_nullable_container(idl_type):
+    return not(idl_type.cpp_type_has_null_value)
+
+IdlTypeBase.impl_should_use_nullable_container = property(
+    impl_should_use_nullable_container)
+
+
+def impl_includes_for_type(idl_type, interfaces_info):
+    includes_for_type = set()
+    if idl_type.impl_should_use_nullable_container:
+        includes_for_type.add('bindings/common/Nullable.h')
+
+    idl_type = idl_type.preprocessed_type
+    native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        includes_for_type.update(impl_includes_for_type(
+                native_array_element_type, interfaces_info))
+        includes_for_type.add('wtf/Vector.h')
+
+    if idl_type.is_string_type:
+        includes_for_type.add('wtf/text/WTFString.h')
+    if idl_type.name in interfaces_info:
+        interface_info = interfaces_info[idl_type.name]
+        includes_for_type.add(interface_info['include_path'])
+    return includes_for_type
+
+IdlTypeBase.impl_includes_for_type = impl_includes_for_type
+
+
 component_dir = {}
 
 
 def set_component_dirs(new_component_dirs):
-        component_dir.update(new_component_dirs)
+    component_dir.update(new_component_dirs)
 
 
 ################################################################################
@@ -392,23 +462,26 @@
     'unsigned long long': 'toUInt64({arguments})',
     # Interface types
     'CompareHow': 'static_cast<Range::CompareHow>({v8_value}->Int32Value())',
-    'Dictionary': 'Dictionary({v8_value}, info.GetIsolate())',
+    'Dictionary': 'Dictionary({v8_value}, {isolate})',
     'EventTarget': 'V8DOMWrapper::isDOMWrapper({v8_value}) ? toWrapperTypeInfo(v8::Handle<v8::Object>::Cast({v8_value}))->toEventTarget(v8::Handle<v8::Object>::Cast({v8_value})) : 0',
-    'MediaQueryListListener': 'MediaQueryListListener::create(V8ScriptState::current(info.GetIsolate()), ScriptValue(V8ScriptState::current(info.GetIsolate()), {v8_value}))',
-    'NodeFilter': 'toNodeFilter({v8_value}, info.Holder(), V8ScriptState::current(info.GetIsolate()))',
-    'Promise': 'ScriptPromise::cast(V8ScriptState::current(info.GetIsolate()), {v8_value})',
-    'SerializedScriptValue': 'SerializedScriptValue::create({v8_value}, info.GetIsolate())',
-    'ScriptValue': 'ScriptValue(V8ScriptState::current(info.GetIsolate()), {v8_value})',
-    'Window': 'toDOMWindow({v8_value}, info.GetIsolate())',
-    'XPathNSResolver': 'toXPathNSResolver({v8_value}, info.GetIsolate())',
+    'MediaQueryListListener': 'MediaQueryListListener::create(V8ScriptState::current({isolate}), ScriptValue(V8ScriptState::current({isolate}), {v8_value}))',
+    'NodeFilter': 'toNodeFilter({v8_value}, info.Holder(), V8ScriptState::current({isolate}))',
+    'Promise': 'V8ScriptPromise::cast(V8ScriptState::current({isolate}), {v8_value})',
+    'SerializedScriptValue': 'SerializedScriptValue::create({v8_value}, {isolate})',
+    'ScriptValue': 'ScriptValue(V8ScriptState::current({isolate}), {v8_value})',
+    'Window': 'toDOMWindow({v8_value}, {isolate})',
+    'XPathNSResolver': 'toXPathNSResolver({v8_value}, {isolate})',
 }
 
 
-def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index):
-    # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        return v8_value_to_cpp_value_array_or_sequence(array_or_sequence_type, v8_value, index)
+def v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index, isolate):
+    if idl_type.name == 'void':
+        return ''
+
+    # Array or sequence types
+    native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        return v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value, index)
 
     # Simple types
     idl_type = idl_type.preprocessed_type
@@ -417,66 +490,80 @@
 
     if 'EnforceRange' in extended_attributes:
         arguments = ', '.join([v8_value, 'EnforceRange', 'exceptionState'])
-    elif (idl_type.is_integer_type or  # NormalConversion
-          idl_type.name in ('ByteString', 'ScalarValueString')):
+    elif idl_type.may_raise_exception_on_conversion:
         arguments = ', '.join([v8_value, 'exceptionState'])
     else:
         arguments = v8_value
 
     if base_idl_type in V8_VALUE_TO_CPP_VALUE:
         cpp_expression_format = V8_VALUE_TO_CPP_VALUE[base_idl_type]
-    elif idl_type.is_typed_array_type:
+    elif idl_type.is_typed_array_element_type:
         cpp_expression_format = (
             '{v8_value}->Is{idl_type}() ? '
             'V8{idl_type}::toNative(v8::Handle<v8::{idl_type}>::Cast({v8_value})) : 0')
+    elif idl_type.is_dictionary:
+        cpp_expression_format = 'V8{idl_type}::toNative({isolate}, {v8_value})'
     else:
         cpp_expression_format = (
-            'V8{idl_type}::toNativeWithTypeCheck(info.GetIsolate(), {v8_value})')
+            'V8{idl_type}::toNativeWithTypeCheck({isolate}, {v8_value})')
 
-    return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_type, v8_value=v8_value)
+    return cpp_expression_format.format(arguments=arguments, idl_type=base_idl_type, v8_value=v8_value, isolate=isolate)
 
 
-def v8_value_to_cpp_value_array_or_sequence(array_or_sequence_type, v8_value, index):
+def v8_value_to_cpp_value_array_or_sequence(native_array_element_type, v8_value, index, isolate='info.GetIsolate()'):
     # Index is None for setters, index (starting at 0) for method arguments,
     # and is used to provide a human-readable exception message
     if index is None:
         index = 0  # special case, meaning "setter"
     else:
         index += 1  # human-readable index
-    if (array_or_sequence_type.is_interface_type and
-        array_or_sequence_type.name != 'Dictionary'):
+    if (native_array_element_type.is_interface_type and
+        native_array_element_type.name != 'Dictionary'):
         this_cpp_type = None
-        ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', array_or_sequence_type.gc_type)
-        expression_format = '(to{ref_ptr_type}NativeArray<{array_or_sequence_type}, V8{array_or_sequence_type}>({v8_value}, {index}, info.GetIsolate()))'
-        add_includes_for_type(array_or_sequence_type)
+        ref_ptr_type = cpp_ptr_type('RefPtr', 'Member', native_array_element_type.gc_type)
+        expression_format = '(to{ref_ptr_type}NativeArray<{native_array_element_type}, V8{native_array_element_type}>({v8_value}, {index}, {isolate}))'
+        add_includes_for_type(native_array_element_type)
     else:
         ref_ptr_type = None
-        this_cpp_type = array_or_sequence_type.cpp_type
-        expression_format = 'toNativeArray<{cpp_type}>({v8_value}, {index}, info.GetIsolate())'
-    expression = expression_format.format(array_or_sequence_type=array_or_sequence_type.name, cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_type, v8_value=v8_value)
+        this_cpp_type = native_array_element_type.cpp_type
+        expression_format = 'toNativeArray<{cpp_type}>({v8_value}, {index}, {isolate})'
+    expression = expression_format.format(native_array_element_type=native_array_element_type.name, cpp_type=this_cpp_type, index=index, ref_ptr_type=ref_ptr_type, v8_value=v8_value, isolate=isolate)
     return expression
 
 
-def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name, index=None, declare_variable=True):
+def v8_value_to_local_cpp_value(idl_type, extended_attributes, v8_value, variable_name, index=None, declare_variable=True, isolate='info.GetIsolate()', used_in_private_script=False, return_promise=False):
     """Returns an expression that converts a V8 value to a C++ value and stores it as a local value."""
-    this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes, used_as_argument=True)
+
+    # FIXME: Support union type.
+    if idl_type.is_union_type:
+        return ''
+
+    this_cpp_type = idl_type.cpp_type_args(extended_attributes=extended_attributes, raw_type=True)
 
     idl_type = idl_type.preprocessed_type
-    cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index)
+    cpp_value = v8_value_to_cpp_value(idl_type, extended_attributes, v8_value, index, isolate)
     args = [variable_name, cpp_value]
-    if idl_type.base_type == 'DOMString' and not idl_type.array_or_sequence_type:
-        macro = 'TOSTRING_VOID'
-    elif (idl_type.is_integer_type or
-          idl_type.name in ('ByteString', 'ScalarValueString')):
-        macro = 'TONATIVE_VOID_EXCEPTIONSTATE'
+    if idl_type.base_type == 'DOMString':
+        macro = 'TOSTRING_DEFAULT' if used_in_private_script else 'TOSTRING_VOID'
+    elif idl_type.may_raise_exception_on_conversion:
+        macro = 'TONATIVE_DEFAULT_EXCEPTIONSTATE' if used_in_private_script else 'TONATIVE_VOID_EXCEPTIONSTATE'
         args.append('exceptionState')
     else:
-        macro = 'TONATIVE_VOID'
+        macro = 'TONATIVE_DEFAULT' if used_in_private_script else 'TONATIVE_VOID'
+
+    if used_in_private_script:
+        args.append('false')
 
     # Macros come in several variants, to minimize expensive creation of
     # v8::TryCatch.
     suffix = ''
 
+    if return_promise:
+        suffix += '_PROMISE'
+        args.append('info')
+        if macro == 'TONATIVE_VOID_EXCEPTIONSTATE':
+            args.append('V8ScriptState::current(%s)' % isolate)
+
     if declare_variable:
         args.insert(0, this_cpp_type)
     else:
@@ -484,9 +571,7 @@
 
     return '%s(%s)' % (macro + suffix, ', '.join(args))
 
-
-IdlType.v8_value_to_local_cpp_value = v8_value_to_local_cpp_value
-IdlUnionType.v8_value_to_local_cpp_value = v8_value_to_local_cpp_value
+IdlTypeBase.v8_value_to_local_cpp_value = v8_value_to_local_cpp_value
 
 
 ################################################################################
@@ -501,8 +586,7 @@
         return IdlType('ScriptValue')
     return idl_type
 
-IdlType.preprocessed_type = property(preprocess_idl_type)
-IdlUnionType.preprocessed_type = property(preprocess_idl_type)
+IdlTypeBase.preprocessed_type = property(preprocess_idl_type)
 
 
 def preprocess_idl_type_and_value(idl_type, cpp_value, extended_attributes):
@@ -523,7 +607,7 @@
         idl_type.base_type in ['unsigned long', 'unsigned short']):
         cpp_value = cpp_value.replace('getUnsignedIntegralAttribute',
                                       'getIntegralAttribute')
-        cpp_value = 'std::max(0, %s)' % cpp_value
+        cpp_value = 'std::max(0, static_cast<int>(%s))' % cpp_value
     return idl_type, cpp_value
 
 
@@ -536,11 +620,15 @@
     """
     extended_attributes = extended_attributes or {}
 
-    # Composite types
-    array_or_sequence_type = idl_type.array_or_sequence_type
-    if array_or_sequence_type:
-        if array_or_sequence_type.is_interface_type:
-            add_includes_for_type(array_or_sequence_type)
+    # FIXME: Support union type.
+    if idl_type.is_union_type:
+        return ''
+
+    # Array or sequence types
+    native_array_element_type = idl_type.native_array_element_type
+    if native_array_element_type:
+        if native_array_element_type.is_interface_type:
+            add_includes_for_type(native_array_element_type)
         return 'array'
 
     # Simple types
@@ -550,7 +638,9 @@
         return 'int'
     if base_idl_type in CPP_UNSIGNED_TYPES:
         return 'unsigned'
-    if base_idl_type in ('DOMString', 'ByteString', 'ScalarValueString'):
+    if idl_type.is_string_type:
+        if idl_type.is_nullable:
+            return 'StringOrNull'
         if 'TreatReturnedNullStringAs' not in extended_attributes:
             return base_idl_type
         treat_returned_null_string_as = extended_attributes['TreatReturnedNullStringAs']
@@ -558,7 +648,7 @@
             return 'StringOrNull'
         if treat_returned_null_string_as == 'Undefined':
             return 'StringOrUndefined'
-        raise 'Unrecognized TreatReturnNullStringAs value: "%s"' % treat_returned_null_string_as
+        raise 'Unrecognized TreatReturnedNullStringAs value: "%s"' % treat_returned_null_string_as
     if idl_type.is_basic_type or base_idl_type == 'ScriptValue':
         return base_idl_type
 
@@ -570,7 +660,7 @@
     # Pointer type
     return 'DOMWrapper'
 
-IdlType.v8_conversion_type = v8_conversion_type
+IdlTypeBase.v8_conversion_type = v8_conversion_type
 
 
 V8_SET_RETURN_VALUE = {
@@ -580,7 +670,7 @@
     'DOMString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
     'ByteString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
     'ScalarValueString': 'v8SetReturnValueString(info, {cpp_value}, info.GetIsolate())',
-    # [TreatNullReturnValueAs]
+    # [TreatReturnedNullStringAs]
     'StringOrNull': 'v8SetReturnValueStringOrNull(info, {cpp_value}, info.GetIsolate())',
     'StringOrUndefined': 'v8SetReturnValueStringOrUndefined(info, {cpp_value}, info.GetIsolate())',
     'void': '',
@@ -632,27 +722,19 @@
 
 
 def v8_set_return_value_union(idl_type, cpp_value, extended_attributes=None, script_wrappable='', release=False, for_main_world=False):
-    """
-    release: can be either False (False for all member types) or
-             a sequence (list or tuple) of booleans (if specified individually).
-    """
+    # FIXME: Need to revisit the design of union support.
+    # http://crbug.com/240176
+    return None
 
-    return [
-        member_type.v8_set_return_value(cpp_value + str(i),
-                                        extended_attributes,
-                                        script_wrappable,
-                                        release and release[i],
-                                        for_main_world)
-            for i, member_type in
-            enumerate(idl_type.member_types)]
 
-IdlType.v8_set_return_value = v8_set_return_value
+IdlTypeBase.v8_set_return_value = v8_set_return_value
 IdlUnionType.v8_set_return_value = v8_set_return_value_union
 
 IdlType.release = property(lambda self: self.is_interface_type)
 IdlUnionType.release = property(
     lambda self: [member_type.is_interface_type
                   for member_type in self.member_types])
+IdlArrayOrSequenceType.release = False
 
 
 CPP_VALUE_TO_V8_VALUE = {
@@ -669,6 +751,9 @@
     'double': 'v8::Number::New({isolate}, {cpp_value})',
     'unrestricted double': 'v8::Number::New({isolate}, {cpp_value})',
     'void': 'v8Undefined()',
+    # [TreatReturnedNullStringAs]
+    'StringOrNull': '{cpp_value}.isNull() ? v8::Handle<v8::Value>(v8::Null({isolate})) : v8String({isolate}, {cpp_value})',
+    'StringOrUndefined': '{cpp_value}.isNull() ? v8Undefined() : v8String({isolate}, {cpp_value})',
     # Special cases
     'EventHandler': '{cpp_value} ? v8::Handle<v8::Value>(V8AbstractEventListener::cast({cpp_value})->getListenerObject(impl->executionContext())) : v8::Handle<v8::Value>(v8::Null({isolate}))',
     'ScriptValue': '{cpp_value}.v8Value()',
@@ -688,4 +773,45 @@
     statement = format_string.format(cpp_value=cpp_value, isolate=isolate, creation_context=creation_context)
     return statement
 
-IdlType.cpp_value_to_v8_value = cpp_value_to_v8_value
+IdlTypeBase.cpp_value_to_v8_value = cpp_value_to_v8_value
+
+
+def literal_cpp_value(idl_type, idl_literal):
+    """Converts an expression that is a valid C++ literal for this type."""
+    # FIXME: add validation that idl_type and idl_literal are compatible
+    literal_value = str(idl_literal)
+    if idl_type.base_type in CPP_UNSIGNED_TYPES:
+        return literal_value + 'u'
+    return literal_value
+
+IdlType.literal_cpp_value = literal_cpp_value
+
+
+################################################################################
+# Utility properties for nullable types
+################################################################################
+
+
+def cpp_type_has_null_value(idl_type):
+    # - String types (String/AtomicString) represent null as a null string,
+    #   i.e. one for which String::isNull() returns true.
+    # - Wrapper types (raw pointer or RefPtr/PassRefPtr) represent null as
+    #   a null pointer.
+    return idl_type.is_string_type or idl_type.is_wrapper_type
+
+IdlTypeBase.cpp_type_has_null_value = property(cpp_type_has_null_value)
+
+
+def is_implicit_nullable(idl_type):
+    # Nullable type where the corresponding C++ type supports a null value.
+    return idl_type.is_nullable and idl_type.cpp_type_has_null_value
+
+
+def is_explicit_nullable(idl_type):
+    # Nullable type that isn't implicit nullable (see above.) For such types,
+    # we use Nullable<T> or similar explicit ways to represent a null value.
+    return idl_type.is_nullable and not idl_type.is_implicit_nullable
+
+IdlTypeBase.is_implicit_nullable = property(is_implicit_nullable)
+IdlUnionType.is_implicit_nullable = False
+IdlTypeBase.is_explicit_nullable = property(is_explicit_nullable)
diff --git a/bindings/scripts/v8_utilities.py b/bindings/scripts/v8_utilities.py
index 8067595..4a2b46a 100644
--- a/bindings/scripts/v8_utilities.py
+++ b/bindings/scripts/v8_utilities.py
@@ -28,14 +28,14 @@
 
 """Functions shared by various parts of the code generator.
 
-Extends IdlType and IdlUnion type with |enum_validation_expression| property.
+Extends IdlTypeBase type with |enum_validation_expression| property.
 
 Design doc: http://www.chromium.org/developers/design-documents/idl-compiler
 """
 
 import re
 
-from idl_types import IdlType, IdlUnionType
+from idl_types import IdlTypeBase
 import idl_types
 from v8_globals import includes
 import v8_types
@@ -60,7 +60,7 @@
 
 def extended_attribute_value_contains(extended_attribute_value, value):
     return (extended_attribute_value and
-            value in re.split('[|&]', extended_attribute_value))
+            value in re.split('[|,]', extended_attribute_value))
 
 
 def has_extended_attribute(definition_or_member, extended_attribute_list):
@@ -74,6 +74,15 @@
             extended_attribute_value_contains(extended_attributes[name], value))
 
 
+def sorted_extended_attribute_set(definition_or_member, name):
+    extended_attributes = definition_or_member.extended_attributes
+    if name not in extended_attributes:
+        return []
+
+    attribute_values = re.split('[|,]', extended_attributes[name])
+    return sorted(attribute_values)
+
+
 ################################################################################
 # String handling
 ################################################################################
@@ -113,10 +122,12 @@
         return None
     return ' || '.join(['string == "%s"' % enum_value
                         for enum_value in idl_type.enum_values])
-IdlType.enum_validation_expression = property(enum_validation_expression)
+IdlTypeBase.enum_validation_expression = property(enum_validation_expression)
 
 
 def scoped_name(interface, definition, base_name):
+    if 'ImplementedInPrivateScript' in definition.extended_attributes:
+        return '%s::PrivateScript::%s' % (v8_class_name(interface), base_name)
     # partial interfaces are implemented as separate classes, with their members
     # implemented as static member functions
     partial_interface_implemented_as = definition.extended_attributes.get('PartialInterfaceImplementedAs')
@@ -149,7 +160,7 @@
     if log_activity and not log_activity.startswith(access_type):
         return set()
 
-    includes.add('bindings/v8/V8DOMActivityLogger.h')
+    includes.add('bindings/core/v8/V8DOMActivityLogger.h')
     if 'LogAllWorlds' in extended_attributes:
         return set(['', 'ForMainWorld'])
     return set([''])  # At minimum, include isolated worlds.
@@ -201,15 +212,21 @@
 
 
 # [Conditional]
+DELIMITER_TO_OPERATOR = {
+    '|': '||',
+    ',': '&&',
+}
+
+
 def conditional_string(definition_or_member):
     extended_attributes = definition_or_member.extended_attributes
     if 'Conditional' not in extended_attributes:
         return None
     conditional = extended_attributes['Conditional']
-    for operator in '&|':
-        if operator in conditional:
-            conditions = conditional.split(operator)
-            operator_separator = ' %s%s ' % (operator, operator)
+    for delimiter in ',|':
+        if delimiter in conditional:
+            conditions = conditional.split(delimiter)
+            operator_separator = ' %s ' % DELIMITER_TO_OPERATOR[delimiter]
             return operator_separator.join('ENABLE(%s)' % expression for expression in sorted(conditions))
     return 'ENABLE(%s)' % conditional
 
@@ -223,6 +240,48 @@
     return extended_attributes['DeprecateAs']
 
 
+# [Exposed]
+EXPOSED_EXECUTION_CONTEXT_METHOD = {
+    'DedicatedWorker': 'isDedicatedWorkerGlobalScope',
+    'ServiceWorker': 'isServiceWorkerGlobalScope',
+    'SharedWorker': 'isSharedWorkerGlobalScope',
+    'Window': 'isDocument',
+    'Worker': 'isWorkerGlobalScope',
+}
+
+
+def exposed(definition_or_member, interface):
+    exposure_set = sorted_extended_attribute_set(definition_or_member, 'Exposed')
+    if not exposure_set:
+        return None
+
+    interface_exposure_set = expanded_exposure_set_for_interface(interface)
+
+    # Methods must not be exposed to a broader scope than their interface.
+    if not set(exposure_set).issubset(interface_exposure_set):
+        raise ValueError('Interface members\' exposure sets must be a subset of the interface\'s.')
+
+    exposure_checks = []
+    for environment in exposure_set:
+        # Methods must be exposed on one of the scopes known to Blink.
+        if environment not in EXPOSED_EXECUTION_CONTEXT_METHOD:
+            raise ValueError('Values for the [Exposed] annotation must reflect to a valid exposure scope.')
+
+        exposure_checks.append('context->%s()' % EXPOSED_EXECUTION_CONTEXT_METHOD[environment])
+
+    return ' || '.join(exposure_checks)
+
+
+def expanded_exposure_set_for_interface(interface):
+    exposure_set = sorted_extended_attribute_set(interface, 'Exposed')
+
+    # "Worker" is an aggregation for the different kinds of workers.
+    if 'Worker' in exposure_set:
+        exposure_set.extend(('DedicatedWorker', 'SharedWorker', 'ServiceWorker'))
+
+    return sorted(set(exposure_set))
+
+
 # [GarbageCollected], [WillBeGarbageCollected]
 def gc_type(definition):
     extended_attributes = definition.extended_attributes
diff --git a/bindings/tests/idls/TestDictionary.idl b/bindings/tests/idls/TestDictionary.idl
new file mode 100644
index 0000000..a05f0b8
--- /dev/null
+++ b/bindings/tests/idls/TestDictionary.idl
@@ -0,0 +1,20 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+[
+    GarbageCollected,
+] dictionary TestDictionary {
+    boolean booleanMember;
+    long longMember = 1;
+    DOMString stringMember;
+    TestInterface testInterfaceMember;
+    double? doubleOrNullMember = null;
+    DOMString? stringOrNullMember = "default string value";
+    TestInterface? testInterfaceOrNullMember;
+    TestInterfaceGarbageCollected testInterfaceGarbageCollectedMember;
+    TestInterfaceGarbageCollected? testInterfaceGarbageCollectedOrNullMember;
+    TestInterfaceWillBeGarbageCollected testInterfaceWillBeGarbageCollectedMember;
+    TestInterfaceWillBeGarbageCollected? testInterfaceWillBeGarbageCollectedOrNullMember;
+    DOMString[] stringArrayMember;
+    sequence<DOMString> stringSequenceMember;
+};
diff --git a/bindings/tests/idls/TestInterface.idl b/bindings/tests/idls/TestInterface.idl
index 479b016..7dfed9a 100644
--- a/bindings/tests/idls/TestInterface.idl
+++ b/bindings/tests/idls/TestInterface.idl
@@ -39,7 +39,8 @@
     ImplementedAs=TestInterfaceImplementation,
     RuntimeEnabled=FeatureName,
     SetWrapperReferenceTo(TestInterface referencedName),
-    TypeChecking=Interface|Nullable|Unrestricted,
+    TypeChecking=Interface|Unrestricted,
+    Exposed=(Worker,Window),
 ] interface TestInterface : TestInterfaceEmpty {
     // members needed to test [ImplementedAs], as this affect attribute
     // configuration and method configuration, and [TypeChecking]
@@ -69,6 +70,23 @@
     getter DOMString (DOMString name);
     setter DOMString (DOMString name, DOMString value);
     deleter boolean (DOMString name);
+
+    [NotEnumerable] stringifier;
+
+    // Per-method [Exposed] annotation support.
+    void alwaysExposedMethod();
+    [Exposed=Worker] void workerExposedMethod();
+    [Exposed=Window] void windowExposedMethod();
+
+    static void alwaysExposedStaticMethod();
+    [Exposed=Worker] static void workerExposedStaticMethod();
+    [Exposed=Window] static void windowExposedStaticMethod();
+
+    attribute long alwaysExposedAttribute;
+    [Exposed=Worker] attribute long workerExposedAttribute;
+    [Exposed=Window] attribute long windowExposedAttribute;
+
+    [Exposed=(Window,ServiceWorker)] void windowAndServiceWorkerExposedMethod();
 };
 
 TestInterface implements TestImplements;
diff --git a/bindings/tests/idls/TestInterface2.idl b/bindings/tests/idls/TestInterface2.idl
index bf9c112..8027826 100644
--- a/bindings/tests/idls/TestInterface2.idl
+++ b/bindings/tests/idls/TestInterface2.idl
@@ -49,4 +49,6 @@
     [RaisesException] getter TestInterfaceEmpty namedItem(DOMString name);
     [RaisesException] setter DOMString setNamedItem(DOMString name, DOMString value);
     [RaisesException] deleter boolean deleteNamedItem(DOMString name);
+
+    stringifier DOMString stringifierMethod();
 };
diff --git a/bindings/tests/idls/TestInterfaceCheckSecurity.idl b/bindings/tests/idls/TestInterfaceCheckSecurity.idl
index 0d20eb9..8fac9b8 100644
--- a/bindings/tests/idls/TestInterfaceCheckSecurity.idl
+++ b/bindings/tests/idls/TestInterfaceCheckSecurity.idl
@@ -40,6 +40,5 @@
     [DoNotCheckSecurity] void doNotCheckSecurityVoidMethod();
     [DoNotCheckSecurity, DoNotCheckSignature] void doNotCheckSecurityDoNotCheckSignatureVoidMethod();
     [DoNotCheckSecurity, PerWorldBindings] void doNotCheckSecurityPerWorldBindingsVoidMethod();
-    [DoNotCheckSecurity, ReadOnly] void doNotCheckSecurityReadOnlyVoidMethod();
     [DoNotCheckSecurity, Unforgeable] void doNotCheckSecurityUnforgeableVoidMethod();
 };
diff --git a/bindings/tests/idls/TestInterfaceConstructor.idl b/bindings/tests/idls/TestInterfaceConstructor.idl
index 102754e..f82e44c 100644
--- a/bindings/tests/idls/TestInterfaceConstructor.idl
+++ b/bindings/tests/idls/TestInterfaceConstructor.idl
@@ -40,7 +40,10 @@
         sequence<Dictionary> sequenceDictionaryArg,
         optional Dictionary optionalDictionaryArg,
         [Default=Undefined] optional TestInterfaceEmpty optionalTestInterfaceEmptyArg),
-    ConstructorCallWith=ExecutionContext&Document,
+    Constructor(DOMString arg, optional DOMString optArg),
+    Constructor(DOMString arg, DOMString arg2, DOMString arg3),
+    NamedConstructor=Audio(DOMString arg, optional DOMString optArg),
+    ConstructorCallWith=(ExecutionContext,Document),
     MeasureAs=TestFeature,
     RaisesException=Constructor,
 ] interface TestInterfaceConstructor {
diff --git a/bindings/tests/idls/TestInterfaceConstructor4.idl b/bindings/tests/idls/TestInterfaceConstructor4.idl
new file mode 100644
index 0000000..246f551
--- /dev/null
+++ b/bindings/tests/idls/TestInterfaceConstructor4.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Test for overload resolution for the string-like ScalarValueString
+// argument.
+[
+    Constructor(TestInterfaceConstructor4 testInterface4Arg),
+    Constructor(ScalarValueString scalarValueStringArg),
+] interface TestInterfaceConstructor4 {
+};
diff --git a/bindings/tests/idls/TestNode.idl b/bindings/tests/idls/TestNode.idl
index 301f7f0..0c767ee 100644
--- a/bindings/tests/idls/TestNode.idl
+++ b/bindings/tests/idls/TestNode.idl
@@ -24,5 +24,6 @@
     // These attributes are needed to test [PutForwards] in TestObject.idl.
     attribute DOMString href;
     [RaisesException=Setter] attribute DOMString hrefThrows;
-    [SetterCallWith=ActiveWindow&FirstWindow] attribute DOMString hrefCallWith;
+    [SetterCallWith=(ExecutionContext,ActiveWindow,FirstWindow)] attribute DOMString hrefCallWith;
+    attribute ByteString hrefByteString;
 };
diff --git a/bindings/tests/idls/TestObject.idl b/bindings/tests/idls/TestObject.idl
index 8328c86..e76b5b9 100644
--- a/bindings/tests/idls/TestObject.idl
+++ b/bindings/tests/idls/TestObject.idl
@@ -33,16 +33,6 @@
 callback VoidCallbackFunction = void ();
 callback AnyCallbackFunctionOptionalAnyArg = any (optional any optionalAnyArg);
 
-dictionary TestDict {
-    boolean booleanMember;
-    long longMember1 = 1;
-};
-
-dictionary TestDictDerived : TestDict {
-    unsigned short unsignedShortMember;
-    float floatMember4 = 4.0;
-};
-
 // No extended attributes on the interface; those go in TestInterface.idl
 interface TestObject {
     // Constants
@@ -61,12 +51,21 @@
     const unsigned short CONST_VALUE_16 = -010;
     const unsigned short CONST_VALUE_16 = -0x1A;
     const unsigned short CONST_VALUE_17 = -0X1a;
+    const double CONST_VALUE_18 = 0.123;
+    const double CONST_VALUE_19 = 4e9;
+    const double CONST_VALUE_20 = 3.4e5;
+    const double CONST_VALUE_21 = -1.3;
+    const double CONST_VALUE_22 = -4e-9;
+    const double CONST_VALUE_23 = .123;
+    const double CONST_VALUE_24 = 5E+4;
+    const float CONST_VALUE_25 = 1;
 
     // Extended attributes
     [DeprecateAs=Constant] const short DEPRECATED_CONSTANT = 1;
     [RuntimeEnabled=FeatureName] const short FEATURE_ENABLED_CONST = 1;
     [Reflect=CONST_IMPL] const short CONST_JAVASCRIPT = 1;
 
+    stringifier attribute DOMString stringifierAttribute;
 
     // Attributes
     //
@@ -162,12 +161,13 @@
     [LogActivity=SetterOnly, LogAllWorlds] attribute long activityLoggingSetterForAllWorldsLongAttribute;
     [CachedAttribute=isValueDirty] attribute any cachedAttributeAnyAttribute;
     [CachedAttribute=isArrayDirty] attribute DOMString[] cachedArrayAttribute;
+    [CachedAttribute=isStringDirty] attribute DOMString? cachedStringOrNoneAttribute;
     [CallWith=ExecutionContext] attribute any callWithExecutionContextAnyAttribute;
     [CallWith=ScriptState] attribute any callWithScriptStateAnyAttribute;
     [CallWith=ExecutionContext|ScriptState] attribute any callWithExecutionContextAndScriptStateAnyAttribute;
     [CheckSecurity=Node] readonly attribute Document checkSecurityForNodeReadonlyDocumentAttribute; // All uses are read only
     [Conditional=CONDITION] attribute long conditionalLongAttribute;
-    [Conditional=CONDITION_1&CONDITION_2] attribute long conditionalAndLongAttribute;
+    [Conditional=(CONDITION_1,CONDITION_2)] attribute long conditionalAndLongAttribute;
     [Conditional=CONDITION_1|CONDITION_2] attribute long conditionalOrLongAttribute;
     // Constructors: FIXME: replace suffix with [ConstructorAttribute]
     attribute TestInterfaceEmptyConstructor testInterfaceEmptyConstructorAttribute;
@@ -197,7 +197,9 @@
     [PutForwards=href] readonly attribute TestNode location;
     [PutForwards=hrefThrows] readonly attribute TestNode locationWithException;
     [PutForwards=hrefCallWith] readonly attribute TestNode locationWithCallWith;
+    [PutForwards=hrefByteString] readonly attribute TestNode locationByteString;
     [PerWorldBindings, PutForwards=href] readonly attribute TestNode locationWithPerWorldBindings;
+    [TypeChecking=Interface, PutForwards=href] readonly attribute TestNode locationTypeCheckingInterface;
     [PutForwards=attr1] readonly attribute TestInterfaceGarbageCollected locationGarbageCollected;
     [PutForwards=attr1] readonly attribute TestInterfaceWillBeGarbageCollected locationWillBeGarbageCollected;
     [RaisesException] attribute long raisesExceptionLongAttribute;
@@ -234,23 +236,24 @@
     [RuntimeEnabled=FeatureName] attribute long runtimeEnabledLongAttribute;
     [PerContextEnabled=FeatureName, RuntimeEnabled=FeatureName] attribute long perContextEnabledRuntimeEnabledLongAttribute;
     [Conditional=CONDITION, RuntimeEnabled=FeatureName] attribute long conditionalRuntimeEnabledLongAttribute;
-    [SetterCallWith=ActiveWindow&FirstWindow] attribute DOMString setterCallWithActiveWindowAndFirstWindowStringAttribute;
+    [SetterCallWith=(ActiveWindow,FirstWindow)] attribute DOMString setterCallWithActiveWindowAndFirstWindowStringAttribute;
     [SetterCallWith=ExecutionContext] attribute DOMString setterCallWithExecutionContextStringAttribute;
+    [TreatNullAs=EmptyString] attribute DOMString treatNullAsEmptyStringStringAttribute;
     [TreatNullAs=NullString] attribute DOMString treatNullAsNullStringStringAttribute;
     [TreatReturnedNullStringAs=Null] attribute DOMString treatReturnedNullStringAsNullStringAttribute;
     [TreatReturnedNullStringAs=Undefined] attribute DOMString treatReturnedNullStringAsUndefinedStringAttribute;
+    [TreatReturnedNullStringAs=Undefined, CachedAttribute=isStringDirty] attribute DOMString cachedTreatReturnedNullStringAsUndefinedStringAttribute;
     [TreatReturnedNullStringAs=Null] attribute ByteString treatReturnedNullStringAsNullByteStringAttribute;
     [TreatReturnedNullStringAs=Undefined] attribute ByteString treatReturnedNullStringAsUndefinedByteStringAttribute;
     [TreatReturnedNullStringAs=Null] attribute ScalarValueString treatReturnedNullStringAsNullScalarValueStringAttribute;
     [TreatReturnedNullStringAs=Undefined] attribute ScalarValueString treatReturnedNullStringAsUndefinedScalarValueStringAttribute;
-    [TypeChecking=Interface|Nullable] attribute float typeCheckingInterfaceNullableStringFloatAttribute; // nop for non-interface types
+    [TypeChecking=Interface] attribute float typeCheckingInterfaceFloatAttribute; // nop for non-interface types
     [TypeChecking=Interface] attribute TestInterface typeCheckingInterfaceTestInterfaceAttribute;
-    [TypeChecking=Nullable] attribute TestInterface? typeCheckingNullableTestInterfaceOrNullAttribute;
-    [TypeChecking=Interface|Nullable] attribute TestInterface? typeCheckingInterfaceNullableTestInterfaceOrNullAttribute;
+    [TypeChecking=Interface] attribute TestInterface? typeCheckingInterfaceTestInterfaceOrNullAttribute;
     [Reflect, URL] attribute DOMString urlStringAttribute;
     [Reflect=reflectUrlAttribute, URL] attribute DOMString urlStringAttribute;
     [Unforgeable] attribute long unforgeableLongAttribute;
-    [LogActivity=SetterOnly, LogPreviousValue] attribute long activityLoggingSetterOnlyLogPreviousValueAttribute;
+    [LogActivity=SetterOnly, LogPreviousValue] attribute DOMString? activityLoggingSetterOnlyLogPreviousValueAttribute;
     [LogActivity, LogPreviousValue] attribute TestInterfaceEmpty activityLoggingLogPreviousValueInterfaceAttribute;
 
 
@@ -347,6 +350,10 @@
     void voidMethodSequenceStringArg(sequence<DOMString> stringSequenceArg);
     void voidMethodSequenceTestInterfaceEmptyArg(sequence<TestInterfaceEmpty> testInterfaceEmptySequenceArg);
     // Nullable types
+    long? nullableLongMethod();
+    DOMString? nullableStringMethod();
+    TestInterface? nullableTestInterfaceMethod();
+    sequence<long>? nullableLongSequenceMethod();
     // Currently only used on interface type arguments
     void voidMethodTestInterfaceEmptyOrNullArg(TestInterfaceEmpty? nullableTestInterfaceEmptyArg);
     // Callback interface types
@@ -359,11 +366,11 @@
     // Exceptional types
     Dictionary dictionaryMethod();
     NodeFilter nodeFilterMethod();
-    Promise promiseMethod();
+    Promise promiseMethod(long arg1, Dictionary arg2, DOMString arg3, DOMString... variadic);
+    Promise promiseMethodWithoutExceptionState(Dictionary arg1);
     SerializedScriptValue serializedScriptValueMethod();
     XPathNSResolver xPathNSResolverMethod();
     void voidMethodDictionaryArg(Dictionary dictionaryArg);
-    void voidMethodEventListenerArg(EventListener eventListenerArg);
     void voidMethodNodeFilterArg(NodeFilter nodeFilterArg);
     void voidMethodPromiseArg(Promise promiseArg);
     void voidMethodSerializedScriptValueArg(SerializedScriptValue serializedScriptValueArg);
@@ -387,12 +394,15 @@
     void voidMethodOptionalDictionaryArg(optional Dictionary optionalDictionaryArg);
 
     // Optional arguments with defaults
+    void voidMethodDefaultByteStringArg(optional ByteString defaultByteStringArg = "foo");
     void voidMethodDefaultStringArg(optional DOMString defaultStringArg = "foo");
-    void voidMethodDefaultNullStringArg(optional DOMString defaultStringArg = null);
-    void voidMethodDefaultLongArg(optional long defaultLongArg = 10);
+    void voidMethodDefaultIntegerArgs(optional long defaultLongArg = 10,
+                                      optional long long defaultLongLongArg = -10,
+                                      optional unsigned long defaultUnsignedArg = 0xFFFFFFFF);
     void voidMethodDefaultDoubleArg(optional double defaultDoubleArg = 0.5);
     void voidMethodDefaultTrueBooleanArg(optional boolean defaultBooleanArg = true);
     void voidMethodDefaultFalseBooleanArg(optional boolean defaultBooleanArg = false);
+    void voidMethodDefaultNullableByteStringArg(optional ByteString? defaultStringArg = null);
     void voidMethodDefaultNullableStringArg(optional DOMString? defaultStringArg = null);
     void voidMethodDefaultNullableTestInterfaceArg(optional TestInterface? defaultTestInterfaceArg = null);
 
@@ -442,6 +452,7 @@
     // [EnforceRange]
     void voidMethodEnforceRangeLongArg([EnforceRange] long enforceRangeLongArg);
     // [TreatNullAs], [TreatUndefinedAs]
+    void voidMethodTreatNullAsEmptyStringStringArg([TreatNullAs=EmptyString] DOMString treatNullAsEmptyStringStringArg);
     void voidMethodTreatNullAsNullStringStringArg([TreatNullAs=NullString] DOMString treatNullAsNullStringStringArg);
     void voidMethodTreatNullAsNullStringTreatUndefinedAsNullStringStringArg([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString treatNullAsNullStringStringArg);
 
@@ -450,14 +461,14 @@
     [CallWith=ExecutionContext] void callWithExecutionContextVoidMethod();
     [CallWith=ScriptState] void callWithScriptStateVoidMethod();
     [CallWith=ScriptState] long callWithScriptStateLongMethod();
-    [CallWith=ScriptState&ExecutionContext] void callWithScriptStateExecutionContextVoidMethod();
-    [CallWith=ScriptState&ScriptArguments] void callWithScriptStateScriptArgumentsVoidMethod();
-    [CallWith=ScriptState&ScriptArguments] void callWithScriptStateScriptArgumentsVoidMethodOptionalBooleanArg(optional boolean optionalBooleanArg);
+    [CallWith=(ScriptState,ExecutionContext)] void callWithScriptStateExecutionContextVoidMethod();
+    [CallWith=(ScriptState,ScriptArguments)] void callWithScriptStateScriptArgumentsVoidMethod();
+    [CallWith=(ScriptState,ScriptArguments)] void callWithScriptStateScriptArgumentsVoidMethodOptionalBooleanArg(optional boolean optionalBooleanArg);
     [CallWith=ActiveWindow] void callWithActiveWindow();
-    [CallWith=ActiveWindow&FirstWindow] void callWithActiveWindowScriptWindow();
+    [CallWith=(ActiveWindow,FirstWindow)] void callWithActiveWindowScriptWindow();
     [CheckSecurity=Node] void checkSecurityForNodeVoidMethod();
     [Conditional=CONDITION] void conditionalConditionVoidMethod();
-    [Conditional=CONDITION_1&CONDITION_2] void conditionalCondition1AndCondition2VoidMethod();
+    [Conditional=(CONDITION_1,CONDITION_2)] void conditionalCondition1AndCondition2VoidMethod();
     [Conditional=CONDITION] static void conditionalConditionStaticVoidMethod();
     [Custom] void customVoidMethod();
     [Conditional=CONDITION, Custom] void conditionalConditionCustomVoidMethod();
@@ -493,8 +504,6 @@
     [RaisesException] void raisesExceptionVoidMethodOptionalTestCallbackInterfaceArg(optional TestCallbackInterface optionalTestCallbackInterfaceArg);
     [RaisesException] TestInterfaceEmpty raisesExceptionTestInterfaceEmptyVoidMethod();
     [CallWith=ExecutionContext, RaisesException] void callWithExecutionContextRaisesExceptionVoidMethodLongArg(long longArg);
-    [ReadOnly] void readOnlyVoidMethod();
-    [NotEnumerable, ReadOnly] void notEnumerableReadOnlyVoidMethod();
     [RuntimeEnabled=FeatureName] void runtimeEnabledVoidMethod();
     [PerWorldBindings, RuntimeEnabled=FeatureName] void perWorldBindingsRuntimeEnabledVoidMethod();
     [RuntimeEnabled=FeatureName] void runtimeEnabledOverloadedVoidMethod(DOMString stringArg);
@@ -509,8 +518,7 @@
     [TreatReturnedNullStringAs=Null] ScalarValueString treatReturnedNullStringAsNullScalarValueStringMethod();
     [TreatReturnedNullStringAs=Undefined] ScalarValueString treatReturnedNullStringAsUndefinedScalarValueStringMethod();
     [TypeChecking=Interface] void typeCheckingInterfaceVoidMethodTestInterfaceEmptyArg(TestInterfaceEmpty testInterfaceEmptyArg);
-    [TypeChecking=Nullable] void typeCheckingNullableVoidMethodTestInterfaceEmptyOrNullArg(TestInterfaceEmpty? testInterfaceEmptyOrNullArg);
-    [TypeChecking=Interface|Nullable] void typeCheckingInterfaceNullableVoidMethodTestInterfaceEmptyOrNullArg(TestInterfaceEmpty? testInterfaceEmptyOrNullArg);
+    [TypeChecking=Interface] void typeCheckingInterfaceVoidMethodTestInterfaceEmptyVariadicArg(TestInterfaceEmpty... testInterfaceEmptyArg);
     [TypeChecking=Unrestricted] void typeCheckingUnrestrictedVoidMethodFloatArgDoubleArg(float floatArg, double doubleArg);
     [Unforgeable] void unforgeableVoidMethod();
     void voidMethodTestInterfaceGarbageCollectedSequenceArg(sequence<TestInterfaceGarbageCollected> testInterfaceGarbageCollectedSequenceArg);
@@ -525,4 +533,20 @@
     attribute TestInterfaceGarbageCollected? testInterfaceGarbageCollectedOrNullAttribute; // [GarbageCollected]
     attribute TestInterfaceWillBeGarbageCollected testInterfaceWillBeGarbageCollectedAttribute; // [WillBeGarbageCollected]
     attribute TestInterfaceWillBeGarbageCollected? testInterfaceWillBeGarbageCollectedOrNullAttribute; // [WillBeGarbageCollected]
+
+    // Private scripts
+    [ImplementedInPrivateScript] void voidMethodImplementedInPrivateScript();
+    [ImplementedInPrivateScript] short shortMethodImplementedInPrivateScript();
+    [ImplementedInPrivateScript] short shortMethodWithShortArgumentImplementedInPrivateScript(short value);
+    [ImplementedInPrivateScript] DOMString stringMethodWithStringArgumentImplementedInPrivateScript(DOMString value);
+    [ImplementedInPrivateScript] Node nodeMethodWithNodeArgumentImplementedInPrivateScript(Node value);
+    [ImplementedInPrivateScript] Node nodeMethodWithVariousArgumentsImplementedInPrivateScript(Document document, Node node, short value1, double value2, DOMString string);
+    [ImplementedInPrivateScript] readonly attribute short readonlyShortAttribute;
+    [ImplementedInPrivateScript] attribute short shortAttribute;
+    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
+    [ImplementedInPrivateScript] attribute Node nodeAttribute;
+    [OnlyExposedToPrivateScript] short methodImplementedInCPPForPrivateScriptOnly(short value1, short value2);
+    [OnlyExposedToPrivateScript] attribute DOMString attributeImplementedInCPPForPrivateScriptOnly;
+    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] short methodForPrivateScriptOnly(short value1, short value2);
+    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString attributeForPrivateScriptOnly;
 };
diff --git a/bindings/tests/idls/TestPartialInterface.idl b/bindings/tests/idls/TestPartialInterface.idl
index c8b0ddc..2981f87 100644
--- a/bindings/tests/idls/TestPartialInterface.idl
+++ b/bindings/tests/idls/TestPartialInterface.idl
@@ -53,4 +53,7 @@
 
     attribute PartialEnumType partialPartialEnumTypeAttribute;
     void partialVoidMethodPartialCallbackTypeArg(PartialCallbackType partialCallbackTypeArg);
+
+    [ImplementedInPrivateScript] short shortMethodWithShortArgumentImplementedInPrivateScript(short value);
+    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
 };
diff --git a/bindings/tests/idls/TestSpecialOperations.idl b/bindings/tests/idls/TestSpecialOperations.idl
index 2e26771..0f3c2de 100644
--- a/bindings/tests/idls/TestSpecialOperations.idl
+++ b/bindings/tests/idls/TestSpecialOperations.idl
@@ -5,8 +5,8 @@
 [
     OverrideBuiltins,
 ] interface TestSpecialOperations {
-    // [ImplementedAs], [TypeChecking=Interface|Nullable], union return, nullability
+    // [ImplementedAs], [TypeChecking=Interface], union return, nullability
     // [OverrideBuiltins] affects named property operations
     [ImplementedAs=getItem] getter (Node or NodeList) namedItem(DOMString name);
-    [TypeChecking=Interface|Nullable] setter Node (DOMString name, Node? value);
+    [TypeChecking=Interface] setter Node (DOMString name, Node? value);
 };
diff --git a/bindings/tests/idls/TestTypedefs.idl b/bindings/tests/idls/TestTypedefs.idl
index 373a875..996f1c1 100644
--- a/bindings/tests/idls/TestTypedefs.idl
+++ b/bindings/tests/idls/TestTypedefs.idl
@@ -41,6 +41,7 @@
 typedef TestCallbackInterface      TestCallbackInterfaceType;
 typedef TestInterfaceConstructor   T;
 typedef (TestInterface or TestInterfaceEmpty) TestInterfaceOrTestInterfaceEmpty;
+typedef (DOMString or double) DOMStringOrDouble;
 
 [
     Constructor(String stringArg),
@@ -55,6 +56,7 @@
 
     ULongLong uLongLongMethodTestInterfaceEmptyTypeSequenceArg(sequence<TestInterfaceEmptyType> testInterfaceEmptyTypeSequenceArg);
     TestInterfaceOrTestInterfaceEmpty testInterfaceOrTestInterfaceEmptyMethod();
+    DOMStringOrDouble domStringOrDoubleMethod();
 
     ArrayOfStrings arrayOfStringsMethodArrayOfStringsArg(ArrayOfStrings arrayOfStringsArg);
     String[] stringArrayMethodStringArrayArg(String[] stringArrayArg);
diff --git a/core/README b/core/README
index 53c5767..1a601a7 100644
--- a/core/README
+++ b/core/README
@@ -6,4 +6,4 @@
 
 The current version corresponds to:
 URL: http://src.chromium.org/blink/branches/dart/dartium
-Current revision: 181823
+Current revision: 182210
diff --git a/core/animation/AnimationPlayer.idl b/core/animation/AnimationPlayer.idl
index 8dc0d41..bc38234 100644
--- a/core/animation/AnimationPlayer.idl
+++ b/core/animation/AnimationPlayer.idl
@@ -37,7 +37,6 @@
     [RuntimeEnabled=WebAnimationsAPI]          attribute AnimationNode? source;
     [RuntimeEnabled=WebAnimationsAPI]          attribute double     startTime;
     [RuntimeEnabled=WebAnimationsAPI]          attribute double     currentTime;
-    [RuntimeEnabled=WebAnimationsAPI] readonly attribute double     timeLag;
     [RuntimeEnabled=WebAnimationsAPI]          attribute double     playbackRate;
     [RuntimeEnabled=WebAnimationsAPI] readonly attribute boolean    paused;
     [RuntimeEnabled=WebAnimationsAPI] readonly attribute boolean    finished;
diff --git a/core/animation/AnimationTimeline.idl b/core/animation/AnimationTimeline.idl
index b2c627a..31b1648 100644
--- a/core/animation/AnimationTimeline.idl
+++ b/core/animation/AnimationTimeline.idl
@@ -8,4 +8,5 @@
 ] interface AnimationTimeline {
     readonly attribute double? currentTime;
     AnimationPlayer play(AnimationNode source);
+    sequence<AnimationPlayer> getAnimationPlayers();
 };
diff --git a/core/animation/ElementAnimation.idl b/core/animation/ElementAnimation.idl
index f524939..ccfbca7 100644
--- a/core/animation/ElementAnimation.idl
+++ b/core/animation/ElementAnimation.idl
@@ -36,4 +36,5 @@
     // FIXME: needs support for union types http://crbug.com/240176
     // AnimationPlayer animate((AnimationEffect or sequence<Dictionary>)? effect, optional (double or Dictionary) timing);
     [Custom, RaisesException] AnimationPlayer animate(object effect, optional object timing);
+    [RuntimeEnabled=WebAnimationsAPI] sequence<AnimationPlayer> getAnimationPlayers();
 };
diff --git a/core/animation/Timing.idl b/core/animation/Timing.idl
index 49e93e1..1bb3198 100644
--- a/core/animation/Timing.idl
+++ b/core/animation/Timing.idl
@@ -21,7 +21,7 @@
     // FIXME: If the user calls animation.specified.duration = "" (empty string) then duration
     // gets set to 0 (This is correct behavior for IDL). Correct result is for duration to
     // be set to 'auto'.
-    [TypeChecking=Interface|Nullable, ImplementedAs=setDuration] setter double (DOMString name, double duration);
+    [TypeChecking=Interface, ImplementedAs=setDuration] setter double (DOMString name, double duration);
 
     attribute double playbackRate;
     attribute DOMString direction;
diff --git a/core/clipboard/DataTransfer.idl b/core/clipboard/DataTransfer.idl
index 497bfdf..5448d01 100644
--- a/core/clipboard/DataTransfer.idl
+++ b/core/clipboard/DataTransfer.idl
@@ -27,7 +27,6 @@
  */
 
 [
-    ImplementedAs=Clipboard,
     WillBeGarbageCollected
 ] interface DataTransfer {
              [TreatReturnedNullStringAs=Undefined] attribute DOMString dropEffect;
@@ -37,7 +36,7 @@
 
     void clearData(optional DOMString type);
     DOMString getData(DOMString type);
-    boolean setData(DOMString type, DOMString data);
+    void setData(DOMString type, DOMString data);
     [RaisesException] void setDragImage(Element image, long x, long y);
 
     readonly attribute DataTransferItemList items;
diff --git a/core/css/CSSImportRule.idl b/core/css/CSSImportRule.idl
index d1d76ab..f56ef9f 100644
--- a/core/css/CSSImportRule.idl
+++ b/core/css/CSSImportRule.idl
@@ -20,7 +20,7 @@
 
 // Introduced in DOM Level 2:
 interface CSSImportRule : CSSRule {
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString href;
+    readonly attribute DOMString? href;
     readonly attribute MediaList media;
     readonly attribute CSSStyleSheet styleSheet;
 };
diff --git a/core/css/CSSStyleDeclaration.idl b/core/css/CSSStyleDeclaration.idl
index 1fc7e9c..45127b6 100644
--- a/core/css/CSSStyleDeclaration.idl
+++ b/core/css/CSSStyleDeclaration.idl
@@ -23,19 +23,19 @@
     DependentLifetime,
     WillBeGarbageCollected
 ] interface CSSStyleDeclaration {
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, RaisesException=Setter] attribute DOMString        cssText;
+    [RaisesException=Setter] attribute DOMString?       cssText;
 
-    [TreatReturnedNullStringAs=Null] DOMString          getPropertyValue([Default=Undefined] optional DOMString propertyName);
-    [TreatReturnedNullStringAs=Null, RaisesException] DOMString          removeProperty([Default=Undefined] optional DOMString propertyName);
-    [TreatReturnedNullStringAs=Null] DOMString          getPropertyPriority([Default=Undefined] optional DOMString propertyName);
-     [RaisesException] void setProperty([Default=Undefined] optional DOMString propertyName,
-                                    [TreatNullAs=NullString,Default=Undefined] optional DOMString value,
-                                    [TreatNullAs=NullString] optional DOMString priority = null);
+    DOMString?          getPropertyValue([Default=Undefined] optional DOMString propertyName);
+    [RaisesException] DOMString?          removeProperty([Default=Undefined] optional DOMString propertyName);
+    DOMString?          getPropertyPriority([Default=Undefined] optional DOMString propertyName);
+    [RaisesException] void setProperty([Default=Undefined] optional DOMString propertyName,
+                                       [Default=Undefined] optional DOMString? value,
+                                       optional DOMString? priority = null);
 
     readonly attribute unsigned long    length;
     getter DOMString          item([Default=Undefined] optional unsigned long index);
     [Custom=PropertyGetter|PropertyEnumerator|PropertyQuery] getter (DOMString or float) (DOMString name);
-    [Custom] setter void (DOMString propertyName, [TreatNullAs=NullString] DOMString propertyValue);
+    [Custom] setter void (DOMString propertyName, DOMString? propertyValue);
     readonly attribute CSSRule          parentRule;
 
     // Deprecated as of 2003: http://lists.w3.org/Archives/Public/www-style/2003Oct/0347.html
diff --git a/core/css/CSSValue.idl b/core/css/CSSValue.idl
index 145010b..7218639 100644
--- a/core/css/CSSValue.idl
+++ b/core/css/CSSValue.idl
@@ -30,7 +30,7 @@
     const unsigned short CSS_VALUE_LIST      = 2;
     const unsigned short CSS_CUSTOM          = 3;
 
-             [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, RaisesException=Setter] attribute DOMString cssText;
+    [RaisesException=Setter] attribute DOMString? cssText;
 
     readonly attribute unsigned short cssValueType;
 
diff --git a/core/css/CSSValueList.idl b/core/css/CSSValueList.idl
index b44fcac..04ad96f 100644
--- a/core/css/CSSValueList.idl
+++ b/core/css/CSSValueList.idl
@@ -27,6 +27,6 @@
 [
 ] interface CSSValueList : CSSValue {
     readonly attribute unsigned long    length;
-    getter CSSValue           item(unsigned long index);
+    [ImplementedAs=itemWithBoundsCheck] getter CSSValue item(unsigned long index);
 };
 
diff --git a/core/css/FontFace.idl b/core/css/FontFace.idl
index 77d12b2..ef915f0 100644
--- a/core/css/FontFace.idl
+++ b/core/css/FontFace.idl
@@ -43,7 +43,6 @@
     Constructor(DOMString family, ArrayBuffer source, optional Dictionary descriptors),
     Constructor(DOMString family, ArrayBufferView source, optional Dictionary descriptors),
     ConstructorCallWith=ExecutionContext,
-    RaisesException=Constructor,
     RuntimeEnabled=FontLoadEvents,
     WillBeGarbageCollected,
 ] interface FontFace {
diff --git a/core/css/CSSFontFaceLoadEvent.idl b/core/css/FontFaceSetLoadEvent.idl
similarity index 97%
rename from core/css/CSSFontFaceLoadEvent.idl
rename to core/css/FontFaceSetLoadEvent.idl
index b77706c..455ad6b 100644
--- a/core/css/CSSFontFaceLoadEvent.idl
+++ b/core/css/FontFaceSetLoadEvent.idl
@@ -32,6 +32,6 @@
 [
     NoInterfaceObject,
     RuntimeEnabled=FontLoadEvents,
-] interface CSSFontFaceLoadEvent : Event {
+] interface FontFaceSetLoadEvent : Event {
     readonly attribute FontFace[] fontfaces;
 };
diff --git a/core/css/MediaList.idl b/core/css/MediaList.idl
index 8db9886..cae0768 100644
--- a/core/css/MediaList.idl
+++ b/core/css/MediaList.idl
@@ -28,7 +28,7 @@
     WillBeGarbageCollected
 ] interface MediaList {
 
-    [TreatNullAs=NullString, TreatReturnedNullStringAs=Null] attribute DOMString mediaText;
+             attribute DOMString? mediaText;
     readonly attribute unsigned long length;
 
     [TreatReturnedNullStringAs=Null] getter DOMString item(unsigned long index);
diff --git a/core/css/MediaQueryList.idl b/core/css/MediaQueryList.idl
index c60c692..7b8b77b 100644
--- a/core/css/MediaQueryList.idl
+++ b/core/css/MediaQueryList.idl
@@ -17,6 +17,7 @@
  *  Boston, MA 02110-1301, USA.
  */
 [
+    ActiveDOMObject,
     NoInterfaceObject,
     WillBeGarbageCollected
 ] interface MediaQueryList {
diff --git a/core/css/StyleSheet.idl b/core/css/StyleSheet.idl
index ed83f14..c35b9a5 100644
--- a/core/css/StyleSheet.idl
+++ b/core/css/StyleSheet.idl
@@ -24,12 +24,12 @@
     SetWrapperReferenceFrom=ownerNode,
     WillBeGarbageCollected
 ] interface StyleSheet {
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString        type;
+    readonly attribute DOMString?       type;
              attribute boolean          disabled;
     readonly attribute Node             ownerNode;
     readonly attribute StyleSheet       parentStyleSheet;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString        href;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString        title;
+    readonly attribute DOMString?       href;
+    readonly attribute DOMString?       title;
     readonly attribute MediaList        media;
 };
 
diff --git a/core/css/WebKitCSSMatrix.idl b/core/css/WebKitCSSMatrix.idl
index 08ee797..8f2dc55 100644
--- a/core/css/WebKitCSSMatrix.idl
+++ b/core/css/WebKitCSSMatrix.idl
@@ -100,6 +100,6 @@
     // Passing a NaN will use a value of 0.
     [Immutable] WebKitCSSMatrix skewY([Default=Undefined] optional double angle);
 
-    [NotEnumerable] DOMString toString();
+    [NotEnumerable] stringifier;
 };
 
diff --git a/core/dom/Attr.idl b/core/dom/Attr.idl
index 9c1fb6c..5c22a79 100644
--- a/core/dom/Attr.idl
+++ b/core/dom/Attr.idl
@@ -22,13 +22,13 @@
 
     // DOM Level 1
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString name;
+    readonly attribute DOMString? name;
 
     [MeasureAs=AttributeSpecified] readonly attribute boolean specified;
 
-    [ImplementedAs=valueForBindings, TreatReturnedNullStringAs=Null, TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString value;
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, DeprecateAs=AttrNodeValue, ImplementedAs=valueForBindings] attribute DOMString nodeValue;
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, DeprecateAs=AttrTextContent, ImplementedAs=valueForBindings] attribute DOMString textContent;
+    [ImplementedAs=valueForBindings, CustomElementCallbacks] attribute DOMString? value;
+    [DeprecateAs=AttrNodeValue, ImplementedAs=valueForBindings] attribute DOMString? nodeValue;
+    [DeprecateAs=AttrTextContent, ImplementedAs=valueForBindings] attribute DOMString? textContent;
 
     // DOM Level 2
 
@@ -36,8 +36,8 @@
 
     // DOM 4
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString prefix;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString namespaceURI;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString localName;
+    readonly attribute DOMString? prefix;
+    readonly attribute DOMString? namespaceURI;
+    readonly attribute DOMString? localName;
 };
 
diff --git a/core/dom/CharacterData.idl b/core/dom/CharacterData.idl
index 10972ba..7132d6d 100644
--- a/core/dom/CharacterData.idl
+++ b/core/dom/CharacterData.idl
@@ -23,7 +23,7 @@
 
     readonly attribute unsigned long length;
 
-    [TreatReturnedNullStringAs=Null, RaisesException] DOMString substringData(unsigned long offset, unsigned long length);
+    [RaisesException] DOMString? substringData(unsigned long offset, unsigned long length);
 
     void appendData(DOMString data);
     [RaisesException] void insertData(unsigned long offset, DOMString data);
diff --git a/core/dom/Comment.idl b/core/dom/Comment.idl
index 3af73b2..e7fff28 100644
--- a/core/dom/Comment.idl
+++ b/core/dom/Comment.idl
@@ -18,7 +18,7 @@
  */
 
 [
-    Constructor(optional DOMString data = null),
+    Constructor(optional DOMString data = ""),
     ConstructorCallWith=Document,
 ] interface Comment : CharacterData {
 };
diff --git a/core/dom/DOMImplementation.idl b/core/dom/DOMImplementation.idl
index 472d1b0..d210529 100644
--- a/core/dom/DOMImplementation.idl
+++ b/core/dom/DOMImplementation.idl
@@ -26,15 +26,15 @@
     // DOM Level 1
 
     [ImplementedAs=hasFeatureForBindings, MeasureAs=DOMImplementationHasFeature]
-    boolean hasFeature(DOMString feature, [TreatNullAs=NullString] DOMString version);
+    boolean hasFeature(DOMString feature, DOMString? version);
 
     // DOM Level 2
 
     [RaisesException] DocumentType createDocumentType(DOMString qualifiedName,
                                                       DOMString publicId,
                                                       DOMString systemId);
-    [RaisesException] XMLDocument createDocument([TreatNullAs=NullString] DOMString namespaceURI,
-                                                 [TreatNullAs=NullString] DOMString qualifiedName,
+    [RaisesException] XMLDocument createDocument(DOMString? namespaceURI,
+                                                 DOMString? qualifiedName,
                                                  [Default=Undefined] optional DocumentType doctype);
 
     // HTMLDOMImplementation interface from DOM Level 2 HTML
diff --git a/core/dom/DOMMatrix.idl b/core/dom/DOMMatrix.idl
new file mode 100644
index 0000000..c6497e5
--- /dev/null
+++ b/core/dom/DOMMatrix.idl
@@ -0,0 +1,37 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    Constructor,
+    Constructor(DOMMatrixReadOnly other),
+    // FIXME: Should implement more constructors (See: crbug.com/388780)
+    RuntimeEnabled=GeometryInterfaces,
+] interface DOMMatrix : DOMMatrixReadOnly {
+    // These attributes are simple aliases for certain elements of the 4x4 matrix
+    attribute unrestricted double a;
+    attribute unrestricted double b;
+    attribute unrestricted double c;
+    attribute unrestricted double d;
+    attribute unrestricted double e;
+    attribute unrestricted double f;
+
+    attribute unrestricted double m11;
+    attribute unrestricted double m12;
+    attribute unrestricted double m13;
+    attribute unrestricted double m14;
+    attribute unrestricted double m21;
+    attribute unrestricted double m22;
+    attribute unrestricted double m23;
+    attribute unrestricted double m24;
+    attribute unrestricted double m31;
+    attribute unrestricted double m32;
+    attribute unrestricted double m33;
+    attribute unrestricted double m34;
+    attribute unrestricted double m41;
+    attribute unrestricted double m42;
+    attribute unrestricted double m43;
+    attribute unrestricted double m44;
+
+    // FIXME: Should implement some methods (See: crbug.com/388780)
+};
diff --git a/core/dom/DOMMatrixReadOnly.idl b/core/dom/DOMMatrixReadOnly.idl
new file mode 100644
index 0000000..53cec15
--- /dev/null
+++ b/core/dom/DOMMatrixReadOnly.idl
@@ -0,0 +1,38 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    GarbageCollected,
+    RuntimeEnabled=GeometryInterfaces,
+] interface DOMMatrixReadOnly {
+    // These attributes are simple aliases for certain elements of the 4x4 matrix
+    readonly attribute unrestricted double a;
+    readonly attribute unrestricted double b;
+    readonly attribute unrestricted double c;
+    readonly attribute unrestricted double d;
+    readonly attribute unrestricted double e;
+    readonly attribute unrestricted double f;
+
+    readonly attribute unrestricted double m11;
+    readonly attribute unrestricted double m12;
+    readonly attribute unrestricted double m13;
+    readonly attribute unrestricted double m14;
+    readonly attribute unrestricted double m21;
+    readonly attribute unrestricted double m22;
+    readonly attribute unrestricted double m23;
+    readonly attribute unrestricted double m24;
+    readonly attribute unrestricted double m31;
+    readonly attribute unrestricted double m32;
+    readonly attribute unrestricted double m33;
+    readonly attribute unrestricted double m34;
+    readonly attribute unrestricted double m41;
+    readonly attribute unrestricted double m42;
+    readonly attribute unrestricted double m43;
+    readonly attribute unrestricted double m44;
+
+    readonly attribute boolean is2D;
+    readonly attribute boolean isIdentity;
+
+    // FIXME: Should implement some methods (See: crbug.com/388780)
+};
diff --git a/core/dom/DOMPoint.idl b/core/dom/DOMPoint.idl
new file mode 100644
index 0000000..d75c518
--- /dev/null
+++ b/core/dom/DOMPoint.idl
@@ -0,0 +1,24 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// FIXME: Blink doesn't currently support dictionary definitions.
+// For now, we can use Dictionary interface. See http://crbug.com/321462.
+// dictionary DOMPointInit {
+//     unrestricted double x = 0;
+//     unrestricted double y = 0;
+//     unrestricted double z = 0;
+//     unrestricted double w = 1;
+// };
+
+[
+    Constructor(optional Dictionary point),
+    Constructor(unrestricted double x, unrestricted double y,
+                optional unrestricted double z = 0, optional unrestricted double w = 1),
+    RuntimeEnabled=GeometryInterfaces,
+] interface DOMPoint : DOMPointReadOnly {
+    attribute unrestricted double x;
+    attribute unrestricted double y;
+    attribute unrestricted double z;
+    attribute unrestricted double w;
+};
diff --git a/core/dom/DOMPointReadOnly.idl b/core/dom/DOMPointReadOnly.idl
new file mode 100644
index 0000000..a02868d
--- /dev/null
+++ b/core/dom/DOMPointReadOnly.idl
@@ -0,0 +1,18 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    Constructor(unrestricted double x, unrestricted double y,
+                unrestricted double z, unrestricted double w),
+    GarbageCollected,
+    RuntimeEnabled=GeometryInterfaces,
+] interface DOMPointReadOnly {
+    readonly attribute unrestricted double x;
+    readonly attribute unrestricted double y;
+    readonly attribute unrestricted double z;
+    readonly attribute unrestricted double w;
+
+    // FIXME: We should implement DOMMatrixReadOnly interface.
+    // DOMPoint matrixTransform(DOMMatrixReadOnly matrix);
+};
diff --git a/core/dom/DOMRect.idl b/core/dom/DOMRect.idl
new file mode 100644
index 0000000..8a05778
--- /dev/null
+++ b/core/dom/DOMRect.idl
@@ -0,0 +1,16 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    Constructor(optional unrestricted double x = 0,
+                optional unrestricted double y = 0,
+                optional unrestricted double width = 0,
+                optional unrestricted double height = 0),
+    RuntimeEnabled=GeometryInterfaces,
+] interface DOMRect : DOMRectReadOnly {
+    attribute unrestricted double x;
+    attribute unrestricted double y;
+    attribute unrestricted double width;
+    attribute unrestricted double height;
+};
diff --git a/core/dom/DOMRectReadOnly.idl b/core/dom/DOMRectReadOnly.idl
new file mode 100644
index 0000000..50e05a5
--- /dev/null
+++ b/core/dom/DOMRectReadOnly.idl
@@ -0,0 +1,19 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    Constructor(unrestricted double x, unrestricted double y,
+                unrestricted double width, unrestricted double height),
+    GarbageCollected,
+    RuntimeEnabled=GeometryInterfaces,
+] interface DOMRectReadOnly {
+    readonly attribute unrestricted double x;
+    readonly attribute unrestricted double y;
+    readonly attribute unrestricted double width;
+    readonly attribute unrestricted double height;
+    readonly attribute unrestricted double top;
+    readonly attribute unrestricted double right;
+    readonly attribute unrestricted double bottom;
+    readonly attribute unrestricted double left;
+};
diff --git a/core/dom/DOMTokenList.idl b/core/dom/DOMTokenList.idl
index 98d51cf..1947640 100644
--- a/core/dom/DOMTokenList.idl
+++ b/core/dom/DOMTokenList.idl
@@ -32,6 +32,7 @@
     [RaisesException, CustomElementCallbacks] void add(DOMString... tokens);
     [RaisesException, CustomElementCallbacks] void remove(DOMString... tokens);
     [RaisesException, CustomElementCallbacks] boolean toggle(DOMString token, optional boolean force);
-    [NotEnumerable] DOMString toString();
+
+    [NotEnumerable] stringifier;
 };
 
diff --git a/core/dom/Document.idl b/core/dom/Document.idl
index 64f4ddf..e6cadff 100644
--- a/core/dom/Document.idl
+++ b/core/dom/Document.idl
@@ -31,7 +31,7 @@
     readonly attribute DOMImplementation implementation;
     readonly attribute Element documentElement;
 
-    [CustomElementCallbacks, PerWorldBindings, LogActivity, RaisesException] Element createElement(DOMString tagName);
+    [CustomElementCallbacks, PerWorldBindings, RaisesException] Element createElement(DOMString tagName);
     DocumentFragment createDocumentFragment();
     Text createTextNode(DOMString data);
     Comment createComment(DOMString data);
@@ -42,24 +42,24 @@
 
     // Introduced in DOM Level 2:
 
-    [CustomElementCallbacks, LogActivity, RaisesException] Node importNode(Node node, optional boolean deep);
-    [CustomElementCallbacks, LogActivity, RaisesException] Element createElementNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString qualifiedName);
-    [RaisesException, DeprecateAs=DocumentCreateAttributeNS] Attr createAttributeNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
-                                                                                  [TreatNullAs=NullString,Default=Undefined] optional DOMString qualifiedName); // Removed from DOM4.
-    HTMLCollection getElementsByTagNameNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString localName);
+    [CustomElementCallbacks, RaisesException, TypeChecking=Interface] Node importNode(Node node, optional boolean deep = false);
+    [CustomElementCallbacks, RaisesException] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName);
+    [RaisesException, DeprecateAs=DocumentCreateAttributeNS] Attr createAttributeNS([Default=Undefined] optional DOMString? namespaceURI,
+                                                                                    [Default=Undefined] optional DOMString? qualifiedName); // Removed from DOM4.
+    HTMLCollection getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
     [PerWorldBindings, DartNoAutoScope] Element getElementById(DOMString elementId);
 
     // DOM Level 3 Core
 
-    [TreatReturnedNullStringAs=Null, MeasureAs=DocumentInputEncoding] readonly attribute DOMString inputEncoding; // Removed from DOM4.
+    [MeasureAs=DocumentInputEncoding] readonly attribute DOMString? inputEncoding; // Removed from DOM4.
 
-    [TreatReturnedNullStringAs=Null, MeasureAs=DocumentXMLEncoding] readonly attribute DOMString xmlEncoding; // Removed from DOM4.
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, RaisesException=Setter, MeasureAs=DocumentXMLVersion] attribute DOMString xmlVersion; // Removed from DOM4.
+    [MeasureAs=DocumentXMLEncoding] readonly attribute DOMString? xmlEncoding; // Removed from DOM4.
+    [RaisesException=Setter, MeasureAs=DocumentXMLVersion] attribute DOMString? xmlVersion; // Removed from DOM4.
     [RaisesException=Setter, MeasureAs=DocumentXMLStandalone] attribute boolean xmlStandalone; // Removed from DOM4.
 
-    [RaisesException, CustomElementCallbacks] Node adoptNode(Node node);
+    [RaisesException, CustomElementCallbacks, TypeChecking=Interface] Node adoptNode(Node node);
 
-    [TreatReturnedNullStringAs=Null, ImplementedAs=url] readonly attribute DOMString documentURI;
+    [ImplementedAs=url] readonly attribute DOMString? documentURI;
 
     // DOM Level 2 Events (DocumentEvents interface)
 
@@ -71,12 +71,12 @@
 
     // DOM Level 2 Traversal and Range (DocumentTraversal interface)
 
-    [RaisesException] NodeIterator createNodeIterator(Node root,
-                                                      optional unsigned long whatToShow,
-                                                      optional NodeFilter filter);
-    [RaisesException] TreeWalker createTreeWalker(Node root,
-                                                  optional unsigned long whatToShow,
-                                                  optional NodeFilter filter);
+    [RaisesException, TypeChecking=Interface] NodeIterator createNodeIterator(Node root,
+                                                                              optional unsigned long whatToShow = 0xFFFFFFFF,
+                                                                              optional NodeFilter? filter = null);
+    [RaisesException, TypeChecking=Interface] TreeWalker createTreeWalker(Node root,
+                                                                          optional unsigned long whatToShow = 0xFFFFFFFF,
+                                                                          optional NodeFilter? filter = null);
 
     // DOM Level 2 Abstract Views (DocumentView interface)
 
@@ -88,8 +88,8 @@
 
     // DOM Level 2 Style (DocumentCSS interface)
 
-     CSSStyleDeclaration getOverrideStyle([Default=Undefined] optional Element element,
-                                                        [Default=Undefined] optional DOMString pseudoElement);
+    CSSStyleDeclaration getOverrideStyle([Default=Undefined] optional Element element,
+                                         [Default=Undefined] optional DOMString pseudoElement);
 
     // DOM 4
     readonly attribute DOMString contentType;
@@ -98,7 +98,7 @@
     [CustomElementCallbacks]
     boolean            execCommand([Default=Undefined] optional DOMString command,
                                    [Default=Undefined] optional boolean userInterface,
-                                   [TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] optional DOMString value);
+                                   [TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? value);
 
     boolean            queryCommandEnabled([Default=Undefined] optional DOMString command);
     boolean            queryCommandIndeterm([Default=Undefined] optional DOMString command);
@@ -116,7 +116,7 @@
 
              [TreatNullAs=NullString, RaisesException] attribute DOMString cookie;
 
-             [RaisesException=Setter, CustomElementCallbacks, PerWorldBindings, DartNoAutoScope] attribute HTMLElement body;
+    [RaisesException=Setter, CustomElementCallbacks, PerWorldBindings, TypeChecking=Interface, DartNoAutoScope] attribute HTMLElement? body;
 
     readonly attribute HTMLHeadElement head;
     readonly attribute HTMLCollection images;
@@ -131,7 +131,7 @@
 
     [PerWorldBindings, DartNoAutoScope] NodeList getElementsByName([Default=Undefined] optional DOMString elementName);
 
-    [LogActivity, PutForwards=href] readonly attribute Location location;
+    [PutForwards=href] readonly attribute Location location;
 
     // IE extensions
     [MeasureAs=DocumentCharset, TreatReturnedNullStringAs=Undefined, TreatNullAs=NullString] attribute DOMString charset;
@@ -146,12 +146,12 @@
 
     // Mozilla extensions
     Selection          getSelection();
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString characterSet;
+    readonly attribute DOMString? characterSet;
 
     // WebKit extensions
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString preferredStylesheetSet;
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString selectedStylesheetSet;
+    readonly attribute DOMString? preferredStylesheetSet;
+             attribute DOMString? selectedStylesheetSet;
 
     [MeasureAs=DocumentGetCSSCanvasContext] RenderingContext getCSSCanvasContext(DOMString contextId, DOMString name, long width, long height);
 
@@ -164,8 +164,6 @@
 
     [MeasureAs=DocumentExitPointerLock] void exitPointerLock();
     [MeasureAs=DocumentPointerLockElement] readonly attribute Element pointerLockElement;
-    [MeasureAs=PrefixedDocumentExitPointerLock, ImplementedAs=exitPointerLock] void webkitExitPointerLock();
-    [MeasureAs=PrefixedDocumentPointerLockElement, ImplementedAs=pointerLockElement] readonly attribute Element webkitPointerLockElement;
 
     // Event handler attributes
     attribute EventHandler onbeforecopy;
@@ -185,29 +183,24 @@
     [RuntimeEnabled=Touch] attribute EventHandler ontouchend;
     [RuntimeEnabled=Touch] attribute EventHandler ontouchmove;
     [RuntimeEnabled=Touch] attribute EventHandler ontouchstart;
-    attribute EventHandler onwebkitfullscreenchange;
-    attribute EventHandler onwebkitfullscreenerror;
-    attribute EventHandler onwebkitpointerlockchange;
-    attribute EventHandler onwebkitpointerlockerror;
-    [LogActivity=SetterOnly] attribute EventHandler onwheel;
+    attribute EventHandler onwheel;
 
     [RuntimeEnabled=Touch] Touch createTouch([Default=Undefined] optional Window window,
-                                               [Default=Undefined] optional EventTarget target,
-                                               [Default=Undefined] optional long identifier,
-                                               [Default=Undefined] optional double pageX,
-                                               [Default=Undefined] optional double pageY,
-                                               [Default=Undefined] optional double screenX,
-                                               [Default=Undefined] optional double screenY,
-                                               [Default=Undefined] optional double webkitRadiusX,
-                                               [Default=Undefined] optional double webkitRadiusY,
-                                               [Default=Undefined] optional float webkitRotationAngle,
-                                               [Default=Undefined] optional float webkitForce);
+                                             [Default=Undefined] optional EventTarget target,
+                                             [Default=Undefined] optional long identifier,
+                                             [Default=Undefined] optional double pageX,
+                                             [Default=Undefined] optional double pageY,
+                                             [Default=Undefined] optional double screenX,
+                                             [Default=Undefined] optional double screenY,
+                                             [Default=Undefined] optional double webkitRadiusX,
+                                             [Default=Undefined] optional double webkitRadiusY,
+                                             [Default=Undefined] optional float webkitRotationAngle,
+                                             [Default=Undefined] optional float webkitForce);
     [RuntimeEnabled=Touch] TouchList createTouchList(Touch... touches);
 
     [CallWith=ScriptState, CustomElementCallbacks, RaisesException, MeasureAs=DocumentRegisterElement] CustomElementConstructor registerElement(DOMString name, optional Dictionary options);
-    [CustomElementCallbacks, PerWorldBindings, LogActivity, RaisesException, DartCustom] Element createElement(DOMString localName, [TreatNullAs=NullString] DOMString typeExtension);
-    [CustomElementCallbacks, LogActivity, RaisesException, DartCustom] Element createElementNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString qualifiedName,
-                            [TreatNullAs=NullString] DOMString typeExtension);
+    [CustomElementCallbacks, PerWorldBindings, RaisesException, DartCustom] Element createElement(DOMString localName, DOMString? typeExtension);
+    [CustomElementCallbacks, RaisesException, DartCustom] Element createElementNS(DOMString? namespaceURI, DOMString qualifiedName, DOMString? typeExtension);
 
     // Page visibility API.
     readonly attribute DOMString visibilityState;
diff --git a/core/dom/DocumentFullscreen.idl b/core/dom/DocumentFullscreen.idl
index 65c6f80..43547f7 100644
--- a/core/dom/DocumentFullscreen.idl
+++ b/core/dom/DocumentFullscreen.idl
@@ -20,14 +20,25 @@
  */
 
 partial interface Document {
+    [RuntimeEnabled=FullscreenUnprefixed] readonly attribute boolean fullscreenEnabled;
+    [RuntimeEnabled=FullscreenUnprefixed] readonly attribute Element? fullscreenElement;
+
+    [RuntimeEnabled=FullscreenUnprefixed] void exitFullscreen();
+
+    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenchange;
+    [RuntimeEnabled=FullscreenUnprefixed] attribute EventHandler onfullscreenerror;
+
     // Mozilla version
     [MeasureAs=PrefixedDocumentIsFullscreen] readonly attribute boolean webkitIsFullScreen;
     [MeasureAs=PrefixedDocumentFullScreenKeyboardInputAllowed] readonly attribute boolean webkitFullScreenKeyboardInputAllowed;
     [MeasureAs=PrefixedDocumentCurrentFullScreenElement] readonly attribute Element webkitCurrentFullScreenElement;
-    [MeasureAs=PrefixedDocumentCancelFullScreen] void webkitCancelFullScreen();
+    [MeasureAs=PrefixedDocumentCancelFullScreen, ImplementedAs=exitFullscreen] void webkitCancelFullScreen();
 
     // W3C version
-    [MeasureAs=PrefixedDocumentFullscreenEnabled] readonly attribute boolean webkitFullscreenEnabled;
-    [MeasureAs=PrefixedDocumentFullscreenElement] readonly attribute Element webkitFullscreenElement;
-    [MeasureAs=PrefixedDocumentExitFullscreen] void webkitExitFullscreen();
+    [MeasureAs=PrefixedDocumentFullscreenEnabled, ImplementedAs=fullscreenEnabled] readonly attribute boolean webkitFullscreenEnabled;
+    [MeasureAs=PrefixedDocumentFullscreenElement, ImplementedAs=fullscreenElement] readonly attribute Element webkitFullscreenElement;
+    [MeasureAs=PrefixedDocumentExitFullscreen, ImplementedAs=exitFullscreen] void webkitExitFullscreen();
+
+    attribute EventHandler onwebkitfullscreenchange;
+    attribute EventHandler onwebkitfullscreenerror;
 };
diff --git a/core/dom/Element.idl b/core/dom/Element.idl
index 93843ed..89e5e7c 100644
--- a/core/dom/Element.idl
+++ b/core/dom/Element.idl
@@ -24,14 +24,14 @@
 
     // DOM Level 1 Core
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString tagName;
+    readonly attribute DOMString? tagName;
 
-    [TreatReturnedNullStringAs=Null, DartNoAutoScope] DOMString getAttribute(DOMString name);
+    [DartNoAutoScope] DOMString? getAttribute(DOMString name);
     [RaisesException, CustomElementCallbacks, DartNoAutoScope] void setAttribute(DOMString name, DOMString value);
     [CustomElementCallbacks] void removeAttribute(DOMString name);
     [MeasureAs=ElementGetAttributeNode] Attr getAttributeNode([Default=Undefined] optional DOMString name); // Removed from DOM4.
-    [RaisesException, CustomElementCallbacks, MeasureAs=ElementSetAttributeNode] Attr setAttributeNode([Default=Undefined, TypeChecking=Nullable] optional Attr newAttr); // Removed from DOM4.
-    [RaisesException, CustomElementCallbacks, MeasureAs=ElementRemoveAttributeNode] Attr removeAttributeNode([Default=Undefined, TypeChecking=Nullable] optional Attr oldAttr); // Removed from DOM4.
+    [RaisesException, CustomElementCallbacks, MeasureAs=ElementSetAttributeNode] Attr setAttributeNode([Default=Undefined] optional Attr newAttr); // Removed from DOM4.
+    [RaisesException, CustomElementCallbacks, MeasureAs=ElementRemoveAttributeNode] Attr removeAttributeNode([Default=Undefined] optional Attr oldAttr); // Removed from DOM4.
     HTMLCollection getElementsByTagName(DOMString name);
 
     [PerWorldBindings, ImplementedAs=attributesForBindings] readonly attribute NamedNodeMap     attributes;
@@ -39,23 +39,23 @@
 
     // DOM Level 2 Core
 
-    [TreatReturnedNullStringAs=Null, DartNoAutoScope] DOMString getAttributeNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString localName);
-    [RaisesException, CustomElementCallbacks, DartNoAutoScope] void setAttributeNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString qualifiedName, DOMString value);
-    [CustomElementCallbacks] void removeAttributeNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString localName);
-    HTMLCollection getElementsByTagNameNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString localName);
-    [MeasureAs=ElementGetAttributeNodeNS] Attr getAttributeNodeNS([TreatNullAs=NullString, Default=Undefined] optional DOMString namespaceURI,
+    [DartNoAutoScope] DOMString? getAttributeNS(DOMString? namespaceURI, DOMString localName);
+    [RaisesException, CustomElementCallbacks, DartNoAutoScope] void setAttributeNS(DOMString? namespaceURI, DOMString qualifiedName, DOMString value);
+    [CustomElementCallbacks] void removeAttributeNS(DOMString? namespaceURI, DOMString localName);
+    HTMLCollection getElementsByTagNameNS(DOMString? namespaceURI, DOMString localName);
+    [MeasureAs=ElementGetAttributeNodeNS] Attr getAttributeNodeNS([Default=Undefined] optional DOMString? namespaceURI,
                                                                   [Default=Undefined] optional DOMString localName); // Removed from DOM4.
-    [RaisesException, CustomElementCallbacks, DeprecateAs=ElementSetAttributeNodeNS] Attr setAttributeNodeNS([Default=Undefined, TypeChecking=Nullable] optional Attr newAttr); // Removed from DOM4.
+    [RaisesException, CustomElementCallbacks, DeprecateAs=ElementSetAttributeNodeNS] Attr setAttributeNodeNS([Default=Undefined] optional Attr newAttr); // Removed from DOM4.
     boolean hasAttribute(DOMString name);
-    boolean hasAttributeNS([TreatNullAs=NullString] DOMString namespaceURI, DOMString localName);
+    boolean hasAttributeNS(DOMString? namespaceURI, DOMString localName);
 
     [PerWorldBindings] readonly attribute CSSStyleDeclaration style;
 
     // DOM4
     [Reflect, DartNoAutoScope] attribute DOMString id;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString namespaceURI;
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, RaisesException=Setter] attribute DOMString prefix;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString localName;
+    readonly attribute DOMString? namespaceURI;
+    [RaisesException=Setter] attribute DOMString? prefix;
+    readonly attribute DOMString? localName;
 
     [RaisesException] boolean matches(DOMString selectors);
 
@@ -87,12 +87,10 @@
     // WebKit extensions
 
     [MeasureAs=ElementScrollIntoViewIfNeeded] void scrollIntoViewIfNeeded(optional boolean centerIfNeeded);
-    [MeasureAs=ElementScrollByLines] void scrollByLines([Default=Undefined] optional long lines);
-    [MeasureAs=ElementScrollByPages] void scrollByPages([Default=Undefined] optional long pages);
 
     // HTML 5
     HTMLCollection getElementsByClassName(DOMString classNames);
-    [TreatNullAs=NullString, CustomElementCallbacks, PerWorldBindings, LogActivity=SetterOnly, RaisesException=Setter] attribute DOMString innerHTML;
+    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter] attribute DOMString innerHTML;
     [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter] attribute DOMString outerHTML;
 
     [RaisesException, CustomElementCallbacks, MeasureAs=InsertAdjacentElement] Element insertAdjacentElement(DOMString where, Element element);
@@ -116,14 +114,6 @@
     ClientRectList getClientRects();
     ClientRect getBoundingClientRect();
 
-    // Mozilla version
-    const unsigned short ALLOW_KEYBOARD_INPUT = 1;
-    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullScreen] void webkitRequestFullScreen([Default=Undefined] optional unsigned short flags);
-
-    // W3C version
-    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullscreen] void webkitRequestFullscreen();
-
-    [MeasureAs=PrefixedElementRequestPointerLock] void webkitRequestPointerLock();
     [MeasureAs=ElementRequestPointerLock] void requestPointerLock();
 
     // Event handler attributes
@@ -139,9 +129,7 @@
     [RuntimeEnabled=Touch] attribute EventHandler ontouchend;
     [RuntimeEnabled=Touch] attribute EventHandler ontouchmove;
     [RuntimeEnabled=Touch] attribute EventHandler ontouchstart;
-    attribute EventHandler onwebkitfullscreenchange;
-    attribute EventHandler onwebkitfullscreenerror;
-    [LogActivity=SetterOnly] attribute EventHandler onwheel;
+    attribute EventHandler onwheel;
 };
 
 Element implements ParentNode;
diff --git a/core/dom/ElementFullscreen.idl b/core/dom/ElementFullscreen.idl
new file mode 100644
index 0000000..6f45402
--- /dev/null
+++ b/core/dom/ElementFullscreen.idl
@@ -0,0 +1,17 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+partial interface Element {
+    [RuntimeEnabled=FullscreenUnprefixed] void requestFullscreen();
+
+    // Mozilla version
+    const unsigned short ALLOW_KEYBOARD_INPUT = 1;
+    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullScreen] void webkitRequestFullScreen([Default=Undefined] optional unsigned short flags);
+
+    // W3C version
+    [LogActivity, LogAllWorlds, MeasureAs=PrefixedElementRequestFullscreen] void webkitRequestFullscreen();
+
+    attribute EventHandler onwebkitfullscreenchange;
+    attribute EventHandler onwebkitfullscreenerror;
+};
diff --git a/core/dom/GlobalEventHandlers.idl b/core/dom/GlobalEventHandlers.idl
index c835461..6a7f1c1 100644
--- a/core/dom/GlobalEventHandlers.idl
+++ b/core/dom/GlobalEventHandlers.idl
@@ -41,41 +41,41 @@
     attribute EventHandler oncanplay;
     attribute EventHandler oncanplaythrough;
     attribute EventHandler onchange;
-    [LogActivity=SetterOnly] attribute EventHandler onclick;
+    attribute EventHandler onclick;
     attribute EventHandler onclose;
     attribute EventHandler oncontextmenu;
     attribute EventHandler oncuechange;
-    [LogActivity=SetterOnly] attribute EventHandler ondblclick;
-    [LogActivity=SetterOnly] attribute EventHandler ondrag;
-    [LogActivity=SetterOnly] attribute EventHandler ondragend;
-    [LogActivity=SetterOnly] attribute EventHandler ondragenter;
-    //[LogActivity=SetterOnly] attribute EventHandler ondragexit;
-    [LogActivity=SetterOnly] attribute EventHandler ondragleave;
-    [LogActivity=SetterOnly] attribute EventHandler ondragover;
-    [LogActivity=SetterOnly] attribute EventHandler ondragstart;
-    [LogActivity=SetterOnly] attribute EventHandler ondrop;
+    attribute EventHandler ondblclick;
+    attribute EventHandler ondrag;
+    attribute EventHandler ondragend;
+    attribute EventHandler ondragenter;
+    //attribute EventHandler ondragexit;
+    attribute EventHandler ondragleave;
+    attribute EventHandler ondragover;
+    attribute EventHandler ondragstart;
+    attribute EventHandler ondrop;
     attribute EventHandler ondurationchange;
     attribute EventHandler onemptied;
     attribute EventHandler onended;
     attribute EventHandler onerror;
     attribute EventHandler onfocus;
-    [LogActivity=SetterOnly] attribute EventHandler oninput;
+    attribute EventHandler oninput;
     attribute EventHandler oninvalid;
-    [LogActivity=SetterOnly] attribute EventHandler onkeydown;
-    [LogActivity=SetterOnly] attribute EventHandler onkeypress;
-    [LogActivity=SetterOnly] attribute EventHandler onkeyup;
+    attribute EventHandler onkeydown;
+    attribute EventHandler onkeypress;
+    attribute EventHandler onkeyup;
     attribute EventHandler onload;
     attribute EventHandler onloadeddata;
     attribute EventHandler onloadedmetadata;
     attribute EventHandler onloadstart;
-    [LogActivity=SetterOnly] attribute EventHandler onmousedown;
-    [LogActivity=SetterOnly] attribute EventHandler onmouseenter;
-    [LogActivity=SetterOnly] attribute EventHandler onmouseleave;
-    [LogActivity=SetterOnly] attribute EventHandler onmousemove;
-    [LogActivity=SetterOnly] attribute EventHandler onmouseout;
-    [LogActivity=SetterOnly] attribute EventHandler onmouseover;
-    [LogActivity=SetterOnly] attribute EventHandler onmouseup;
-    [LogActivity=SetterOnly] attribute EventHandler onmousewheel;
+    attribute EventHandler onmousedown;
+    attribute EventHandler onmouseenter;
+    attribute EventHandler onmouseleave;
+    attribute EventHandler onmousemove;
+    attribute EventHandler onmouseout;
+    attribute EventHandler onmouseover;
+    attribute EventHandler onmouseup;
+    attribute EventHandler onmousewheel;
     attribute EventHandler onpause;
     attribute EventHandler onplay;
     attribute EventHandler onplaying;
diff --git a/core/dom/MessageChannel.idl b/core/dom/MessageChannel.idl
index 3a1123c..14a4e19 100644
--- a/core/dom/MessageChannel.idl
+++ b/core/dom/MessageChannel.idl
@@ -26,7 +26,7 @@
 
 [
     CustomConstructor,
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     WillBeGarbageCollected
 ] interface MessageChannel {
     readonly attribute MessagePort port1;
diff --git a/core/dom/MessagePort.idl b/core/dom/MessagePort.idl
index f834df6..77d8652 100644
--- a/core/dom/MessagePort.idl
+++ b/core/dom/MessagePort.idl
@@ -29,7 +29,7 @@
     ActiveDOMObject,
     WillBeGarbageCollected
 ] interface MessagePort : EventTarget {
-    [Custom, RaisesException] void postMessage(any message, optional MessagePort[] messagePorts);
+    [Custom, RaisesException] void postMessage(any message, optional sequence<Transferable> transfer);
 
     void start();
     void close();
@@ -37,4 +37,3 @@
     // event handler attributes
     attribute EventHandler onmessage;
 };
-
diff --git a/core/dom/MutationRecord.idl b/core/dom/MutationRecord.idl
index daecf1d..1be9ca9 100644
--- a/core/dom/MutationRecord.idl
+++ b/core/dom/MutationRecord.idl
@@ -39,8 +39,8 @@
     readonly attribute Node previousSibling;
     readonly attribute Node nextSibling;
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString attributeName;
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString attributeNamespace;
+    readonly attribute DOMString? attributeName;
+    readonly attribute DOMString? attributeNamespace;
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString oldValue;
+    readonly attribute DOMString? oldValue;
 };
diff --git a/core/dom/NamedNodeMap.idl b/core/dom/NamedNodeMap.idl
index 7de6a6f..6294404 100644
--- a/core/dom/NamedNodeMap.idl
+++ b/core/dom/NamedNodeMap.idl
@@ -37,12 +37,12 @@
 
     // Introduced in DOM Level 2:
 
-    [MeasureAs=NamedNodeMapGetNamedItemNS] Node getNamedItemNS([TreatNullAs=NullString, Default=Undefined] optional DOMString namespaceURI,
+    [MeasureAs=NamedNodeMapGetNamedItemNS] Node getNamedItemNS([Default=Undefined] optional DOMString? namespaceURI,
                                                                [Default=Undefined] optional DOMString localName);
 
     [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapSetNamedItemNS] Node setNamedItemNS([Default=Undefined] optional Node node);
 
-    [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapRemoveNamedItemNS] Node removeNamedItemNS([TreatNullAs=NullString, Default=Undefined] optional DOMString namespaceURI,
+    [RaisesException, CustomElementCallbacks, MeasureAs=NamedNodeMapRemoveNamedItemNS] Node removeNamedItemNS([Default=Undefined] optional DOMString? namespaceURI,
                                                                                                               [Default=Undefined] optional DOMString localName);
 
 };
diff --git a/core/dom/Node.idl b/core/dom/Node.idl
index 329b27f..1a05f53 100644
--- a/core/dom/Node.idl
+++ b/core/dom/Node.idl
@@ -38,7 +38,7 @@
 
     readonly attribute DOMString nodeName;
 
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, CustomElementCallbacks] attribute DOMString nodeValue;
+    [CustomElementCallbacks] attribute DOMString? nodeValue;
 
     [DartNoAutoScope] readonly attribute unsigned short   nodeType;
     [PerWorldBindings] readonly attribute Node             parentNode;
@@ -49,29 +49,29 @@
     [PerWorldBindings, DartNoAutoScope] readonly attribute Node             nextSibling;
     [PerWorldBindings] readonly attribute Document         ownerDocument;
 
-    [Custom, CustomElementCallbacks, PerWorldBindings, LogActivity, RaisesException] Node insertBefore(Node newChild, Node refChild);
-    [Custom, CustomElementCallbacks, PerWorldBindings, LogActivity, RaisesException] Node replaceChild(Node newChild, Node oldChild);
-    [Custom, CustomElementCallbacks, RaisesException] Node removeChild(Node oldChild);
-    [Custom, CustomElementCallbacks, PerWorldBindings, LogActivity, RaisesException] Node appendChild(Node newChild);
+    [CustomElementCallbacks, PerWorldBindings, RaisesException, TypeChecking=Interface] Node insertBefore(Node newChild, Node? refChild);
+    [CustomElementCallbacks, PerWorldBindings, RaisesException, TypeChecking=Interface] Node replaceChild(Node newChild, Node oldChild);
+    [CustomElementCallbacks, RaisesException, TypeChecking=Interface] Node removeChild(Node oldChild);
+    [CustomElementCallbacks, PerWorldBindings, RaisesException, TypeChecking=Interface] Node appendChild(Node newChild);
 
     [ImplementedAs=hasChildren] boolean hasChildNodes();
     [CustomElementCallbacks, DartCustom] Node cloneNode(optional boolean deep);
     [CustomElementCallbacks] void normalize();
 
     // Introduced in DOM Level 2:
-    [TreatReturnedNullStringAs=Null, MeasureAs=NodeNamespaceURI] readonly attribute DOMString namespaceURI; // Moved to Element and Attr in DOM4.
-    [TreatReturnedNullStringAs=Null, MeasureAs=NodeLocalName] readonly attribute DOMString localName; // Moved to Element and Attr in DOM4.
+    [MeasureAs=NodeNamespaceURI] readonly attribute DOMString? namespaceURI; // Moved to Element and Attr in DOM4.
+    [MeasureAs=NodeLocalName] readonly attribute DOMString? localName; // Moved to Element and Attr in DOM4.
 
     // Introduced in DOM Level 3:
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString baseURI;
+    readonly attribute DOMString? baseURI;
 
     [TreatReturnedNullStringAs=Null, TreatNullAs=NullString, TreatUndefinedAs=NullString, CustomElementCallbacks] attribute DOMString textContent;
 
     [MeasureAs=NodeIsSameNode] boolean isSameNode([Default=Undefined] optional Node other); // Removed in DOM4.
     boolean isEqualNode(Node other);
-    [TreatReturnedNullStringAs=Null] DOMString lookupPrefix([TreatNullAs=NullString] DOMString namespaceURI);
-    boolean isDefaultNamespace([TreatNullAs=NullString] DOMString namespaceURI);
-    [TreatReturnedNullStringAs=Null] DOMString lookupNamespaceURI([TreatNullAs=NullString] DOMString prefix);
+    DOMString? lookupPrefix(DOMString? namespaceURI);
+    boolean isDefaultNamespace(DOMString? namespaceURI);
+    DOMString? lookupNamespaceURI(DOMString? prefix);
 
     // DocumentPosition
     const unsigned short      DOCUMENT_POSITION_DISCONNECTED = 0x01;
diff --git a/core/dom/ProcessingInstruction.idl b/core/dom/ProcessingInstruction.idl
index 80aace5..c082c10 100644
--- a/core/dom/ProcessingInstruction.idl
+++ b/core/dom/ProcessingInstruction.idl
@@ -22,7 +22,7 @@
 
     // DOM Level 1
 
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString target;
+    readonly attribute DOMString? target;
 
     // interface LinkStyle from DOM Level 2 Style Sheets
     readonly attribute StyleSheet sheet;
diff --git a/core/dom/Range.idl b/core/dom/Range.idl
index e73f6d3..cb2d8fd 100644
--- a/core/dom/Range.idl
+++ b/core/dom/Range.idl
@@ -38,7 +38,7 @@
     [RaisesException] void setStartAfter(Node refNode);
     [RaisesException] void setEndBefore(Node refNode);
     [RaisesException] void setEndAfter(Node refNode);
-    void collapse([Default=Undefined] optional boolean toStart);
+    void collapse(optional boolean toStart = false);
     [RaisesException] void selectNode(Node refNode);
     [RaisesException] void selectNodeContents(Node refNode);
 
@@ -48,7 +48,7 @@
     const unsigned short END_TO_END     = 2;
     const unsigned short END_TO_START   = 3;
 
-    [RaisesException] short compareBoundaryPoints(CompareHow how, Range sourceRange);
+    [RaisesException, TypeChecking=Interface] short compareBoundaryPoints(CompareHow how, Range sourceRange);
 
     [RaisesException, CustomElementCallbacks] void deleteContents();
     [RaisesException, CustomElementCallbacks] DocumentFragment extractContents();
@@ -56,12 +56,13 @@
     [RaisesException, CustomElementCallbacks] void insertNode(Node newNode);
     [RaisesException, CustomElementCallbacks] void surroundContents(Node newParent);
     Range cloneRange();
-    DOMString toString();
+
+    stringifier;
 
     [DeprecateAs=RangeDetach] void detach();
 
     [RaisesException] boolean isPointInRange(Node refNode, long offset);
-    [RaisesException] short comparePoint(Node refNode, long offset);
+    [RaisesException, TypeChecking=Interface] short comparePoint(Node refNode, long offset);
 
     [RaisesException] boolean intersectsNode(Node refNode);
 
diff --git a/core/dom/Text.idl b/core/dom/Text.idl
index 2e3f842..afee652 100644
--- a/core/dom/Text.idl
+++ b/core/dom/Text.idl
@@ -17,7 +17,7 @@
  * Boston, MA 02110-1301, USA.
  */
 [
-    Constructor(optional DOMString data = null),
+    Constructor(optional DOMString data = ""),
     ConstructorCallWith=Document,
     Custom=Wrap,
 ] interface Text : CharacterData {
diff --git a/core/dom/Touch.idl b/core/dom/Touch.idl
index 574d684..d7003b6 100644
--- a/core/dom/Touch.idl
+++ b/core/dom/Touch.idl
@@ -34,6 +34,9 @@
     readonly attribute double           pageY;
     readonly attribute EventTarget      target;
     readonly attribute unsigned long    identifier;
+    readonly attribute double           radiusX;
+    readonly attribute double           radiusY;
+    readonly attribute float            force;
     [MeasureAs=PrefixedTouchRadiusX] readonly attribute double webkitRadiusX;
     [MeasureAs=PrefixedTouchRadiusY] readonly attribute double webkitRadiusY;
     [MeasureAs=PrefixedTouchRotationAngle] readonly attribute float webkitRotationAngle;
diff --git a/core/dom/URL.idl b/core/dom/URL.idl
index 37b8051..64f14fb 100644
--- a/core/dom/URL.idl
+++ b/core/dom/URL.idl
@@ -27,10 +27,10 @@
 // http://url.spec.whatwg.org/#url
 
 [
-    Constructor(DOMString url),
-    Constructor(DOMString url, DOMString base),
-    Constructor(DOMString url, URL base),
-    Exposed=Window&Worker,
+    Constructor(ScalarValueString url),
+    Constructor(ScalarValueString url, ScalarValueString base),
+    Constructor(ScalarValueString url, URL base),
+    Exposed=(Window,Worker),
     ImplementedAs=DOMURL,
     RaisesException=Constructor,
     WillBeGarbageCollected,
@@ -38,7 +38,7 @@
     // FIXME: should be in separate URLBlob.idl partial interface definition
     // http://dev.w3.org/2006/webapi/FileAPI/#URL-object
     // FIXME: should not be nullable
-    [RaisesException, CallWith=ExecutionContext, TreatReturnedNullStringAs=Null] static DOMString createObjectURL(Blob? blob);
+    [RaisesException, CallWith=ExecutionContext] static DOMString? createObjectURL(Blob? blob);
     [CallWith=ExecutionContext] static void revokeObjectURL(DOMString url);
 };
 
diff --git a/core/dom/URLUtils.idl b/core/dom/URLUtils.idl
index 26ed382..5f0e115 100644
--- a/core/dom/URLUtils.idl
+++ b/core/dom/URLUtils.idl
@@ -29,20 +29,20 @@
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface URLUtils {
     // FIXME: should be stringifier: http://crbug.com/306606
-    // stringifier attribute DOMString href;
-    [PerWorldBindings, LogActivity=SetterOnly, LogPreviousValue] attribute DOMString href;
-    [NotEnumerable, ImplementedAs=href] DOMString toString();
-    readonly attribute DOMString origin;
+    // stringifier attribute ScalarValueString href;
+    attribute ScalarValueString href;
+    [NotEnumerable, ImplementedAs=href] ScalarValueString toString();
+    readonly attribute ScalarValueString origin;
 
-    attribute DOMString protocol;
-    attribute DOMString username;
-    attribute DOMString password;
-    attribute DOMString host;
-    attribute DOMString hostname;
-    attribute DOMString port;
-    attribute DOMString pathname;
-    attribute DOMString search;
+    attribute ScalarValueString protocol;
+    attribute ScalarValueString username;
+    attribute ScalarValueString password;
+    attribute ScalarValueString host;
+    attribute ScalarValueString hostname;
+    attribute ScalarValueString port;
+    attribute ScalarValueString pathname;
+    attribute ScalarValueString search;
     // Not yet implemented.
     // attribute URLSearchParams searchParams;
-    attribute DOMString hash;
+    attribute ScalarValueString hash;
 };
diff --git a/core/dom/URLUtilsReadOnly.idl b/core/dom/URLUtilsReadOnly.idl
index ccd26f7..5330196 100644
--- a/core/dom/URLUtilsReadOnly.idl
+++ b/core/dom/URLUtilsReadOnly.idl
@@ -29,17 +29,16 @@
     NoInterfaceObject, // Always used on target of 'implements'
 ] interface URLUtilsReadOnly {
     // FIXME: should be stringifier: http://crbug.com/306606
-    // stringifier readonly attribute DOMString href;
-    readonly attribute DOMString href;
-    [NotEnumerable, ImplementedAs=href] DOMString toString();
-    // Not yet implemented.
-    // readonly attribute DOMString origin;
+    // stringifier readonly attribute ScalarValueString href;
+    readonly attribute ScalarValueString href;
+    [NotEnumerable, ImplementedAs=href] ScalarValueString toString();
+    readonly attribute ScalarValueString origin;
 
-    readonly attribute DOMString protocol;
-    readonly attribute DOMString host;
-    readonly attribute DOMString hostname;
-    readonly attribute DOMString port;
-    readonly attribute DOMString pathname;
-    readonly attribute DOMString search;
-    readonly attribute DOMString hash;
+    readonly attribute ScalarValueString protocol;
+    readonly attribute ScalarValueString host;
+    readonly attribute ScalarValueString hostname;
+    readonly attribute ScalarValueString port;
+    readonly attribute ScalarValueString pathname;
+    readonly attribute ScalarValueString search;
+    readonly attribute ScalarValueString hash;
 };
diff --git a/core/dom/shadow/ShadowRoot.idl b/core/dom/shadow/ShadowRoot.idl
index c7d26bb..f884756 100644
--- a/core/dom/shadow/ShadowRoot.idl
+++ b/core/dom/shadow/ShadowRoot.idl
@@ -29,14 +29,14 @@
 
     [ImplementedAs=olderShadowRootForBindings] readonly attribute ShadowRoot olderShadowRoot;
 
-    [TreatNullAs=NullString, CustomElementCallbacks, LogActivity=SetterOnly, RaisesException=Setter] attribute DOMString innerHTML;
+    [TreatNullAs=NullString, CustomElementCallbacks, RaisesException=Setter] attribute DOMString innerHTML;
 
     [RaisesException] Node cloneNode([Default=Undefined] optional boolean deep);
     Selection getSelection();
     Element getElementById([Default=Undefined] optional DOMString elementId);
     HTMLCollection getElementsByClassName([Default=Undefined] optional DOMString className);
     HTMLCollection getElementsByTagName([Default=Undefined] optional DOMString tagName);
-    HTMLCollection getElementsByTagNameNS([TreatNullAs=NullString,Default=Undefined] optional DOMString namespaceURI,
+    HTMLCollection getElementsByTagNameNS([Default=Undefined] optional DOMString? namespaceURI,
                                           [Default=Undefined] optional DOMString localName);
 
     Element elementFromPoint([Default=Undefined] optional long x,
diff --git a/core/page/Selection.idl b/core/editing/Selection.idl
similarity index 76%
rename from core/page/Selection.idl
rename to core/editing/Selection.idl
index 53b0826..dc27b0d 100644
--- a/core/page/Selection.idl
+++ b/core/editing/Selection.idl
@@ -27,11 +27,17 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-// This is based off of Mozilla's Selection interface
-// https://developer.mozilla.org/En/DOM/Selection
+// This is based on the W3C standard HTML Editing APIs
+// https://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#selection
+//
+// FIXME: Fix discrepancies from the standard, especially
+// * unsigned types where should be unsigned
+// * Nullability
+// * RemoveRange(Range range) method
+// http://crbug.com/391673
 [
+    ImplementedAs=DOMSelection,
     WillBeGarbageCollected,
-    ImplementedAs=DOMSelection
 ] interface Selection {
     readonly attribute Node anchorNode;
     readonly attribute long anchorOffset;
@@ -39,26 +45,30 @@
     readonly attribute long focusOffset;
 
     readonly attribute boolean isCollapsed;
-    readonly attribute long rangeCount;
-
-    [RaisesException, TypeChecking=Interface|Nullable] void collapse(Node node,
-                                                        optional long offset);
-    [RaisesException] void collapseToEnd();
+    [RaisesException, TypeChecking=Interface] void collapse(Node node, optional long offset);
     [RaisesException] void collapseToStart();
+    [RaisesException] void collapseToEnd();
 
-    [CustomElementCallbacks] void deleteFromDocument();
-    boolean containsNode([Default=Undefined] optional Node node,
-                         [Default=Undefined] optional boolean allowPartial);
+    // FIXME: should be: optional long offset = 0  http://crbug.com/258153
+    // We mark offset as optional, defaulting to 0; this differs from spec.
+    // http://crbug.com/384966
+    [RaisesException, TypeChecking=Interface] void extend(Node node, optional long offset);
+
     [RaisesException] void selectAllChildren([Default=Undefined] optional Node node);
+    [CustomElementCallbacks] void deleteFromDocument();
 
-    [RaisesException] void extend([Default=Undefined] optional Node node,
-                [Default=Undefined] optional long offset);
-
+    readonly attribute long rangeCount;
     [RaisesException] Range getRangeAt([Default=Undefined] optional long index);
-    void removeAllRanges();
     void addRange([Default=Undefined] optional Range range);
+    void removeAllRanges();
 
-    [NotEnumerable] DOMString toString();
+    [NotEnumerable] stringifier;
+
+    // Firefox extensions
+    // https://developer.mozilla.org/En/DOM/Selection
+    //
+    // FIXME: Add use counters.
+    boolean containsNode([Default = Undefined] optional Node node, [Default = Undefined] optional boolean allowPartial);
 
     // WebKit extensions
     [MeasureAs=SelectionBaseNode] readonly attribute Node baseNode;
@@ -77,11 +87,10 @@
                                                                                  [Default=Undefined] optional long baseOffset,
                                                                                  [Default=Undefined] optional Node extentNode,
                                                                                  [Default=Undefined] optional long extentOffset);
-    [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException, TypeChecking=Interface|Nullable] void setPosition(Node node,
-                                                                                                                                optional long offset);
+    [ImplementedAs=collapse, MeasureAs=SelectionSetPosition, RaisesException, TypeChecking=Interface] void setPosition(Node node,
+                                                                                                                       optional long offset);
 
-    // IE extentions
+    // IE extensions
     // http://msdn.microsoft.com/en-us/library/ms535869(VS.85).aspx
     [MeasureAs=SelectionEmpty] void empty();
 };
-
diff --git a/core/events/EventTarget.idl b/core/events/EventTarget.idl
index 69a4bc1..c83100d 100644
--- a/core/events/EventTarget.idl
+++ b/core/events/EventTarget.idl
@@ -24,10 +24,10 @@
 ] interface EventTarget {
     // FIXME: first 2 args should be required, but throwing TypeError breaks
     // legacy content.  http://crbug.com/353484
-    void addEventListener([TreatNullAs=NullString] optional DOMString type,
+    void addEventListener(optional DOMString? type,
                           optional EventListener listener,
                           optional boolean useCapture);
-    void removeEventListener([TreatNullAs=NullString] optional DOMString type,
+    void removeEventListener(optional DOMString? type,
                              optional EventListener listener,
                              optional boolean useCapture);
     [RaisesException] boolean dispatchEvent(Event event);
diff --git a/core/events/KeyboardEvent.idl b/core/events/KeyboardEvent.idl
index 9a16319..ca68d36 100644
--- a/core/events/KeyboardEvent.idl
+++ b/core/events/KeyboardEvent.idl
@@ -34,7 +34,6 @@
     [InitializedByEventConstructor] readonly attribute boolean          altKey;
     [InitializedByEventConstructor] readonly attribute boolean          metaKey;
     [InitializedByEventConstructor] readonly attribute boolean          repeat;
-    readonly attribute boolean          altGraphKey;
 
     boolean getModifierState(DOMString keyArgument);
 
@@ -48,7 +47,6 @@
                            [Default=Undefined] optional boolean ctrlKey,
                            [Default=Undefined] optional boolean altKey,
                            [Default=Undefined] optional boolean shiftKey,
-                           [Default=Undefined] optional boolean metaKey,
-                           [Default=Undefined] optional boolean altGraphKey);
+                           [Default=Undefined] optional boolean metaKey);
 };
 
diff --git a/core/events/MessageEvent.idl b/core/events/MessageEvent.idl
index b9e155b..3f2fadc 100644
--- a/core/events/MessageEvent.idl
+++ b/core/events/MessageEvent.idl
@@ -27,7 +27,7 @@
 
 [
     EventConstructor,
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     RaisesException=Constructor,
     Custom=Wrap,
 ] interface MessageEvent : Event {
diff --git a/core/events/MouseEvent.idl b/core/events/MouseEvent.idl
index f5b03c8..feda914 100644
--- a/core/events/MouseEvent.idl
+++ b/core/events/MouseEvent.idl
@@ -51,14 +51,14 @@
                                        [Default=Undefined] optional unsigned short button,
                                        [Default=Undefined] optional EventTarget relatedTarget);
 
-    // extensions
-    readonly attribute long             offsetX;
-    readonly attribute long             offsetY;
-    readonly attribute long             x;
-    readonly attribute long             y;
-    readonly attribute Node             fromElement;
-    readonly attribute Node             toElement;
+    // Non-standard
+    [MeasureAs=MouseEventOffsetX] readonly attribute long offsetX;
+    [MeasureAs=MouseEventOffsetY] readonly attribute long offsetY;
+    [MeasureAs=MouseEventX] readonly attribute long x;
+    [MeasureAs=MouseEventY] readonly attribute long y;
+    [MeasureAs=MouseEventFromElement] readonly attribute Node fromElement;
+    [MeasureAs=MouseEventToElement] readonly attribute Node toElement;
 
-    readonly attribute DataTransfer     dataTransfer;
+    // FIXME: this belongs on the DragEvent interface
+    readonly attribute DataTransfer dataTransfer;
 };
-
diff --git a/core/events/RelatedEvent.idl b/core/events/RelatedEvent.idl
new file mode 100644
index 0000000..7c3d25b
--- /dev/null
+++ b/core/events/RelatedEvent.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    EventConstructor,
+    RuntimeEnabled=ContextMenu,
+] interface RelatedEvent : Event {
+    [InitializedByEventConstructor] readonly attribute EventTarget? relatedTarget;
+};
+
diff --git a/core/events/UIEvent.idl b/core/events/UIEvent.idl
index df8ec34..4d025d8 100644
--- a/core/events/UIEvent.idl
+++ b/core/events/UIEvent.idl
@@ -29,13 +29,14 @@
                                     [Default=Undefined] optional Window view,
                                     [Default=Undefined] optional long detail);
 
-    // extensions
-    readonly attribute long                 keyCode;
-    readonly attribute long                 charCode;
-    readonly attribute long                 layerX;
-    readonly attribute long                 layerY;
-    readonly attribute long                 pageX;
-    readonly attribute long                 pageY;
-    readonly attribute long                 which;
-};
+    // Non-standard
+    [MeasureAs=UIEventLayerX] readonly attribute long layerX;
+    [MeasureAs=UIEventLayerY] readonly attribute long layerY;
+    [MeasureAs=UIEventPageX] readonly attribute long pageX;
+    [MeasureAs=UIEventPageY] readonly attribute long pageY;
 
+    // FIXME: these belong on the KeyboardEvent interface
+    readonly attribute long keyCode;
+    readonly attribute long charCode;
+    readonly attribute long which;
+};
diff --git a/core/events/WheelEvent.idl b/core/events/WheelEvent.idl
index 6c7acff..91fcf88 100644
--- a/core/events/WheelEvent.idl
+++ b/core/events/WheelEvent.idl
@@ -33,25 +33,8 @@
     [InitializedByEventConstructor] readonly attribute double deltaZ;
     [InitializedByEventConstructor] readonly attribute unsigned long deltaMode;
 
-    // Non standard API.
-    [InitializedByEventConstructor] readonly attribute long wheelDeltaX;
-    [InitializedByEventConstructor] readonly attribute long wheelDeltaY;
-    readonly attribute long wheelDelta;
-
-    // WebKit Extension
-    [MeasureAs=PrefixedWheelEventDirectionInvertedFromDevice]
-    readonly attribute boolean webkitDirectionInvertedFromDevice;
-
-    [MeasureAs=PrefixedWheelEventInit]
-    void initWebKitWheelEvent([Default=Undefined] optional long wheelDeltaX,
-                              [Default=Undefined] optional long wheelDeltaY,
-                              [Default=Undefined] optional Window view,
-                              [Default=Undefined] optional long screenX,
-                              [Default=Undefined] optional long screenY,
-                              [Default=Undefined] optional long clientX,
-                              [Default=Undefined] optional long clientY,
-                              [Default=Undefined] optional boolean ctrlKey,
-                              [Default=Undefined] optional boolean altKey,
-                              [Default=Undefined] optional boolean shiftKey,
-                              [Default=Undefined] optional boolean metaKey);
+    // Non-standard API.
+    [InitializedByEventConstructor, MeasureAs=WheelEventWheelDeltaX] readonly attribute long wheelDeltaX;
+    [InitializedByEventConstructor, MeasureAs=WheelEventWheelDeltaY] readonly attribute long wheelDeltaY;
+    [MeasureAs=WheelEventWheelDelta] readonly attribute long wheelDelta;
 };
diff --git a/core/fileapi/Blob.idl b/core/fileapi/Blob.idl
index df6662d..5f59e11 100644
--- a/core/fileapi/Blob.idl
+++ b/core/fileapi/Blob.idl
@@ -32,13 +32,13 @@
     WillBeGarbageCollected,
     CustomConstructor,
     CustomConstructor(sequence<any> blobParts, optional BlobPropertyBag options),
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     SpecialWrapFor=File,
 ] interface Blob {
     readonly attribute unsigned long long size;
     readonly attribute DOMString type;
 
-    [RaisesException] Blob slice(optional long long start, optional long long end, [TreatNullAs=NullString, TreatUndefinedAs=NullString] optional DOMString contentType);
+    [RaisesException] Blob slice(optional long long start, optional long long end, [TreatUndefinedAs=NullString] optional DOMString? contentType);
     [RaisesException, CallWith=ExecutionContext, RuntimeEnabled=FileAPIBlobClose] void close();
 };
 
diff --git a/core/fileapi/File.idl b/core/fileapi/File.idl
index db6c425..c338fa2 100644
--- a/core/fileapi/File.idl
+++ b/core/fileapi/File.idl
@@ -25,10 +25,10 @@
 
 [
     CustomConstructor(sequence<any> blobParts, DOMString fileName, optional BlobPropertyBag options),
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
 ] interface File : Blob {
     readonly attribute DOMString name;
-    [Custom=Getter, MeasureAs=FileGetLastModifiedDate] readonly attribute Date lastModifiedDate;
-    [Custom=Getter, RuntimeEnabled=FileConstructor] readonly attribute long long lastModified;
+    [MeasureAs=FileGetLastModifiedDate] readonly attribute Date lastModifiedDate;
+    readonly attribute long long lastModified;
     [MeasureAs=PrefixedFileRelativePath] readonly attribute DOMString webkitRelativePath;
 };
diff --git a/core/fileapi/FileList.idl b/core/fileapi/FileList.idl
index d822313..e7e296a 100644
--- a/core/fileapi/FileList.idl
+++ b/core/fileapi/FileList.idl
@@ -24,9 +24,9 @@
  */
 
 [
+    Exposed=(Window,Worker),
     WillBeGarbageCollected
 ] interface FileList {
     readonly attribute unsigned long length;
     getter File item(unsigned long index);
 };
-
diff --git a/core/fileapi/FileReader.idl b/core/fileapi/FileReader.idl
index 07bb5a8..d6cd5d0 100644
--- a/core/fileapi/FileReader.idl
+++ b/core/fileapi/FileReader.idl
@@ -34,7 +34,7 @@
     ActiveDOMObject,
     Constructor,
     ConstructorCallWith=ExecutionContext,
-    Exposed=Window&Worker
+    Exposed=(Window,Worker)
 ] interface FileReader : EventTarget {
     // ready states
     const unsigned short EMPTY = 0;
diff --git a/core/frame/ConsoleBase.idl b/core/frame/ConsoleBase.idl
index 26f9cde..508c5b9 100644
--- a/core/frame/ConsoleBase.idl
+++ b/core/frame/ConsoleBase.idl
@@ -31,21 +31,21 @@
     NoInterfaceObject,
     WillBeGarbageCollected,
 ] interface ConsoleBase {
-    [CallWith=ScriptArguments&ScriptState] void debug();
-    [CallWith=ScriptArguments&ScriptState] void error();
-    [CallWith=ScriptArguments&ScriptState] void info();
-    [CallWith=ScriptArguments&ScriptState] void log();
-    [CallWith=ScriptArguments&ScriptState] void warn();
-    [CallWith=ScriptArguments&ScriptState] void dir();
-    [CallWith=ScriptArguments&ScriptState] void dirxml();
-    [CallWith=ScriptArguments&ScriptState] void table();
-    [CallWith=ScriptArguments&ScriptState] void trace();
-    [CallWith=ScriptArguments&ScriptState, ImplementedAs=assertCondition, DartName=assertCondition] void assert([Default=Undefined] optional boolean condition);
-    [CallWith=ScriptArguments&ScriptState] void count();
+    [CallWith=(ScriptArguments,ScriptState)] void debug();
+    [CallWith=(ScriptArguments,ScriptState)] void error();
+    [CallWith=(ScriptArguments,ScriptState)] void info();
+    [CallWith=(ScriptArguments,ScriptState)] void log();
+    [CallWith=(ScriptArguments,ScriptState)] void warn();
+    [CallWith=(ScriptArguments,ScriptState)] void dir();
+    [CallWith=(ScriptArguments,ScriptState)] void dirxml();
+    [CallWith=(ScriptArguments,ScriptState)] void table();
+    [CallWith=(ScriptArguments,ScriptState)] void trace();
+    [CallWith=(ScriptArguments,ScriptState), ImplementedAs=assertCondition, DartName=assertCondition] void assert([Default=Undefined] optional boolean condition);
+    [CallWith=(ScriptArguments,ScriptState)] void count();
     [DeprecateAs=ConsoleMarkTimeline] void markTimeline(optional DOMString title = null);
 
-    [CallWith=ScriptState] void profile(optional DOMString title = null);
-    [CallWith=ScriptState] void profileEnd(optional DOMString title = null);
+    void profile(optional DOMString title = null);
+    void profileEnd(optional DOMString title = null);
 
     void time(optional DOMString title = null);
     [CallWith=ScriptState] void timeEnd(optional DOMString title = null);
@@ -54,8 +54,8 @@
     [CallWith=ScriptState] void timeline(optional DOMString title = null);
     [CallWith=ScriptState] void timelineEnd(optional DOMString title = null);
 
-    [CallWith=ScriptArguments&ScriptState] void group();
-    [CallWith=ScriptArguments&ScriptState] void groupCollapsed();
+    [CallWith=(ScriptArguments,ScriptState)] void group();
+    [CallWith=(ScriptArguments,ScriptState)] void groupCollapsed();
     void groupEnd();
-    [CallWith=ScriptArguments&ScriptState] void clear();
+    [CallWith=(ScriptArguments,ScriptState)] void clear();
 };
diff --git a/core/frame/Location.idl b/core/frame/Location.idl
index 25a0110..e4e9ff0 100644
--- a/core/frame/Location.idl
+++ b/core/frame/Location.idl
@@ -35,26 +35,26 @@
     // property of an *existing* document at a different origin.
     // However, *reading* |href|, or accessing any component, is a security
     // problem, since that allows tracking navigation.
-    [SetterCallWith=ActiveWindow&FirstWindow, DoNotCheckSecurity=Setter, Unforgeable, DartCustom=Setter] attribute DOMString href;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DoNotCheckSecurity=Setter, Unforgeable, DartCustom=Setter] attribute DOMString href;
 
-    [CallWith=ActiveWindow&FirstWindow, DoNotCheckSecurity, Unforgeable, ReadOnly, LogActivity, DartCustom] void assign(DOMString url);
-    [CallWith=ActiveWindow&FirstWindow, DoNotCheckSecurity, Unforgeable, ReadOnly, LogActivity, DartCustom] void replace(DOMString url);
-    [CallWith=ActiveWindow, Unforgeable, ReadOnly, DartCustom] void reload();
+    [CallWith=(ActiveWindow,FirstWindow), DoNotCheckSecurity, Unforgeable, DartCustom] void assign(DOMString url);
+    [CallWith=(ActiveWindow,FirstWindow), DoNotCheckSecurity, Unforgeable, DartCustom] void replace(DOMString url);
+    [CallWith=ActiveWindow, Unforgeable, DartCustom] void reload();
 
     // URI decomposition attributes
-    [SetterCallWith=ActiveWindow&FirstWindow, RaisesException=Setter, DartCustom=Setter] attribute DOMString protocol;
-    [SetterCallWith=ActiveWindow&FirstWindow, DartCustom=Setter] attribute DOMString host;
-    [SetterCallWith=ActiveWindow&FirstWindow, DartCustom=Setter] attribute DOMString hostname;
-    [SetterCallWith=ActiveWindow&FirstWindow, DartCustom=Setter] attribute DOMString port;
-    [SetterCallWith=ActiveWindow&FirstWindow, DartCustom=Setter] attribute DOMString pathname;
-    [SetterCallWith=ActiveWindow&FirstWindow, DartCustom=Setter] attribute DOMString search;
-    [SetterCallWith=ActiveWindow&FirstWindow, DartCustom=Setter] attribute DOMString hash;
+    [SetterCallWith=(ActiveWindow,FirstWindow), RaisesException=Setter, DartCustom=Setter] attribute DOMString protocol;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DartCustom=Setter] attribute DOMString host;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DartCustom=Setter] attribute DOMString hostname;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DartCustom=Setter] attribute DOMString port;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DartCustom=Setter] attribute DOMString pathname;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DartCustom=Setter] attribute DOMString search;
+    [SetterCallWith=(ActiveWindow,FirstWindow), DartCustom=Setter] attribute DOMString hash;
 
     readonly attribute DOMString origin;
 
     readonly attribute DOMStringList ancestorOrigins;
 
-    [NotEnumerable, Unforgeable, ReadOnly, ImplementedAs=href] DOMString toString();
-    [NotEnumerable, Custom, Unforgeable, ReadOnly] any valueOf();
+    [NotEnumerable, Unforgeable, ImplementedAs=href] DOMString toString();
+    [NotEnumerable, Custom, Unforgeable] any valueOf();
 };
 
diff --git a/core/frame/WebKitPoint.idl b/core/frame/WebKitPoint.idl
index bddd675..cc11b47 100644
--- a/core/frame/WebKitPoint.idl
+++ b/core/frame/WebKitPoint.idl
@@ -26,7 +26,7 @@
 [
     CustomConstructor,
     CustomConstructor(float x, float y),
-    ImplementedAs=DOMPoint,
+    MeasureAs=WebKitPoint,
     WillBeGarbageCollected,
 ] interface WebKitPoint {
     attribute float x;
diff --git a/core/frame/Window.idl b/core/frame/Window.idl
index 3e75b0b..f9f7d3e 100644
--- a/core/frame/Window.idl
+++ b/core/frame/Window.idl
@@ -45,7 +45,7 @@
     [Replaceable, MeasureAs=BarPropToolbar] readonly attribute BarProp toolbar;
     [LogActivity=GetterOnly] readonly attribute Navigator navigator;
     [Replaceable] readonly attribute Navigator clientInformation;
-    [DoNotCheckSecurity, Unforgeable, Replaceable, LogActivity, PutForwards=href] readonly attribute Location location;
+    [DoNotCheckSecurity, Unforgeable, Replaceable, PutForwards=href] readonly attribute Location location;
     [Custom, MeasureAs=WindowEvent, NotEnumerable] attribute Event event;
 
     Selection getSelection();
@@ -69,9 +69,9 @@
 
     void alert();
     void alert(DOMString message);
-    boolean confirm(optional DOMString message = null);
-    [TreatReturnedNullStringAs=Null] DOMString prompt(optional DOMString message = null,
-                                                      optional DOMString defaultValue = null);
+    boolean confirm(optional DOMString message = "");
+    DOMString? prompt(optional DOMString message = "",
+                      optional DOMString defaultValue = "");
 
     boolean find([Default=Undefined] optional DOMString string,
                  [Default=Undefined] optional boolean caseSensitive,
@@ -140,19 +140,14 @@
 
     // DOM Level 2 Style Interface
     CSSStyleDeclaration getComputedStyle([Default=Undefined] optional Element element,
-                                                            [TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString pseudoElement);
+                                         [TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? pseudoElement);
 
     // WebKit extensions
     [MeasureAs=GetMatchedCSSRules] CSSRuleList getMatchedCSSRules([Default=Undefined] optional Element element,
-                                                                  [TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString pseudoElement);
+                                                                  [TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? pseudoElement);
 
     [Replaceable] readonly attribute double devicePixelRatio;
 
-    [MeasureAs=PrefixedConvertPointFromPageToNode] WebKitPoint webkitConvertPointFromPageToNode([Default=Undefined] optional Node node,
-                                                                                                [Default=Undefined] optional WebKitPoint p);
-    [MeasureAs=PrefixedConvertPointFromNodeToPage] WebKitPoint webkitConvertPointFromNodeToPage([Default=Undefined] optional Node node,
-                                                                                                [Default=Undefined] optional WebKitPoint p);
-
     [RuntimeEnabled=ApplicationCache, LogActivity=GetterOnly] readonly attribute ApplicationCache applicationCache;
 
     [RuntimeEnabled=SessionStorage, LogActivity=GetterOnly, RaisesException=Getter] readonly attribute Storage sessionStorage;
@@ -166,7 +161,7 @@
     [Replaceable] readonly attribute Console console;
 
     // cross-document messaging
-    [DoNotCheckSecurity, Custom, RaisesException] void postMessage(SerializedScriptValue message, DOMString targetOrigin, optional MessagePort[] messagePorts);
+    [DoNotCheckSecurity, Custom, RaisesException] void postMessage(SerializedScriptValue message, DOMString targetOrigin, optional sequence<Transferable> transfer);
 
     [Replaceable] readonly attribute Performance performance;
 
@@ -193,7 +188,7 @@
     attribute EventHandler onwebkitanimationiteration;
     attribute EventHandler onwebkitanimationstart;
     attribute EventHandler onwebkittransitionend;
-    [LogActivity=SetterOnly] attribute EventHandler onwheel;
+    attribute EventHandler onwheel;
 
     [MeasureAs=WindowCaptureEvents] void captureEvents();
     [MeasureAs=WindowReleaseEvents] void releaseEvents();
@@ -205,12 +200,27 @@
     [MeasureAs=PrefixedMutationObserverConstructor] attribute MutationObserverConstructor WebKitMutationObserver;
 
     // window.toString() requires special handling in V8
-    [DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] DOMString toString();
+    [DoNotCheckSignature, DoNotCheckSecurity, Custom, NotEnumerable] stringifier;
 
     [NotEnumerable] getter Window (unsigned long index);
     [Custom, NotEnumerable] getter Window (DOMString name);
 };
 
+// http://www.whatwg.org/specs/web-apps/current-work/#transferable-objects
+//
+// Expressing the Transferable typedef in IDL depends on http://crbug.com/240176.
+// The postMessage() methods taking a Transferable array argument have custom
+// binding code that is able to handle the Transferables that we currently
+// recognize. To be able to declare a postMessage() signature that matches
+// the implementation, we provide a Transferable typedef but with an
+// incomplete type.
+//
+// FIXME: make this typedef accurate once enough of http://crbug.com/240176
+// is in place.
+// FIXME: consider putting this typedef in an .idl file containing spec-wide
+// utility type definitions.
+typedef MessagePort Transferable;
+
 Window implements GlobalEventHandlers;
 Window implements WindowBase64;
 Window implements WindowEventHandlers;
diff --git a/core/html/FormData.idl b/core/html/FormData.idl
index 5b51e24..bab02fc 100644
--- a/core/html/FormData.idl
+++ b/core/html/FormData.idl
@@ -32,7 +32,7 @@
 
 [
     Constructor(optional HTMLFormElement form),
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     ImplementedAs=DOMFormData,
     WillBeGarbageCollected,
 ] interface FormData {
diff --git a/core/html/HTMLBodyElement.idl b/core/html/HTMLBodyElement.idl
index 6f454c6..9a06a3c 100644
--- a/core/html/HTMLBodyElement.idl
+++ b/core/html/HTMLBodyElement.idl
@@ -19,12 +19,12 @@
  */
 
 interface HTMLBodyElement : HTMLElement {
-    [Reflect, TreatNullAs=NullString] attribute DOMString aLink;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString aLink;
     [Reflect] attribute DOMString background;
-    [Reflect, TreatNullAs=NullString] attribute DOMString bgColor;
-    [Reflect, TreatNullAs=NullString] attribute DOMString link;
-    [Reflect, TreatNullAs=NullString] attribute DOMString text;
-    [Reflect, TreatNullAs=NullString] attribute DOMString vLink;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString link;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString text;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString vLink;
 
     [RuntimeEnabled=OrientationEvent] attribute EventHandler onorientationchange;
 
diff --git a/core/html/HTMLButtonElement.idl b/core/html/HTMLButtonElement.idl
index d92dcd1..7845755 100644
--- a/core/html/HTMLButtonElement.idl
+++ b/core/html/HTMLButtonElement.idl
@@ -22,7 +22,7 @@
     [Reflect] attribute boolean autofocus;
     [Reflect] attribute boolean disabled;
     [ImplementedAs=formOwner] readonly attribute HTMLFormElement form;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString formAction;
+    [Reflect, URL] attribute DOMString formAction;
     attribute DOMString formEnctype;
     attribute DOMString formMethod;
     [Reflect] attribute boolean formNoValidate;
@@ -35,7 +35,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     readonly attribute NodeList labels;
 };
diff --git a/core/html/HTMLCanvasElement.idl b/core/html/HTMLCanvasElement.idl
index 5c851ab..47c796b 100644
--- a/core/html/HTMLCanvasElement.idl
+++ b/core/html/HTMLCanvasElement.idl
@@ -30,11 +30,11 @@
     attribute long height;
 
     // FIXMEDART: Upstream: Added the optional quality param that V8 accepts.
-    [Custom, RaisesException] DOMString toDataURL([TreatNullAs=NullString, TreatUndefinedAs=NullString,Default=Undefined] optional DOMString type, optional float quality);
+    [Custom, RaisesException] DOMString toDataURL([TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? type, optional float quality);
 
     // FIXMEDART:
     // - Upstream: Added the optional quality param that V8 accepts.
     // - Return RenderingContext.
     // The custom binding is needed to handle context creation attributes.
-    [Custom, LogActivity] any getContext([Default=Undefined] optional DOMString contextId, optional Dictionary attrs);
+    [Custom] any getContext([Default=Undefined] optional DOMString contextId, optional Dictionary attrs);
 };
diff --git a/core/html/HTMLDocument.idl b/core/html/HTMLDocument.idl
index 04ba97f..e166240 100644
--- a/core/html/HTMLDocument.idl
+++ b/core/html/HTMLDocument.idl
@@ -18,18 +18,15 @@
  * Boston, MA 02110-1301, USA.
  */
 
-[
-    // FIXME: Oilpan: remove this once Node specifies WillBeGarbageCollected.
-    WillBeGarbageCollected
-] interface HTMLDocument : Document {
+interface HTMLDocument : Document {
     [Custom, CustomElementCallbacks] void open();
     [RaisesException] void close();
 
     // We support multiple DOMString arguments to match FF / IE, e.g.:
     // document.write("a", "b", "c") --> document.write("abc")
     // document.write() --> document.write("")
-    [CallWith=ActiveWindow,LogActivity, CustomElementCallbacks, RaisesException] void write(DOMString... text);
-    [CallWith=ActiveWindow, LogActivity, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
+    [CallWith=ActiveWindow, CustomElementCallbacks, RaisesException] void write(DOMString... text);
+    [CallWith=ActiveWindow, CustomElementCallbacks, RaisesException] void writeln(DOMString... text);
 
     // Extensions
 
diff --git a/core/html/HTMLElement.idl b/core/html/HTMLElement.idl
index 65e7cb2..a138212 100644
--- a/core/html/HTMLElement.idl
+++ b/core/html/HTMLElement.idl
@@ -28,7 +28,7 @@
 
     [CustomElementCallbacks] attribute long              tabIndex;
     [CustomElementCallbacks] attribute boolean           draggable;
-    [Reflect, TreatNullAs=NullString] attribute DOMString webkitdropzone;
+    [Reflect, TreatNullAs=NullString, MeasureAs=PrefixedHTMLElementDropzone] attribute DOMString webkitdropzone;
     [Reflect] attribute boolean hidden;
     [Reflect] attribute DOMString accessKey;
 
diff --git a/core/html/HTMLEmbedElement.idl b/core/html/HTMLEmbedElement.idl
index 399417d..b07922d 100644
--- a/core/html/HTMLEmbedElement.idl
+++ b/core/html/HTMLEmbedElement.idl
@@ -24,7 +24,7 @@
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString height;
     [Reflect] attribute DOMString name;
-    [Reflect, URL, LogActivity=SetterOnly, LogPreviousValue] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString type;
     [Reflect] attribute DOMString width;
     [Custom, NotEnumerable] getter boolean (unsigned long index);
diff --git a/core/html/HTMLFieldSetElement.idl b/core/html/HTMLFieldSetElement.idl
index 94d9f0f..e8fcd53 100644
--- a/core/html/HTMLFieldSetElement.idl
+++ b/core/html/HTMLFieldSetElement.idl
@@ -30,5 +30,5 @@
     readonly attribute ValidityState   validity;
     readonly attribute DOMString       validationMessage;
     boolean  checkValidity();
-    void     setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void     setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 };
diff --git a/core/html/HTMLFontElement.idl b/core/html/HTMLFontElement.idl
index c0c56d4..cc7b704 100644
--- a/core/html/HTMLFontElement.idl
+++ b/core/html/HTMLFontElement.idl
@@ -18,7 +18,7 @@
  */
 
 interface HTMLFontElement : HTMLElement {
-    [Reflect, TreatNullAs=NullString] attribute DOMString color;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString color;
     [Reflect] attribute DOMString face;
     [Reflect] attribute DOMString size;
 };
diff --git a/core/html/HTMLFormElement.idl b/core/html/HTMLFormElement.idl
index 68283fc..6c2f1f9 100644
--- a/core/html/HTMLFormElement.idl
+++ b/core/html/HTMLFormElement.idl
@@ -22,7 +22,7 @@
     OverrideBuiltins,
 ] interface HTMLFormElement : HTMLElement {
     [Reflect=accept_charset] attribute DOMString acceptCharset;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString action;
+    [Reflect, URL] attribute DOMString action;
     [Reflect, ReflectOnly="on"|"off", ReflectMissing="on", ReflectInvalid="on"] attribute DOMString autocomplete;
     [CustomElementCallbacks] attribute DOMString enctype;
     [CustomElementCallbacks] attribute DOMString encoding;
@@ -36,7 +36,7 @@
     [ImplementedAs=item] getter Element (unsigned long index);
     [NotEnumerable] getter (RadioNodeList or Element) (DOMString name);
 
-    [ImplementedAs=submitFromJavaScript, LogActivity] void submit();
+    [ImplementedAs=submitFromJavaScript] void submit();
     [CustomElementCallbacks] void reset();
     boolean checkValidity();
 
diff --git a/core/html/HTMLFrameElement.idl b/core/html/HTMLFrameElement.idl
index ed43c3c..13c840c 100644
--- a/core/html/HTMLFrameElement.idl
+++ b/core/html/HTMLFrameElement.idl
@@ -22,12 +22,12 @@
 
     [Reflect] attribute DOMString frameBorder;
     [Reflect, URL] attribute DOMString longDesc;
-    [Reflect, TreatNullAs=NullString] attribute DOMString marginHeight;
-    [Reflect, TreatNullAs=NullString] attribute DOMString marginWidth;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
     [Reflect] attribute DOMString name;
     [Reflect] attribute boolean noResize;
     [Reflect] attribute DOMString scrolling;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
 
     // Introduced in DOM Level 2:
     [CheckSecurity=Node] readonly attribute Document contentDocument;
@@ -36,7 +36,4 @@
     readonly attribute Window contentWindow;
 
     [CheckSecurity=Node, RaisesException] Document getSVGDocument();
-
-    [MeasureAs=HTMLFrameElementWidth] readonly attribute long width;
-    [MeasureAs=HTMLFrameElementHeight] readonly attribute long height;
 };
diff --git a/core/html/HTMLIFrameElement.idl b/core/html/HTMLIFrameElement.idl
index 90c3a7a..568cd6b 100644
--- a/core/html/HTMLIFrameElement.idl
+++ b/core/html/HTMLIFrameElement.idl
@@ -20,15 +20,16 @@
 
 interface HTMLIFrameElement : HTMLElement {
     [Reflect] attribute DOMString align;
+    [Reflect] attribute boolean allowFullscreen;
     [Reflect] attribute DOMString frameBorder;
     [Reflect] attribute DOMString height;
     [Reflect, URL] attribute DOMString longDesc;
-    [Reflect, TreatNullAs=NullString] attribute DOMString marginHeight;
-    [Reflect, TreatNullAs=NullString] attribute DOMString marginWidth;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginHeight;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString marginWidth;
     [Reflect] attribute DOMString name;
     [Reflect, TreatNullAs=NullString] attribute DOMString sandbox;
     [Reflect] attribute DOMString scrolling;
-    [Reflect, URL, LogActivity=SetterOnly, LogPreviousValue] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString srcdoc;
     [Reflect] attribute DOMString width;
 
diff --git a/core/html/HTMLImageElement.idl b/core/html/HTMLImageElement.idl
index 1914a5f..bd0808a 100644
--- a/core/html/HTMLImageElement.idl
+++ b/core/html/HTMLImageElement.idl
@@ -26,18 +26,18 @@
 ] interface HTMLImageElement : HTMLElement {
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString alt;
-    [Reflect, TreatNullAs=NullString] attribute DOMString border;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString border;
     readonly attribute boolean complete;
     [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
     attribute long height;
     [Reflect] attribute long hspace;
     [Reflect] attribute boolean isMap;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString longDesc;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString lowsrc;
+    [Reflect, URL] attribute DOMString longDesc;
+    [Reflect, URL] attribute DOMString lowsrc;
     [Reflect] attribute DOMString name;
     readonly attribute long naturalHeight;
     readonly attribute long naturalWidth;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString srcset;
     [Reflect, RuntimeEnabled=PictureSizes] attribute DOMString sizes;
     [RuntimeEnabled=PictureSizes] readonly attribute DOMString currentSrc;
diff --git a/core/html/HTMLInputElement.idl b/core/html/HTMLInputElement.idl
index 8f44cfb..61a1ff6 100644
--- a/core/html/HTMLInputElement.idl
+++ b/core/html/HTMLInputElement.idl
@@ -35,7 +35,7 @@
     // The 'files' attribute is intentionally not readonly.
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22682
     attribute FileList files;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString formAction;
+    [Reflect, URL] attribute DOMString formAction;
     [CustomElementCallbacks] attribute DOMString formEnctype;
     [CustomElementCallbacks] attribute DOMString formMethod;
     [Reflect] attribute boolean formNoValidate;
@@ -54,13 +54,13 @@
     [Reflect] attribute boolean readOnly;
     [Reflect] attribute boolean required;
     [RaisesException=Setter, CustomElementCallbacks] attribute unsigned long size; // Changed string -> long -> unsigned long
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString step;
     [CustomElementCallbacks] attribute DOMString type; // readonly dropped as part of DOM level 2
-    [CustomElementCallbacks] attribute DOMString defaultValue;
+    [Reflect=value, CustomElementCallbacks] attribute DOMString defaultValue;
     [Reflect] attribute DOMString useMap;
     // See the discussion in https://bugs.webkit.org/show_bug.cgi?id=100085
-    [TreatNullAs=NullString, RaisesException=Setter, CustomElementCallbacks] attribute DOMString value;
+    [TreatNullAs=EmptyString, RaisesException=Setter, CustomElementCallbacks] attribute DOMString value;
     [RaisesException=Setter, CustomElementCallbacks] attribute Date? valueAsDate;
     [RaisesException=Setter, CustomElementCallbacks] attribute unrestricted double valueAsNumber;
 
@@ -72,7 +72,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     readonly attribute NodeList labels;
 
@@ -97,5 +97,5 @@
     [Reflect, MeasureAs=IncrementalAttribute] attribute boolean incremental;
 
     // See http://www.w3.org/TR/html-media-capture/
-    [Conditional=MEDIA_CAPTURE, Reflect] attribute boolean capture;
+    [RuntimeEnabled=MediaCapture, Reflect] attribute boolean capture;
 };
diff --git a/core/html/HTMLKeygenElement.idl b/core/html/HTMLKeygenElement.idl
index 4484e2b..3310c18 100644
--- a/core/html/HTMLKeygenElement.idl
+++ b/core/html/HTMLKeygenElement.idl
@@ -42,7 +42,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     readonly attribute NodeList labels;
 };
diff --git a/core/html/HTMLLinkElement.idl b/core/html/HTMLLinkElement.idl
index 3ba1aff..667acdb 100644
--- a/core/html/HTMLLinkElement.idl
+++ b/core/html/HTMLLinkElement.idl
@@ -22,7 +22,7 @@
 interface HTMLLinkElement : HTMLElement {
     [Reflect] attribute boolean disabled;
     [Reflect] attribute DOMString charset;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString href;
+    [Reflect, URL] attribute DOMString href;
     [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
     [Reflect] attribute DOMString hreflang;
     [Reflect] attribute DOMString media;
diff --git a/core/html/HTMLMarqueeElement.idl b/core/html/HTMLMarqueeElement.idl
index 0188f6c..19841be 100644
--- a/core/html/HTMLMarqueeElement.idl
+++ b/core/html/HTMLMarqueeElement.idl
@@ -21,17 +21,17 @@
     void start();
     void stop();
 
-    [Reflect] attribute DOMString behavior;
-    [Reflect] attribute DOMString bgColor;
-    [Reflect] attribute DOMString direction;
-    [Reflect] attribute DOMString height;
-    [Reflect] attribute unsigned long hspace;
-    [RaisesException=Setter] attribute long loop;
-    [RaisesException=Setter] attribute long scrollAmount;
-    [RaisesException=Setter] attribute long scrollDelay;
-    [Reflect] attribute boolean trueSpeed;
-    [Reflect] attribute unsigned long vspace;
-    [Reflect] attribute DOMString width;
+    [ImplementedInPrivateScript, Reflect] attribute DOMString behavior;
+    [ImplementedInPrivateScript, Reflect] attribute DOMString bgColor;
+    [ImplementedInPrivateScript, Reflect] attribute DOMString direction;
+    [ImplementedInPrivateScript, Reflect] attribute DOMString height;
+    [ImplementedInPrivateScript, Reflect] attribute unsigned long hspace;
+    [ImplementedInPrivateScript] attribute long loop;
+    [ImplementedInPrivateScript] attribute long scrollAmount;
+    [ImplementedInPrivateScript] attribute long scrollDelay;
+    [ImplementedInPrivateScript, Reflect] attribute boolean trueSpeed;
+    [ImplementedInPrivateScript, Reflect] attribute unsigned long vspace;
+    [ImplementedInPrivateScript, Reflect] attribute DOMString width;
 
     // FIXME: Implement the following event handler attributes
     // https://bugs.webkit.org/show_bug.cgi?id=49788
diff --git a/core/html/HTMLMediaElement.idl b/core/html/HTMLMediaElement.idl
index 3d87a59..aa9d040 100644
--- a/core/html/HTMLMediaElement.idl
+++ b/core/html/HTMLMediaElement.idl
@@ -30,11 +30,11 @@
 ] interface HTMLMediaElement : HTMLElement {
 
     // error state
-    [TypeChecking=Interface|Nullable] readonly attribute MediaError? error;
+    readonly attribute MediaError? error;
 
     // network state
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
-    [URL, LogActivity=SetterOnly] readonly attribute DOMString currentSrc;
+    [Reflect, URL] attribute DOMString src;
+    [URL] readonly attribute DOMString currentSrc;
     [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
 
     const unsigned short NETWORK_EMPTY = 0;
@@ -46,7 +46,7 @@
 
     readonly attribute TimeRanges buffered;
     void load();
-    DOMString canPlayType(DOMString type, [Default=Undefined, TreatNullAs=NullString, TreatUndefinedAs=NullString] optional DOMString keySystem);
+    DOMString canPlayType(DOMString type, [Default=Undefined, TreatUndefinedAs=NullString] optional DOMString? keySystem);
 
     // ready state
     const unsigned short HAVE_NOTHING = 0;
@@ -73,10 +73,10 @@
 
     // media controller
     [RuntimeEnabled=MediaController, Reflect] attribute DOMString mediaGroup;
-    [RuntimeEnabled=MediaController, TypeChecking=Interface|Nullable] attribute MediaController? controller;
+    [RuntimeEnabled=MediaController, TypeChecking=Interface] attribute MediaController? controller;
 
     // controls
-    attribute boolean controls;
+    [Reflect] attribute boolean controls;
     [RaisesException=Setter] attribute double volume;
     attribute boolean muted;
     [Reflect=muted] attribute boolean defaultMuted;
diff --git a/core/html/HTMLMenuElement.idl b/core/html/HTMLMenuElement.idl
index ea756fc..42110b5 100644
--- a/core/html/HTMLMenuElement.idl
+++ b/core/html/HTMLMenuElement.idl
@@ -18,6 +18,8 @@
  */
 
 interface HTMLMenuElement : HTMLElement {
+    [RuntimeEnabled=ContextMenu, Reflect] attribute DOMString type;
+    [RuntimeEnabled=ContextMenu, Reflect] attribute DOMString label;
     [Reflect] attribute boolean compact;
 };
 
diff --git a/core/html/HTMLMenuItemElement.idl b/core/html/HTMLMenuItemElement.idl
new file mode 100644
index 0000000..cf770ad
--- /dev/null
+++ b/core/html/HTMLMenuItemElement.idl
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=ContextMenu,
+] interface HTMLMenuItemElement : HTMLElement {
+    [Reflect] attribute DOMString type;
+    [Reflect] attribute DOMString label;
+    [Reflect] attribute boolean disabled;
+    [Reflect] attribute boolean checked;
+    [Reflect] attribute boolean default;
+    // FIXME: icon, radiogroup and command need to be implemented.
+};
diff --git a/core/html/HTMLModElement.idl b/core/html/HTMLModElement.idl
index 3c9bf9f..9b749b2 100644
--- a/core/html/HTMLModElement.idl
+++ b/core/html/HTMLModElement.idl
@@ -18,6 +18,6 @@
  */
 
 interface HTMLModElement : HTMLElement {
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString cite;
+    [Reflect, URL] attribute DOMString cite;
     [Reflect] attribute DOMString dateTime;
 };
diff --git a/core/html/HTMLObjectElement.idl b/core/html/HTMLObjectElement.idl
index b6c7cce..4eb6f39 100644
--- a/core/html/HTMLObjectElement.idl
+++ b/core/html/HTMLObjectElement.idl
@@ -25,10 +25,10 @@
     [Reflect] attribute DOMString code;
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString archive;
-    [Reflect, TreatNullAs=NullString] attribute DOMString border;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString border;
     [Reflect, URL] attribute DOMString codeBase;
     [Reflect] attribute DOMString codeType;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString data;
+    [Reflect, URL] attribute DOMString data;
     [Reflect] attribute boolean declare;
     [Reflect] attribute DOMString height;
     [Reflect] attribute long hspace;
@@ -42,7 +42,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     // Introduced in DOM Level 2:
     [CheckSecurity=Node] readonly attribute Document contentDocument;
diff --git a/core/html/HTMLOptionsCollection.idl b/core/html/HTMLOptionsCollection.idl
index 8493d14..01f3e25 100644
--- a/core/html/HTMLOptionsCollection.idl
+++ b/core/html/HTMLOptionsCollection.idl
@@ -26,12 +26,11 @@
     attribute long selectedIndex;
     [Custom=Setter, RaisesException=Setter] attribute unsigned long length;
     [ImplementedAs=item] getter Node (unsigned long index);
-    [RaisesException, TypeChecking=Interface|Nullable] setter HTMLOptionElement (unsigned long index, HTMLOptionElement? value);
+    [RaisesException, TypeChecking=Interface] setter HTMLOptionElement (unsigned long index, HTMLOptionElement? value);
 
     // FIXME: The spec and firefox return an Element (the first matching Element).
     [ImplementedAs=namedGetter] getter (NodeList or Element) namedItem(DOMString name);
 
     [Custom, RaisesException, DartSuppress] void add([Default=Undefined] optional HTMLOptionElement option, optional unsigned long index);
     void remove(unsigned long index);
-    [MeasureAs=HTMLOptionsCollectionRemoveElement, DartSuppress] void remove(HTMLOptionElement option); // non-standard
 };
diff --git a/core/html/HTMLOutputElement.idl b/core/html/HTMLOutputElement.idl
index ec24c46..c9fe3b2 100644
--- a/core/html/HTMLOutputElement.idl
+++ b/core/html/HTMLOutputElement.idl
@@ -35,7 +35,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     readonly attribute NodeList labels;
 };
diff --git a/core/html/HTMLPreElement.idl b/core/html/HTMLPreElement.idl
index 6224bc9..34742c6 100644
--- a/core/html/HTMLPreElement.idl
+++ b/core/html/HTMLPreElement.idl
@@ -20,7 +20,4 @@
 
 interface HTMLPreElement : HTMLElement {
     [Reflect] attribute long width;
-
-    // Extensions
-    [Reflect, MeasureAs=HTMLPreElementWrap] attribute boolean wrap;
 };
diff --git a/core/html/HTMLQuoteElement.idl b/core/html/HTMLQuoteElement.idl
index db0ab9d..c53a1a2 100644
--- a/core/html/HTMLQuoteElement.idl
+++ b/core/html/HTMLQuoteElement.idl
@@ -18,5 +18,5 @@
  */
 
 interface HTMLQuoteElement : HTMLElement {
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString cite;
+    [Reflect, URL] attribute DOMString cite;
 };
diff --git a/core/html/HTMLScriptElement.idl b/core/html/HTMLScriptElement.idl
index 71b5422..a626770 100644
--- a/core/html/HTMLScriptElement.idl
+++ b/core/html/HTMLScriptElement.idl
@@ -24,7 +24,7 @@
     [Reflect] attribute DOMString charset;
     attribute boolean async;
     [Reflect] attribute boolean defer;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString type;
     [Reflect, ReflectOnly="anonymous"|"use-credentials", ReflectEmpty="anonymous", ReflectInvalid="anonymous"] attribute DOMString crossOrigin;
     [Reflect, RuntimeEnabled=ExperimentalContentSecurityPolicyFeatures] attribute DOMString nonce;
diff --git a/core/html/HTMLSelectElement.idl b/core/html/HTMLSelectElement.idl
index 470d9c2..b4ddd80 100644
--- a/core/html/HTMLSelectElement.idl
+++ b/core/html/HTMLSelectElement.idl
@@ -42,7 +42,7 @@
     [ImplementedAs=addBeforeOptionAtIndex, RaisesException, TypeChecking=Interface] void add(HTMLElement element, long before);
     [RaisesException, DartSuppress] void remove(); // ChildNode overload
     [DartSuppress] void remove(long index);
-    [RaisesException, TypeChecking=Interface|Nullable] setter HTMLOptionElement (unsigned long index, HTMLOptionElement? value);
+    [RaisesException, TypeChecking=Interface] setter HTMLOptionElement (unsigned long index, HTMLOptionElement? value);
 
     readonly attribute HTMLCollection selectedOptions;
              attribute long selectedIndex;
@@ -52,7 +52,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     readonly attribute NodeList labels;
 };
diff --git a/core/html/HTMLSourceElement.idl b/core/html/HTMLSourceElement.idl
index 45f76b9..75cebb1 100644
--- a/core/html/HTMLSourceElement.idl
+++ b/core/html/HTMLSourceElement.idl
@@ -26,7 +26,7 @@
 [
     RuntimeEnabled=Media
 ] interface HTMLSourceElement : HTMLElement {
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     attribute DOMString type;
 
     [Reflect, RuntimeEnabled=Picture] attribute DOMString srcset;
diff --git a/core/html/HTMLTableCellElement.idl b/core/html/HTMLTableCellElement.idl
index 8f823e4..b201938 100644
--- a/core/html/HTMLTableCellElement.idl
+++ b/core/html/HTMLTableCellElement.idl
@@ -23,7 +23,7 @@
     [Reflect] attribute DOMString abbr;
     [Reflect] attribute DOMString align;
     [Reflect] attribute DOMString axis;
-    [Reflect, TreatNullAs=NullString] attribute DOMString bgColor;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
     [Reflect=char] attribute DOMString ch;
     [Reflect=charoff] attribute DOMString chOff;
     attribute long colSpan;
diff --git a/core/html/HTMLTableElement.idl b/core/html/HTMLTableElement.idl
index 3072583..e6897fa 100644
--- a/core/html/HTMLTableElement.idl
+++ b/core/html/HTMLTableElement.idl
@@ -26,10 +26,10 @@
     readonly attribute HTMLCollection rows;
     readonly attribute HTMLCollection tBodies;
     [Reflect] attribute DOMString align;
-    [Reflect, TreatNullAs=NullString] attribute DOMString bgColor;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
     [Reflect] attribute DOMString border;
-    [Reflect, TreatNullAs=NullString] attribute DOMString cellPadding;
-    [Reflect, TreatNullAs=NullString] attribute DOMString cellSpacing;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString cellPadding;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString cellSpacing;
 
     [Reflect] attribute DOMString frame;
 
diff --git a/core/html/HTMLTableRowElement.idl b/core/html/HTMLTableRowElement.idl
index e38f999..aadbc51 100644
--- a/core/html/HTMLTableRowElement.idl
+++ b/core/html/HTMLTableRowElement.idl
@@ -23,7 +23,7 @@
     readonly attribute long sectionRowIndex;
     readonly attribute HTMLCollection cells;
     [Reflect] attribute DOMString align;
-    [Reflect, TreatNullAs=NullString] attribute DOMString bgColor;
+    [Reflect, TreatNullAs=EmptyString] attribute DOMString bgColor;
     [Reflect=char] attribute DOMString ch;
     [Reflect=charoff] attribute DOMString chOff;
     [Reflect] attribute DOMString vAlign;
diff --git a/core/html/HTMLTextAreaElement.idl b/core/html/HTMLTextAreaElement.idl
index 937c8c9..be1804d 100644
--- a/core/html/HTMLTextAreaElement.idl
+++ b/core/html/HTMLTextAreaElement.idl
@@ -43,7 +43,7 @@
     readonly attribute ValidityState validity;
     readonly attribute DOMString validationMessage;
     boolean checkValidity();
-    void setCustomValidity([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString error);
+    void setCustomValidity([TreatUndefinedAs=NullString] DOMString? error);
 
     readonly attribute NodeList labels;
 
diff --git a/core/html/HTMLTrackElement.idl b/core/html/HTMLTrackElement.idl
index 7ad3e60..16f4cc6 100644
--- a/core/html/HTMLTrackElement.idl
+++ b/core/html/HTMLTrackElement.idl
@@ -25,7 +25,7 @@
 
 interface HTMLTrackElement : HTMLElement {
     attribute DOMString kind;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString src;
+    [Reflect, URL] attribute DOMString src;
     [Reflect] attribute DOMString srclang;
     [Reflect] attribute DOMString label;
     [Reflect] attribute boolean default;
diff --git a/core/html/HTMLVideoElement.idl b/core/html/HTMLVideoElement.idl
index 30825e5..04f6d1b 100644
--- a/core/html/HTMLVideoElement.idl
+++ b/core/html/HTMLVideoElement.idl
@@ -30,7 +30,7 @@
     [Reflect] attribute unsigned long height;
     readonly attribute unsigned long videoWidth;
     readonly attribute unsigned long videoHeight;
-    [Reflect, URL, LogActivity=SetterOnly] attribute DOMString poster;
+    [Reflect, URL] attribute DOMString poster;
 
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoSupportsFullscreen] readonly attribute boolean webkitSupportsFullscreen;
     [RuntimeEnabled=PrefixedVideoFullscreen, DeprecateAs=PrefixedVideoDisplayingFullscreen] readonly attribute boolean webkitDisplayingFullscreen;
diff --git a/core/html/ImageData.idl b/core/html/ImageData.idl
index 152822d..107ce0b 100644
--- a/core/html/ImageData.idl
+++ b/core/html/ImageData.idl
@@ -32,7 +32,7 @@
     Constructor(unsigned long width, unsigned long height),
     Constructor(Uint8ClampedArray data, unsigned long width, [Default=Undefined] optional unsigned long height),
     Custom=Wrap,
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     RaisesException=Constructor,
     WillBeGarbageCollected,
 ] interface ImageData {
diff --git a/core/html/MediaKeyError.idl b/core/html/MediaKeyError.idl
index d746c4c..da32f87 100644
--- a/core/html/MediaKeyError.idl
+++ b/core/html/MediaKeyError.idl
@@ -24,7 +24,8 @@
  */
 
 [
-    RuntimeEnabled=EncryptedMediaAnyVersion
+    RuntimeEnabled=EncryptedMediaAnyVersion,
+    WillBeGarbageCollected,
 ] interface MediaKeyError {
     const unsigned short MEDIA_KEYERR_UNKNOWN = 1;
     const unsigned short MEDIA_KEYERR_CLIENT = 2;
diff --git a/core/html/TextMetrics.idl b/core/html/TextMetrics.idl
index 14f1148..c7d929a 100644
--- a/core/html/TextMetrics.idl
+++ b/core/html/TextMetrics.idl
@@ -23,6 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
+    WillBeGarbageCollected,
 ] interface TextMetrics {
     // x-direction
     readonly attribute float width;
@@ -40,4 +41,3 @@
     [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute float alphabeticBaseline;
     [RuntimeEnabled=ExperimentalCanvasFeatures] readonly attribute float ideographicBaseline;
 };
-
diff --git a/core/html/TimeRanges.idl b/core/html/TimeRanges.idl
index e6e6e95..5c04549 100644
--- a/core/html/TimeRanges.idl
+++ b/core/html/TimeRanges.idl
@@ -24,6 +24,7 @@
  */
 
 [
+    WillBeGarbageCollected,
     RuntimeEnabled=Media
 ] interface TimeRanges {
     readonly attribute unsigned long length;
diff --git a/core/html/canvas/ANGLEInstancedArrays.idl b/core/html/canvas/ANGLEInstancedArrays.idl
index 4e63430..06f84e0 100644
--- a/core/html/canvas/ANGLEInstancedArrays.idl
+++ b/core/html/canvas/ANGLEInstancedArrays.idl
@@ -31,7 +31,8 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
+    WillBeGarbageCollected,
 ] interface ANGLEInstancedArrays {
     const unsigned long VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE = 0x88FE;
 
diff --git a/core/html/canvas/Canvas2DContextAttributes.idl b/core/html/canvas/Canvas2DContextAttributes.idl
index f6017b3..f7dfab1 100644
--- a/core/html/canvas/Canvas2DContextAttributes.idl
+++ b/core/html/canvas/Canvas2DContextAttributes.idl
@@ -25,7 +25,8 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface Canvas2DContextAttributes {
     attribute boolean alpha;
     [RuntimeEnabled=ExperimentalCanvasFeatures] attribute DOMString storage;
diff --git a/core/html/canvas/CanvasGradient.idl b/core/html/canvas/CanvasGradient.idl
index 3da025a..c5f5623 100644
--- a/core/html/canvas/CanvasGradient.idl
+++ b/core/html/canvas/CanvasGradient.idl
@@ -25,9 +25,9 @@
  */
 [
     TypeChecking=Unrestricted,
+    WillBeGarbageCollected,
 ] interface CanvasGradient {
 
     [RaisesException] void addColorStop(float offset, DOMString color);
 
 };
-
diff --git a/core/html/canvas/CanvasPattern.idl b/core/html/canvas/CanvasPattern.idl
index 1d8e7a0..d8e453d 100644
--- a/core/html/canvas/CanvasPattern.idl
+++ b/core/html/canvas/CanvasPattern.idl
@@ -23,6 +23,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
+    WillBeGarbageCollected,
 ] interface CanvasPattern {
 };
-
diff --git a/core/html/canvas/CanvasRenderingContext2D.idl b/core/html/canvas/CanvasRenderingContext2D.idl
index 22f2c23..aa076cc 100644
--- a/core/html/canvas/CanvasRenderingContext2D.idl
+++ b/core/html/canvas/CanvasRenderingContext2D.idl
@@ -38,7 +38,7 @@
 enum CanvasFillRule { "nonzero", "evenodd" };
 
 [
-    TypeChecking=Interface|Nullable|Unrestricted,
+    TypeChecking=Interface|Unrestricted,
     WillBeGarbageCollected,
 ] interface CanvasRenderingContext2D {
     // back-reference to the canvas
@@ -71,9 +71,9 @@
     [Custom] attribute object fillStyle; // (default black)
     CanvasGradient createLinearGradient(float x0, float y0, float x1, float y1);
     [RaisesException] CanvasGradient createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1);
-    [RaisesException] CanvasPattern createPattern(HTMLCanvasElement canvas, [TreatNullAs=NullString] DOMString repetitionType);
-    [RaisesException] CanvasPattern createPattern(HTMLImageElement image, [TreatNullAs=NullString] DOMString repetitionType);
-    [RaisesException] CanvasPattern createPattern(HTMLVideoElement image, [TreatNullAs=NullString] DOMString repetitionType);
+    [RaisesException] CanvasPattern createPattern(HTMLCanvasElement canvas, DOMString? repetitionType);
+    [RaisesException] CanvasPattern createPattern(HTMLImageElement image, DOMString? repetitionType);
+    [RaisesException] CanvasPattern createPattern(HTMLVideoElement image, DOMString? repetitionType);
 
     // shadows
     attribute unrestricted float shadowOffsetX;
@@ -123,6 +123,13 @@
     [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void drawImage(ImageBitmap imageBitmap, unrestricted float x, unrestricted float y, unrestricted float width, unrestricted float height);
     [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void drawImage(ImageBitmap imageBitmap, unrestricted float sx, unrestricted float sy, unrestricted float sw, unrestricted float sh, unrestricted float dx, unrestricted float dy, unrestricted float dw, unrestricted float dh);
 
+    // hit regions
+    // FIXME: Blink does not currently support WebIDL dictionary definitions.
+    // See http://crbug.com/321462
+    [RuntimeEnabled=ExperimentalCanvasFeatures, RaisesException] void addHitRegion(optional Dictionary options);
+    [RuntimeEnabled=ExperimentalCanvasFeatures] void removeHitRegion(DOMString id);
+    [RuntimeEnabled=ExperimentalCanvasFeatures] void clearHitRegions();
+
     // pixel manipulation
     [DartName=createImageDataFromImageData] ImageData createImageData(ImageData imagedata);
     [RaisesException] ImageData createImageData(float sw, float sh);
diff --git a/core/html/canvas/DataView.idl b/core/html/canvas/DataView.idl
index 4fc8961..9744bda 100644
--- a/core/html/canvas/DataView.idl
+++ b/core/html/canvas/DataView.idl
@@ -26,8 +26,8 @@
 [
     Custom=Wrap,
     CustomConstructor(ArrayBuffer buffer, optional unsigned long byteOffset, optional unsigned long byteLength),
-    Exposed=Window&Worker,
-    TypeChecking=Interface|Nullable,
+    Exposed=(Window,Worker),
+    TypeChecking=Interface,
 ] interface DataView : ArrayBufferView {
     // All these methods raise an exception if they would read or write beyond the end of the view.
 
diff --git a/core/html/canvas/EXTBlendMinMax.idl b/core/html/canvas/EXTBlendMinMax.idl
index 55baea7..fbc69bc 100644
--- a/core/html/canvas/EXTBlendMinMax.idl
+++ b/core/html/canvas/EXTBlendMinMax.idl
@@ -5,7 +5,8 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
+    WillBeGarbageCollected,
 ] interface EXTBlendMinMax {
     const unsigned long MIN_EXT              = 0x8007;
     const unsigned long MAX_EXT              = 0x8008;
diff --git a/core/html/canvas/EXTFragDepth.idl b/core/html/canvas/EXTFragDepth.idl
index 52a6f93..ab71f12 100644
--- a/core/html/canvas/EXTFragDepth.idl
+++ b/core/html/canvas/EXTFragDepth.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface EXTFragDepth {
 };
diff --git a/core/html/canvas/EXTShaderTextureLOD.idl b/core/html/canvas/EXTShaderTextureLOD.idl
index a2e18b6..975005a 100644
--- a/core/html/canvas/EXTShaderTextureLOD.idl
+++ b/core/html/canvas/EXTShaderTextureLOD.idl
@@ -3,6 +3,7 @@
 // found in the LICENSE file.
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface EXTShaderTextureLOD {
 };
diff --git a/core/html/canvas/EXTTextureFilterAnisotropic.idl b/core/html/canvas/EXTTextureFilterAnisotropic.idl
index 3fd2110..1588e48 100644
--- a/core/html/canvas/EXTTextureFilterAnisotropic.idl
+++ b/core/html/canvas/EXTTextureFilterAnisotropic.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface EXTTextureFilterAnisotropic {
     const unsigned long TEXTURE_MAX_ANISOTROPY_EXT = 0x84FE;
     const unsigned long MAX_TEXTURE_MAX_ANISOTROPY_EXT = 0x84FF;
diff --git a/core/html/canvas/MouseEventHitRegion.idl b/core/html/canvas/MouseEventHitRegion.idl
new file mode 100644
index 0000000..e501b4e
--- /dev/null
+++ b/core/html/canvas/MouseEventHitRegion.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#MouseEvent-partial
+
+[
+    RuntimeEnabled=ExperimentalCanvasFeatures
+] partial interface MouseEvent {
+    readonly attribute DOMString? region;
+};
diff --git a/core/html/canvas/OESElementIndexUint.idl b/core/html/canvas/OESElementIndexUint.idl
index ecb5d89..d4d8ea0 100644
--- a/core/html/canvas/OESElementIndexUint.idl
+++ b/core/html/canvas/OESElementIndexUint.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface OESElementIndexUint {
 };
diff --git a/core/html/canvas/OESStandardDerivatives.idl b/core/html/canvas/OESStandardDerivatives.idl
index 222f6ec..a517c7b 100644
--- a/core/html/canvas/OESStandardDerivatives.idl
+++ b/core/html/canvas/OESStandardDerivatives.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface OESStandardDerivatives {
     const unsigned long FRAGMENT_SHADER_DERIVATIVE_HINT_OES = 0x8B8B;
 };
diff --git a/core/html/canvas/OESTextureFloat.idl b/core/html/canvas/OESTextureFloat.idl
index f97da85..446d079 100644
--- a/core/html/canvas/OESTextureFloat.idl
+++ b/core/html/canvas/OESTextureFloat.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface OESTextureFloat {
 };
diff --git a/core/html/canvas/OESTextureFloatLinear.idl b/core/html/canvas/OESTextureFloatLinear.idl
index 25523fe..8cb531d 100644
--- a/core/html/canvas/OESTextureFloatLinear.idl
+++ b/core/html/canvas/OESTextureFloatLinear.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface OESTextureFloatLinear {
 };
diff --git a/core/html/canvas/OESTextureHalfFloat.idl b/core/html/canvas/OESTextureHalfFloat.idl
index 9543a89..b050cfa 100644
--- a/core/html/canvas/OESTextureHalfFloat.idl
+++ b/core/html/canvas/OESTextureHalfFloat.idl
@@ -27,7 +27,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface OESTextureHalfFloat {
     const GLenum HALF_FLOAT_OES                 = 0x8D61;
 };
diff --git a/core/html/canvas/OESTextureHalfFloatLinear.idl b/core/html/canvas/OESTextureHalfFloatLinear.idl
index 84e192d..201ca4d 100644
--- a/core/html/canvas/OESTextureHalfFloatLinear.idl
+++ b/core/html/canvas/OESTextureHalfFloatLinear.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface OESTextureHalfFloatLinear {
 };
diff --git a/core/html/canvas/OESVertexArrayObject.idl b/core/html/canvas/OESVertexArrayObject.idl
index 5a21f23..eba1db6 100644
--- a/core/html/canvas/OESVertexArrayObject.idl
+++ b/core/html/canvas/OESVertexArrayObject.idl
@@ -26,7 +26,8 @@
 [
     DoNotCheckConstants,
     NoInterfaceObject,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
+    WillBeGarbageCollected,
 ] interface OESVertexArrayObject {
     const unsigned long VERTEX_ARRAY_BINDING_OES = 0x85B5;
 
diff --git a/core/html/canvas/Path2D.idl b/core/html/canvas/Path2D.idl
index 2621485..c89979d 100644
--- a/core/html/canvas/Path2D.idl
+++ b/core/html/canvas/Path2D.idl
@@ -33,9 +33,10 @@
     Constructor(Path2D path),
     Constructor(DOMString text),
     RuntimeEnabled=Path2D,
+    WillBeGarbageCollected,
 ] interface Path2D {
 
-    [RuntimeEnabled=ExperimentalCanvasFeatures, TypeChecking=Interface|Nullable] void addPath(Path2D path, optional SVGMatrix? transform);
+    [RuntimeEnabled=ExperimentalCanvasFeatures, TypeChecking=Interface] void addPath(Path2D path, optional SVGMatrix? transform);
 };
 
 Path2D implements CanvasPathMethods;
diff --git a/core/html/canvas/WebGLActiveInfo.idl b/core/html/canvas/WebGLActiveInfo.idl
index 8443d8f..f4aa739 100644
--- a/core/html/canvas/WebGLActiveInfo.idl
+++ b/core/html/canvas/WebGLActiveInfo.idl
@@ -23,9 +23,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLActiveInfo {
+[
+    WillBeGarbageCollected,
+] interface WebGLActiveInfo {
     readonly attribute long size;
     readonly attribute unsigned long type;
     readonly attribute DOMString name;
 };
-
diff --git a/core/html/canvas/WebGLBuffer.idl b/core/html/canvas/WebGLBuffer.idl
index 5272404..aecd6b0 100644
--- a/core/html/canvas/WebGLBuffer.idl
+++ b/core/html/canvas/WebGLBuffer.idl
@@ -23,5 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLBuffer {
+[
+    WillBeGarbageCollected,
+] interface WebGLBuffer {
 };
diff --git a/core/html/canvas/WebGLCompressedTextureATC.idl b/core/html/canvas/WebGLCompressedTextureATC.idl
index e627f21..a66a329 100644
--- a/core/html/canvas/WebGLCompressedTextureATC.idl
+++ b/core/html/canvas/WebGLCompressedTextureATC.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLCompressedTextureATC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_ATC_WEBGL                     = 0x8C92;
diff --git a/core/html/canvas/WebGLCompressedTextureETC1.idl b/core/html/canvas/WebGLCompressedTextureETC1.idl
index e37d990..fd8759d 100644
--- a/core/html/canvas/WebGLCompressedTextureETC1.idl
+++ b/core/html/canvas/WebGLCompressedTextureETC1.idl
@@ -4,7 +4,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLCompressedTextureETC1 {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_ETC1_WEBGL = 0x8D64;
diff --git a/core/html/canvas/WebGLCompressedTexturePVRTC.idl b/core/html/canvas/WebGLCompressedTexturePVRTC.idl
index 3e25892..9eaa3a9 100644
--- a/core/html/canvas/WebGLCompressedTexturePVRTC.idl
+++ b/core/html/canvas/WebGLCompressedTexturePVRTC.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLCompressedTexturePVRTC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_PVRTC_4BPPV1_IMG  = 0x8C00;
diff --git a/core/html/canvas/WebGLCompressedTextureS3TC.idl b/core/html/canvas/WebGLCompressedTextureS3TC.idl
index 6f1973d..eef723f 100644
--- a/core/html/canvas/WebGLCompressedTextureS3TC.idl
+++ b/core/html/canvas/WebGLCompressedTextureS3TC.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLCompressedTextureS3TC {
     /* Compressed Texture Formats */
     const unsigned long COMPRESSED_RGB_S3TC_DXT1_EXT        = 0x83F0;
diff --git a/core/html/canvas/WebGLContextAttributes.idl b/core/html/canvas/WebGLContextAttributes.idl
index 0fe4662..ecd211a 100644
--- a/core/html/canvas/WebGLContextAttributes.idl
+++ b/core/html/canvas/WebGLContextAttributes.idl
@@ -25,7 +25,8 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface WebGLContextAttributes {
     attribute boolean alpha;
     attribute boolean depth;
diff --git a/core/html/canvas/WebGLDebugRendererInfo.idl b/core/html/canvas/WebGLDebugRendererInfo.idl
index f1cf633..bf95c1b 100644
--- a/core/html/canvas/WebGLDebugRendererInfo.idl
+++ b/core/html/canvas/WebGLDebugRendererInfo.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLDebugRendererInfo {
     const unsigned long UNMASKED_VENDOR_WEBGL = 0x9245;
     const unsigned long UNMASKED_RENDERER_WEBGL = 0x9246;
diff --git a/core/html/canvas/WebGLDebugShaders.idl b/core/html/canvas/WebGLDebugShaders.idl
index 74851c7..92c36be 100644
--- a/core/html/canvas/WebGLDebugShaders.idl
+++ b/core/html/canvas/WebGLDebugShaders.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
+    WillBeGarbageCollected,
 ] interface WebGLDebugShaders {
-    [TreatReturnedNullStringAs=Null] DOMString getTranslatedShaderSource(WebGLShader? shader);
+    DOMString? getTranslatedShaderSource(WebGLShader? shader);
 };
diff --git a/core/html/canvas/WebGLDepthTexture.idl b/core/html/canvas/WebGLDepthTexture.idl
index a6eb66a..d6a0874 100644
--- a/core/html/canvas/WebGLDepthTexture.idl
+++ b/core/html/canvas/WebGLDepthTexture.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLDepthTexture {
     const unsigned long UNSIGNED_INT_24_8_WEBGL = 0x84FA;
 };
diff --git a/core/html/canvas/WebGLDrawBuffers.idl b/core/html/canvas/WebGLDrawBuffers.idl
index d1a0f5f..82fc059 100644
--- a/core/html/canvas/WebGLDrawBuffers.idl
+++ b/core/html/canvas/WebGLDrawBuffers.idl
@@ -27,7 +27,8 @@
 
 [
     NoInterfaceObject,
-    DoNotCheckConstants
+    DoNotCheckConstants,
+    WillBeGarbageCollected,
 ] interface WebGLDrawBuffers {
     const GLenum COLOR_ATTACHMENT0_WEBGL = 0x8CE0;
     const GLenum COLOR_ATTACHMENT1_WEBGL = 0x8CE1;
diff --git a/core/html/canvas/WebGLFramebuffer.idl b/core/html/canvas/WebGLFramebuffer.idl
index 1fd6dd1..354f82f 100644
--- a/core/html/canvas/WebGLFramebuffer.idl
+++ b/core/html/canvas/WebGLFramebuffer.idl
@@ -23,5 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLFramebuffer {
+[
+    WillBeGarbageCollected,
+] interface WebGLFramebuffer {
 };
diff --git a/core/html/canvas/WebGLLoseContext.idl b/core/html/canvas/WebGLLoseContext.idl
index 117fcf2..c235567 100644
--- a/core/html/canvas/WebGLLoseContext.idl
+++ b/core/html/canvas/WebGLLoseContext.idl
@@ -25,7 +25,8 @@
 
 [
     NoInterfaceObject,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
+    WillBeGarbageCollected,
 ] interface WebGLLoseContext {
     void loseContext();
     void restoreContext();
diff --git a/core/html/canvas/WebGLProgram.idl b/core/html/canvas/WebGLProgram.idl
index 7cec34a..b637b22 100644
--- a/core/html/canvas/WebGLProgram.idl
+++ b/core/html/canvas/WebGLProgram.idl
@@ -23,5 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLProgram {
+[
+    WillBeGarbageCollected,
+] interface WebGLProgram {
 };
diff --git a/core/html/canvas/WebGLRenderbuffer.idl b/core/html/canvas/WebGLRenderbuffer.idl
index 2ecef6b..2e6792f 100644
--- a/core/html/canvas/WebGLRenderbuffer.idl
+++ b/core/html/canvas/WebGLRenderbuffer.idl
@@ -23,5 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLRenderbuffer {
+[
+    WillBeGarbageCollected,
+] interface WebGLRenderbuffer {
 };
diff --git a/core/html/canvas/WebGLRenderingContext.idl b/core/html/canvas/WebGLRenderingContext.idl
index ce2d483..6c12783 100644
--- a/core/html/canvas/WebGLRenderingContext.idl
+++ b/core/html/canvas/WebGLRenderingContext.idl
@@ -27,7 +27,7 @@
 
 [
     DoNotCheckConstants,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
     WillBeGarbageCollected,
 ] interface WebGLRenderingContext { };
 WebGLRenderingContext implements WebGLRenderingContextBase;
diff --git a/core/html/canvas/WebGLRenderingContextBase.idl b/core/html/canvas/WebGLRenderingContextBase.idl
index e6b013e..a790556 100644
--- a/core/html/canvas/WebGLRenderingContextBase.idl
+++ b/core/html/canvas/WebGLRenderingContextBase.idl
@@ -41,11 +41,12 @@
 typedef unrestricted float GLclampf;
 
 [
-    // FIXME: [DoNotCheckConstants] and [TypeChecking=Interface|Nullable] should be applied
+    // FIXME: [DoNotCheckConstants] and [TypeChecking=Interface|Unrestricted] should be applied
     // to members and not need to be put on implementing interface
     // DoNotCheckConstants, // need to put on implementing interface
     NoInterfaceObject, // Always used on target of 'implements'
-    // TypeChecking=Interface|Nullable|Unrestricted, // need to put on implementing interface
+    // TypeChecking=Interface|Unrestricted, // need to put on implementing interface
+    WillBeGarbageCollected,
 ] interface WebGLRenderingContextBase {
 
     readonly attribute HTMLCanvasElement canvas;
@@ -545,7 +546,7 @@
     [DartNoAutoScope] WebGLActiveInfo getActiveAttrib(WebGLProgram? program, GLuint index);
     [DartNoAutoScope] WebGLActiveInfo getActiveUniform(WebGLProgram? program, GLuint index);
 
-    [Custom, DartNoAutoScope] void getAttachedShaders(WebGLProgram? program);
+    [DartNoAutoScope] sequence<WebGLShader>? getAttachedShaders(WebGLProgram? program);
 
     [DartNoAutoScope] GLint getAttribLocation(WebGLProgram? program, DOMString name);
 
@@ -561,21 +562,21 @@
     [Custom] any getFramebufferAttachmentParameter(GLenum target, GLenum attachment, GLenum pname);
     [Custom] any getParameter(GLenum pname);
     [Custom] any getProgramParameter(WebGLProgram? program, GLenum pname);
-    [TreatReturnedNullStringAs=Null] DOMString getProgramInfoLog(WebGLProgram? program);
+    DOMString? getProgramInfoLog(WebGLProgram? program);
     [Custom] any getRenderbufferParameter(GLenum target, GLenum pname);
     [Custom] any getShaderParameter(WebGLShader? shader, GLenum pname);
 
-    [TreatReturnedNullStringAs=Null] DOMString    getShaderInfoLog(WebGLShader? shader);
+    DOMString?   getShaderInfoLog(WebGLShader? shader);
 
     WebGLShaderPrecisionFormat getShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype);
 
-    [TreatReturnedNullStringAs=Null] DOMString    getShaderSource(WebGLShader? shader);
+    DOMString?   getShaderSource(WebGLShader? shader);
 
-    [Custom] sequence<DOMString> getSupportedExtensions();
+    sequence<DOMString>? getSupportedExtensions();
 
     [Custom] any getTexParameter(GLenum target, GLenum pname);
 
-    [Custom] any getUniform(WebGLProgram? program, WebGLUniformLocation location);
+    [Custom] any getUniform(WebGLProgram? program, WebGLUniformLocation? location);
 
     WebGLUniformLocation getUniformLocation(WebGLProgram? program, DOMString name);
 
diff --git a/core/html/canvas/WebGLShader.idl b/core/html/canvas/WebGLShader.idl
index 624d490..1d48fd6 100644
--- a/core/html/canvas/WebGLShader.idl
+++ b/core/html/canvas/WebGLShader.idl
@@ -23,5 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLShader {
+[
+    WillBeGarbageCollected,
+] interface WebGLShader {
 };
diff --git a/core/html/canvas/WebGLShaderPrecisionFormat.idl b/core/html/canvas/WebGLShaderPrecisionFormat.idl
index 021beb6..f9531c5 100644
--- a/core/html/canvas/WebGLShaderPrecisionFormat.idl
+++ b/core/html/canvas/WebGLShaderPrecisionFormat.idl
@@ -24,9 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLShaderPrecisionFormat {
+[
+    WillBeGarbageCollected,
+] interface WebGLShaderPrecisionFormat {
     readonly attribute long rangeMin;
     readonly attribute long rangeMax;
     readonly attribute long precision;
 };
-
diff --git a/core/html/canvas/WebGLTexture.idl b/core/html/canvas/WebGLTexture.idl
index caed3ac..7a1583c 100644
--- a/core/html/canvas/WebGLTexture.idl
+++ b/core/html/canvas/WebGLTexture.idl
@@ -23,5 +23,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLTexture {
+[
+    WillBeGarbageCollected,
+] interface WebGLTexture {
 };
diff --git a/core/html/canvas/WebGLUniformLocation.idl b/core/html/canvas/WebGLUniformLocation.idl
index 503804e..bac3601 100644
--- a/core/html/canvas/WebGLUniformLocation.idl
+++ b/core/html/canvas/WebGLUniformLocation.idl
@@ -24,5 +24,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-interface WebGLUniformLocation {
+[
+    WillBeGarbageCollected,
+] interface WebGLUniformLocation {
 };
diff --git a/core/html/canvas/WebGLVertexArrayObjectOES.idl b/core/html/canvas/WebGLVertexArrayObjectOES.idl
index 6c07bd1..2a9e5bc 100644
--- a/core/html/canvas/WebGLVertexArrayObjectOES.idl
+++ b/core/html/canvas/WebGLVertexArrayObjectOES.idl
@@ -24,6 +24,7 @@
  */
 
 [
-    NoInterfaceObject
+    NoInterfaceObject,
+    WillBeGarbageCollected,
 ] interface WebGLVertexArrayObjectOES {
 };
diff --git a/core/html/track/TextTrackCue.idl b/core/html/track/TextTrackCue.idl
index d243c43..ba325a1 100644
--- a/core/html/track/TextTrackCue.idl
+++ b/core/html/track/TextTrackCue.idl
@@ -31,7 +31,7 @@
     TypeChecking=Unrestricted,
     WillBeGarbageCollected,
 ] interface TextTrackCue : EventTarget {
-    readonly attribute TextTrack track; // FIXME: should be nullable
+    readonly attribute TextTrack? track;
 
              attribute DOMString id;
              attribute double startTime;
diff --git a/modules/imagebitmap/ImageBitmapFactories.idl b/core/imagebitmap/ImageBitmapFactories.idl
similarity index 98%
rename from modules/imagebitmap/ImageBitmapFactories.idl
rename to core/imagebitmap/ImageBitmapFactories.idl
index f095d8c..1b34ea7 100644
--- a/modules/imagebitmap/ImageBitmapFactories.idl
+++ b/core/imagebitmap/ImageBitmapFactories.idl
@@ -46,7 +46,7 @@
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
     RuntimeEnabled=ExperimentalCanvasFeatures,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface ImageBitmapFactories {
     [CallWith=ScriptState, RaisesException] Promise createImageBitmap(Blob blob);
     [CallWith=ScriptState, RaisesException] Promise createImageBitmap(Blob blob, long sx, long sy, long sw, long sh);
diff --git a/modules/imagebitmap/WindowImageBitmapFactories.idl b/core/imagebitmap/WindowImageBitmapFactories.idl
similarity index 98%
rename from modules/imagebitmap/WindowImageBitmapFactories.idl
rename to core/imagebitmap/WindowImageBitmapFactories.idl
index f7b85df..cf877c5 100644
--- a/modules/imagebitmap/WindowImageBitmapFactories.idl
+++ b/core/imagebitmap/WindowImageBitmapFactories.idl
@@ -31,7 +31,7 @@
 [
     ImplementedAs=ImageBitmapFactories,
     RuntimeEnabled=ExperimentalCanvasFeatures,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] partial interface Window {
     [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLImageElement image);
     [CallWith=ScriptState, RaisesException] Promise createImageBitmap(HTMLImageElement image, long sx, long sy, long sw, long sh);
diff --git a/core/inspector/CodeGeneratorInspector.py b/core/inspector/CodeGeneratorInspector.py
index ce6dae1..7d4be18 100755
--- a/core/inspector/CodeGeneratorInspector.py
+++ b/core/inspector/CodeGeneratorInspector.py
@@ -156,7 +156,7 @@
 
     ABBREVIATION = frozenset(["XHR", "DOM", "CSS"])
 
-VALIDATOR_IFDEF_NAME = "ASSERT_ENABLED"
+VALIDATOR_IFDEF_NAME = "ENABLE(ASSERT)"
 
 
 class DomainNameFixes:
diff --git a/core/inspector/CodeGeneratorInspectorStrings.py b/core/inspector/CodeGeneratorInspectorStrings.py
index f9b8127..83705c5 100644
--- a/core/inspector/CodeGeneratorInspectorStrings.py
+++ b/core/inspector/CodeGeneratorInspectorStrings.py
@@ -102,7 +102,7 @@
 #include "wtf/PassRefPtr.h"
 #include "wtf/text/WTFString.h"
 
-namespace WebCore {
+namespace blink {
 
 typedef String ErrorString;
 
@@ -116,7 +116,7 @@
     InspectorFrontendChannel* m_inspectorFrontendChannel;
 ${fieldDeclarations}};
 
-} // namespace WebCore
+} // namespace blink
 #endif // !defined(InspectorFrontend_h)
 """)
 
@@ -130,7 +130,7 @@
 #include "wtf/RefCounted.h"
 #include "wtf/text/WTFString.h"
 
-namespace WebCore {
+namespace blink {
 
 class JSONObject;
 class JSONArray;
@@ -198,7 +198,7 @@
     static const size_t commandNamesIndex[];
 };
 
-} // namespace WebCore
+} // namespace blink
 #endif // !defined(InspectorBackendDispatcher_h)
 
 
@@ -216,7 +216,7 @@
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
 
-namespace WebCore {
+namespace blink {
 
 const char InspectorBackendDispatcher::commandNames[] = {
 $methodNameDeclarations
@@ -508,7 +508,7 @@
     m_alreadySent = true;
 }
 
-} // namespace WebCore
+} // namespace blink
 
 """)
 
@@ -523,7 +523,7 @@
 #include "wtf/text/CString.h"
 #include "wtf/text/WTFString.h"
 
-namespace WebCore {
+namespace blink {
 
 InspectorFrontend::InspectorFrontend(InspectorFrontendChannel* inspectorFrontendChannel)
     : m_inspectorFrontendChannel(inspectorFrontendChannel)
@@ -533,7 +533,7 @@
 
 $methods
 
-} // namespace WebCore
+} // namespace blink
 
 """)
 
@@ -546,7 +546,7 @@
 #include "wtf/Assertions.h"
 #include "wtf/PassRefPtr.h"
 
-namespace WebCore {
+namespace blink {
 
 namespace TypeBuilder {
 
@@ -841,7 +841,7 @@
 } // namespace TypeBuilder
 
 
-} // namespace WebCore
+} // namespace blink
 
 #endif // !defined(InspectorTypeBuilder_h)
 
@@ -855,7 +855,7 @@
 #include "InspectorTypeBuilder.h"
 #include "wtf/text/CString.h"
 
-namespace WebCore {
+namespace blink {
 
 namespace TypeBuilder {
 
@@ -890,7 +890,7 @@
 
 #endif // $validatorIfdefName
 
-} // namespace WebCore
+} // namespace blink
 
 """)
 
diff --git a/core/inspector/CodeGeneratorInstrumentation.py b/core/inspector/CodeGeneratorInstrumentation.py
index c313717..aa0335e 100755
--- a/core/inspector/CodeGeneratorInstrumentation.py
+++ b/core/inspector/CodeGeneratorInstrumentation.py
@@ -39,14 +39,16 @@
 
 ${includes}
 
-namespace WebCore {
+namespace blink {
+
+${forward_declarations}
 
 namespace InspectorInstrumentation {
 
 $methods
 } // namespace InspectorInstrumentation
 
-} // namespace WebCore
+} // namespace blink
 
 #endif // !defined(${file_name}_h)
 """)
@@ -82,7 +84,7 @@
 
 ${includes}
 
-namespace WebCore {
+namespace blink {
 ${extra_definitions}
 
 namespace InspectorInstrumentation {
@@ -90,7 +92,7 @@
 
 } // namespace InspectorInstrumentation
 
-} // namespace WebCore
+} // namespace blink
 """)
 
 template_outofline = string.Template("""
@@ -115,24 +117,26 @@
 #ifndef InstrumentingAgentsInl_h
 #define InstrumentingAgentsInl_h
 
+#include "platform/heap/Handle.h"
 #include "wtf/FastAllocBase.h"
 #include "wtf/Noncopyable.h"
 #include "wtf/PassRefPtr.h"
 #include "wtf/RefCounted.h"
 
-namespace WebCore {
+namespace blink {
 
 ${forward_list}
 
-class InstrumentingAgents : public RefCounted<InstrumentingAgents> {
+class InstrumentingAgents : public RefCountedWillBeGarbageCollectedFinalized<InstrumentingAgents> {
     WTF_MAKE_NONCOPYABLE(InstrumentingAgents);
-    WTF_MAKE_FAST_ALLOCATED;
+    WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
 public:
-    static PassRefPtr<InstrumentingAgents> create()
+    static PassRefPtrWillBeRawPtr<InstrumentingAgents> create()
     {
-        return adoptRef(new InstrumentingAgents());
+        return adoptRefWillBeNoop(new InstrumentingAgents());
     }
     ~InstrumentingAgents() { }
+    void trace(Visitor*);
     void reset();
 
 ${accessor_list}
@@ -158,6 +162,11 @@
 {
 }
 
+void InstrumentingAgents::trace(Visitor* visitor)
+{
+    $trace_list
+}
+
 void InstrumentingAgents::reset()
 {
     $reset_list
@@ -195,6 +204,7 @@
         self.name = name
         self.header_name = self.name + "Inl"
         self.includes = [include_inspector_header("InspectorInstrumentation")]
+        self.forward_declarations = []
         self.declarations = []
         for line in map(str.strip, source.split("\n")):
             line = re.sub("\s{2,}", " ", line).strip()  # Collapse whitespace
@@ -202,9 +212,12 @@
                 continue
             if line[0] == "#":
                 self.includes.append(line)
+            elif line.startswith("class "):
+                self.forward_declarations.append(line)
             else:
                 self.declarations.append(Method(line))
         self.includes.sort()
+        self.forward_declarations.sort()
 
     def generate(self, cpp_lines, used_agents):
         header_lines = []
@@ -217,6 +230,7 @@
         return template_h.substitute(None,
                                      file_name=self.header_name,
                                      includes="\n".join(self.includes),
+                                     forward_declarations="\n".join(self.forward_declarations),
                                      methods="\n".join(header_lines))
 
 
@@ -247,6 +261,8 @@
 
         if self.return_type == "bool":
             self.default_return_value = "false"
+        elif self.return_type == "int":
+            self.default_return_value = "0"
         elif self.return_type == "String":
             self.default_return_value = "\"\""
         else:
@@ -440,6 +456,7 @@
     accessor_list = []
     member_list = []
     init_list = []
+    trace_list = []
     reset_list = []
 
     for agent in agents:
@@ -452,14 +469,16 @@
             class_name=class_name,
             getter_name=getter_name,
             member_name=member_name))
-        member_list.append("    %s* %s;" % (class_name, member_name))
-        init_list.append("%s(0)" % member_name)
-        reset_list.append("%s = 0;" % member_name)
+        member_list.append("    RawPtrWillBeMember<%s> %s;" % (class_name, member_name))
+        init_list.append("%s(nullptr)" % member_name)
+        trace_list.append("visitor->trace(%s);" % member_name)
+        reset_list.append("%s = nullptr;" % member_name)
 
     forward_list.sort()
     accessor_list.sort()
     member_list.sort()
     init_list.sort()
+    trace_list.sort()
     reset_list.sort()
 
     header_lines = template_instrumenting_agents_h.substitute(
@@ -471,6 +490,7 @@
     cpp_lines = template_instrumenting_agents_cpp.substitute(
         None,
         init_list="\n    , ".join(init_list),
+        trace_list="\n    ".join(trace_list),
         reset_list="\n    ".join(reset_list))
 
     return header_lines, cpp_lines
diff --git a/core/inspector/InjectedScriptHost.idl b/core/inspector/InjectedScriptHost.idl
index 5dec0fc..018f9d2 100644
--- a/core/inspector/InjectedScriptHost.idl
+++ b/core/inspector/InjectedScriptHost.idl
@@ -31,25 +31,28 @@
  */
 
 [
+    WillBeGarbageCollected,
     NoInterfaceObject
 ] interface InjectedScriptHost {
-    void clearConsoleMessages();
+    [NotEnumerable, Unforgeable] void clearConsoleMessages();
 
-    [Custom] void inspect(any objectId, any hints);
-    [Custom] any inspectedObject(long num);
-    [Custom] any internalConstructorName(any obj);
-    [Custom] boolean isHTMLAllCollection(any obj);
-    [Custom] DOMString type(any obj);
-    [Custom] any functionDetails(any obj);
-    [Custom] any[] getInternalProperties(any obj);
-    [Custom] EventListener[] getEventListeners(EventTarget target);
-    [Custom] any evaluate(DOMString text);
-    [Custom] void debugFunction(any fn);
-    [Custom] void undebugFunction(any fn);
-    [Custom] void monitorFunction(any fn);
-    [Custom] void unmonitorFunction(any fn);
-    [Custom] any suppressWarningsAndCall(any receiver, any fn, any param1, any param2);
+    [NotEnumerable, Unforgeable, Custom] void inspect(any objectId, any hints);
+    [NotEnumerable, Unforgeable, Custom] any inspectedObject(long num);
+    [NotEnumerable, Unforgeable, Custom] any internalConstructorName(any obj);
+    [NotEnumerable, Unforgeable, Custom] boolean isHTMLAllCollection(any obj);
+    [NotEnumerable, Unforgeable, Custom] DOMString type(any obj);
+    [NotEnumerable, Unforgeable, Custom] any functionDetails(any obj);
+    [NotEnumerable, Unforgeable, Custom] any[] getInternalProperties(any obj);
+    [NotEnumerable, Unforgeable, Custom] EventListener[] getEventListeners(EventTarget target);
+    [NotEnumerable, Unforgeable, Custom] any eval(DOMString text);
+    [NotEnumerable, Unforgeable, Custom] any evaluateWithExceptionDetails(DOMString text);
+    [NotEnumerable, Unforgeable, Custom] void debugFunction(any fn);
+    [NotEnumerable, Unforgeable, Custom] void undebugFunction(any fn);
+    [NotEnumerable, Unforgeable, Custom] void monitorFunction(any fn);
+    [NotEnumerable, Unforgeable, Custom] void unmonitorFunction(any fn);
+    [NotEnumerable, Unforgeable, Custom] any callFunction(any fn, any receiver, any[] argv);
+    [NotEnumerable, Unforgeable, Custom] any suppressWarningsAndCallFunction(any fn, any receiver, any[] argv);
 
     // Only declarative scope (local, with and catch) is accepted. Returns undefined.
-    [Custom] any setFunctionVariableValue(any functionObject, long scopeIndex, DOMString variableName, any newValue);
+    [NotEnumerable, Unforgeable, Custom] any setFunctionVariableValue(any functionObject, long scopeIndex, DOMString variableName, any newValue);
 };
diff --git a/core/inspector/InspectorFrontendHost.idl b/core/inspector/InspectorFrontendHost.idl
index 058608a..c655170 100644
--- a/core/inspector/InspectorFrontendHost.idl
+++ b/core/inspector/InspectorFrontendHost.idl
@@ -31,6 +31,7 @@
  */
 
 [
+    WillBeGarbageCollected,
     NoInterfaceObject
 ] interface InspectorFrontendHost {
     // FIXME: setZoomFactor is here only for old frontends. Remove in M38.
@@ -43,7 +44,9 @@
 
     [Custom] DOMString platform();
     [Custom] DOMString port();
+    // FIXME: showContextMenu is here only for old frontends. Remove in M43.
     [Custom] void showContextMenu(MouseEvent event, any items);
+    [Custom] void showContextMenuAtPoint(float x, float y, any items);
     void sendMessageToBackend(DOMString message);
     void sendMessageToEmbedder(DOMString message);
 
@@ -54,4 +57,5 @@
     DOMString getSelectionForegroundColor();
 
     boolean isUnderTest();
+    boolean isHostedMode();
 };
diff --git a/core/inspector/InspectorInstrumentation.idl b/core/inspector/InspectorInstrumentation.idl
index d8d4ec1..d1d5b3b 100644
--- a/core/inspector/InspectorInstrumentation.idl
+++ b/core/inspector/InspectorInstrumentation.idl
@@ -71,6 +71,9 @@
     void didClearDocumentOfWindowObject([Keep] LocalFrame*);
 
     [DOMDebugger, Inline=FastReturn]
+    void willCloseWindow(ExecutionContext*);
+
+    [DOMDebugger, Inline=FastReturn]
     void willInsertDOMNode([Keep] Node* parent);
 
     [DOM, DOMDebugger, Inline=FastReturn]
@@ -190,6 +193,18 @@
     [Debugger, Inline=FastReturn]
     void didDeliverMutationRecords(ExecutionContext*);
 
+    [Debugger, Inline=FastReturn]
+    void didPostExecutionContextTask([Keep] ExecutionContext*, ExecutionContextTask*);
+
+    [Debugger, Inline=FastReturn]
+    void didKillAllExecutionContextTasks([Keep] ExecutionContext*);
+
+    [Debugger, Inline=FastReturn]
+    void willPerformExecutionContextTask([Keep] ExecutionContext*, ExecutionContextTask*);
+
+    [Debugger, Inline=FastReturn]
+    void didPerformExecutionContextTask(ExecutionContext*);
+
     [Timeline, Inline=FastReturn]
     InspectorInstrumentationCookie willEvaluateScript([Keep] LocalFrame*, const String& url, int lineNumber);
 
@@ -226,6 +241,9 @@
     [Timeline, Inline=FastReturn]
     void didDispatchXHRLoadEvent(const InspectorInstrumentationCookie&);
 
+    [Debugger, Inline=FastReturn]
+    void didDispatchXHRLoadendEvent(ExecutionContext*, XMLHttpRequest*);
+
     [Timeline, Inline=FastReturn]
     void willScrollLayer([Keep] RenderObject*);
 
@@ -275,9 +293,6 @@
     void continueAfterXFrameOptionsDenied(LocalFrame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
 
     [Inline=Forward]
-    void continueWithPolicyDownload(LocalFrame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
-
-    [Inline=Forward]
     void continueWithPolicyIgnore(LocalFrame* frame, DocumentLoader* loader, unsigned long identifier, const ResourceResponse& r);
 
     [Timeline, Resource, Inline=FastReturn]
@@ -439,24 +454,38 @@
 
     [DOMDebugger, Inline=FastReturn]
     void willExecuteCustomElementCallback([Keep] Element*);
+
+    [Debugger, Inline=FastReturn]
+    int traceAsyncOperationStarting([Keep] ExecutionContext*, const String& operationName);
+
+    [Debugger, Inline=FastReturn]
+    int traceAsyncOperationStarting([Keep] ExecutionContext*, const String& operationName, int prevOperationId);
+
+    [Debugger, Inline=FastReturn]
+    void traceAsyncOperationCompleted([Keep] ExecutionContext*, int operationId);
+
+    [Debugger, Inline=FastReturn]
+    InspectorInstrumentationCookie traceAsyncOperationCompletedCallbackStarting([Keep] ExecutionContext*, int operationId);
+
+    [Debugger, Inline=FastReturn]
+    InspectorInstrumentationCookie traceAsyncCallbackStarting([Keep] ExecutionContext*, int operationId);
+
+    [Debugger, Inline=FastReturn]
+    void traceAsyncCallbackCompleted(const InspectorInstrumentationCookie&);
 }
 
 interface InspectorConsoleInstrumentation {
 
 #include "core/inspector/ScriptArguments.h"
-#include "core/inspector/ScriptCallStack.h"
 
-    // FIXME: Convert to ScriptArguments to match non-worker context.
-    // Use the same implementation as above as a similar method dispatched on Page.
-    [Console]
-    void addMessageToConsole(ExecutionContext* context, MessageSource source, MessageType type, MessageLevel level, const String& message, PassRefPtrWillBeRawPtr<ScriptCallStack> callStack, unsigned long requestIdentifier = 0);
+class ConsoleMessage;
 
     // Use the same implementation as above as a similar method dispatched on Page.
     [Console]
-    void addMessageToConsole(ExecutionContext* context, MessageSource source, MessageType type, MessageLevel level, const String& message, const String& scriptId, unsigned lineNumber, unsigned columnNumber, ScriptState* state, unsigned long requestIdentifier = 0);
+    void addMessageToConsole(ExecutionContext* context, ConsoleMessage* consoleMessage);
 
     [Console, Debugger]
-    void addMessageToConsole(ExecutionContext* context, MessageSource source, MessageType type, MessageLevel level, const String& message, ScriptState* state, PassRefPtrWillBeRawPtr<ScriptArguments> arguments, unsigned long requestIdentifier = 0);
+    void addConsoleAPIMessageToConsole(ExecutionContext* context, MessageType type, MessageLevel level, const String& message, ScriptState* state, PassRefPtrWillBeRawPtr<ScriptArguments> arguments, unsigned long requestIdentifier = 0);
 
     [Console]
     void consoleCount(ExecutionContext* context, ScriptState* state, PassRefPtrWillBeRawPtr<ScriptArguments> arguments);
@@ -477,10 +506,14 @@
     void consoleTimelineEnd([Keep] ExecutionContext* context, const String& title, ScriptState* state);
 
     [Profiler, Inline=FastReturn]
-    void consoleProfile(ExecutionContext* context, const String& title, ScriptState* state);
+    void consoleProfile([Keep] ExecutionContext* context, const String& title);
 
     [Profiler, Inline=FastReturn]
-    void consoleProfileEnd(ExecutionContext* context, const String& title, ScriptState* state);
+    void consoleProfileEnd(ExecutionContext* context, const String& title);
+
+    //FIXME: remove when we move console message storage from InspectorConsoleAgent to FrameConsole
+    [Console]
+    void adoptWorkerConsoleMessages(ExecutionContext* context, WorkerGlobalScopeProxy* proxy);
 }
 
 interface InspectorOverrides {
diff --git a/core/inspector/InspectorOverlayHost.idl b/core/inspector/InspectorOverlayHost.idl
index 2f1978e..8fc701b 100644
--- a/core/inspector/InspectorOverlayHost.idl
+++ b/core/inspector/InspectorOverlayHost.idl
@@ -29,6 +29,7 @@
  */
 
 [
+    WillBeGarbageCollected,
     NoInterfaceObject
 ] interface InspectorOverlayHost {
     void resume();
diff --git a/core/inspector/JavaScriptCallFrame.idl b/core/inspector/JavaScriptCallFrame.idl
index e4c4baa..f4482d1 100644
--- a/core/inspector/JavaScriptCallFrame.idl
+++ b/core/inspector/JavaScriptCallFrame.idl
@@ -36,11 +36,11 @@
     const unsigned short CLOSURE_SCOPE = 3;
     const unsigned short CATCH_SCOPE = 4;
 
-    [Custom] void evaluate(DOMString script);
+    [Custom] void evaluateWithExceptionDetails(DOMString script);
     [Custom] any restart();
 
     // Only declarative scope (local, with and catch) is accepted. Returns undefined.
-    [CallWith=ScriptState] any setVariableValue([Default=Undefined] optional long scopeIndex, [TreatNullAs=NullString, TreatUndefinedAs=NullString, Default=Undefined] optional DOMString variableName, [Default=Undefined] optional any newValue);
+    [CallWith=ScriptState] any setVariableValue([Default=Undefined] optional long scopeIndex, [TreatUndefinedAs=NullString, Default=Undefined] optional DOMString? variableName, [Default=Undefined] optional any newValue);
 
     readonly attribute JavaScriptCallFrame caller;
     readonly attribute long sourceID;
diff --git a/core/page/EventSource.idl b/core/page/EventSource.idl
index 932fece..685c569 100644
--- a/core/page/EventSource.idl
+++ b/core/page/EventSource.idl
@@ -34,11 +34,11 @@
     ActiveDOMObject,
     Constructor(DOMString url, optional Dictionary eventSourceInit),
     ConstructorCallWith=ExecutionContext,
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     RaisesException=Constructor,
 ] interface EventSource : EventTarget {
 
-    [MeasureAs=EventSourceURL] readonly attribute DOMString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
+    [DeprecateAs=EventSourceURL] readonly attribute DOMString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
     readonly attribute DOMString url;
     readonly attribute boolean withCredentials;
 
diff --git a/core/storage/Storage.idl b/core/storage/Storage.idl
index 288703d..16c7cbd 100644
--- a/core/storage/Storage.idl
+++ b/core/storage/Storage.idl
@@ -35,8 +35,8 @@
     [RaisesException] deleter boolean (DOMString name);
 
     [NotEnumerable, RaisesException=Getter] readonly attribute unsigned long length;
-    [NotEnumerable, RaisesException, TreatReturnedNullStringAs=Null] DOMString key(unsigned long index);
-    [LogActivity, NotEnumerable, RaisesException, TreatReturnedNullStringAs=Null] DOMString getItem(DOMString key);
+    [NotEnumerable, RaisesException] DOMString? key(unsigned long index);
+    [LogActivity, NotEnumerable, RaisesException] DOMString? getItem(DOMString key);
     [LogActivity, NotEnumerable, RaisesException] void setItem(DOMString key, DOMString data);
     [LogActivity, NotEnumerable, RaisesException] void removeItem(DOMString key);
     [LogActivity, NotEnumerable, RaisesException] void clear();
diff --git a/core/storage/StorageEvent.idl b/core/storage/StorageEvent.idl
index effe79f..39801af 100644
--- a/core/storage/StorageEvent.idl
+++ b/core/storage/StorageEvent.idl
@@ -36,8 +36,8 @@
                           [Default=Undefined] optional boolean canBubbleArg,
                           [Default=Undefined] optional boolean cancelableArg,
                           [Default=Undefined] optional DOMString keyArg,
-                          [Default=Undefined, TreatNullAs=NullString] optional DOMString oldValueArg,
-                          [Default=Undefined, TreatNullAs=NullString] optional DOMString newValueArg,
+                          [Default=Undefined] optional DOMString? oldValueArg,
+                          [Default=Undefined] optional DOMString? newValueArg,
                           [Default=Undefined] optional DOMString urlArg,
                           [Default=Undefined] optional Storage storageAreaArg);
 
diff --git a/core/streams/ReadableStream.idl b/core/streams/ReadableStream.idl
new file mode 100644
index 0000000..927fa94
--- /dev/null
+++ b/core/streams/ReadableStream.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=Stream,
+    GarbageCollected
+] interface ReadableStream {
+};
diff --git a/core/fileapi/Stream.idl b/core/streams/Stream.idl
similarity index 100%
rename from core/fileapi/Stream.idl
rename to core/streams/Stream.idl
diff --git a/core/svg/SVGAngle.idl b/core/svg/SVGAngle.idl
index f4b306a..cc9a8bc 100644
--- a/core/svg/SVGAngle.idl
+++ b/core/svg/SVGAngle.idl
@@ -23,7 +23,7 @@
 [
     ImplementedAs=SVGAngleTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGAngle {
     // Angle Unit Types
     const unsigned short SVG_ANGLETYPE_UNKNOWN = 0;
diff --git a/core/svg/SVGAnimatedBoolean.idl b/core/svg/SVGAnimatedBoolean.idl
index f009f6f..daeb710 100644
--- a/core/svg/SVGAnimatedBoolean.idl
+++ b/core/svg/SVGAnimatedBoolean.idl
@@ -25,7 +25,7 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGAnimatedBoolean {
     [RaisesException=Setter] attribute boolean baseVal;
     readonly attribute boolean animVal;
diff --git a/core/svg/SVGAnimatedEnumeration.idl b/core/svg/SVGAnimatedEnumeration.idl
index 25621e7..8a4f2d9 100644
--- a/core/svg/SVGAnimatedEnumeration.idl
+++ b/core/svg/SVGAnimatedEnumeration.idl
@@ -26,7 +26,7 @@
 [
     ImplementedAs=SVGAnimatedEnumerationBase,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGAnimatedEnumeration {
     [RaisesException=Setter] attribute unsigned short baseVal;
     readonly attribute unsigned short animVal;
diff --git a/core/svg/SVGAnimatedInteger.idl b/core/svg/SVGAnimatedInteger.idl
index 4585be9..87c2d7f 100644
--- a/core/svg/SVGAnimatedInteger.idl
+++ b/core/svg/SVGAnimatedInteger.idl
@@ -25,7 +25,7 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGAnimatedInteger {
     [RaisesException=Setter] attribute long baseVal;
     readonly attribute long animVal;
diff --git a/core/svg/SVGAnimatedNumber.idl b/core/svg/SVGAnimatedNumber.idl
index ca88082..f941bdf 100644
--- a/core/svg/SVGAnimatedNumber.idl
+++ b/core/svg/SVGAnimatedNumber.idl
@@ -26,7 +26,7 @@
 
 [
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGAnimatedNumber {
     [RaisesException=Setter] attribute float baseVal;
     readonly attribute float animVal;
diff --git a/core/svg/SVGElement.idl b/core/svg/SVGElement.idl
index d18904f..4ee3be5 100644
--- a/core/svg/SVGElement.idl
+++ b/core/svg/SVGElement.idl
@@ -23,12 +23,12 @@
 [
     Custom=Wrap,
 ] interface SVGElement : Element {
-    attribute DOMString xmlbase;
-    [TypeChecking=Interface|Nullable] readonly attribute SVGSVGElement? ownerSVGElement;
-    [TypeChecking=Interface|Nullable] readonly attribute SVGElement? viewportElement;
+    [Reflect] attribute DOMString xmlbase;
+    readonly attribute SVGSVGElement? ownerSVGElement;
+    readonly attribute SVGElement? viewportElement;
 
-    attribute DOMString xmllang;
-    attribute DOMString xmlspace;
+    [Reflect] attribute DOMString xmllang;
+    [Reflect] attribute DOMString xmlspace;
 
     [MeasureAs=SVGClassName] readonly attribute SVGAnimatedString className;
 
diff --git a/core/svg/SVGFEMorphologyElement.idl b/core/svg/SVGFEMorphologyElement.idl
index 831d126..25206f4 100644
--- a/core/svg/SVGFEMorphologyElement.idl
+++ b/core/svg/SVGFEMorphologyElement.idl
@@ -37,9 +37,6 @@
     [ImplementedAs=svgOperator] readonly attribute SVGAnimatedEnumeration operator;
     readonly attribute SVGAnimatedNumber radiusX;
     readonly attribute SVGAnimatedNumber radiusY;
-
-    [MeasureAs=SVGFEMorphologyElementSetRadius] void setRadius([Default=Undefined] optional float radiusX,
-                                                               [Default=Undefined] optional float radiusY); // non-standard
 };
 
 SVGFEMorphologyElement implements SVGFilterPrimitiveStandardAttributes;
diff --git a/core/svg/SVGFilterElement.idl b/core/svg/SVGFilterElement.idl
index 5aa71f5..0e6cbaf 100644
--- a/core/svg/SVGFilterElement.idl
+++ b/core/svg/SVGFilterElement.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGFilterElement : SVGElement {
     readonly attribute SVGAnimatedEnumeration filterUnits;
     readonly attribute SVGAnimatedEnumeration primitiveUnits;
diff --git a/core/svg/SVGGeometryElement.idl b/core/svg/SVGGeometryElement.idl
index cd4887c..932b948 100644
--- a/core/svg/SVGGeometryElement.idl
+++ b/core/svg/SVGGeometryElement.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGGeometryElement : SVGGraphicsElement {
     boolean isPointInFill(SVGPoint point);
     boolean isPointInStroke(SVGPoint point);
diff --git a/core/svg/SVGGraphicsElement.idl b/core/svg/SVGGraphicsElement.idl
index 4241020..dc52a52 100644
--- a/core/svg/SVGGraphicsElement.idl
+++ b/core/svg/SVGGraphicsElement.idl
@@ -31,7 +31,7 @@
 // http://www.w3.org/TR/SVG2/types.html#InterfaceSVGGraphicsElement
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGGraphicsElement : SVGElement {
     readonly attribute SVGAnimatedTransformList transform;
 
diff --git a/core/svg/SVGLength.idl b/core/svg/SVGLength.idl
index 1774912..48e5a1f 100644
--- a/core/svg/SVGLength.idl
+++ b/core/svg/SVGLength.idl
@@ -23,7 +23,7 @@
 [
     ImplementedAs=SVGLengthTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGLength {
     // Length Unit Types
     const unsigned short SVG_LENGTHTYPE_UNKNOWN    = 0;
diff --git a/core/svg/SVGLengthList.idl b/core/svg/SVGLengthList.idl
index 23c8719..b07416c 100644
--- a/core/svg/SVGLengthList.idl
+++ b/core/svg/SVGLengthList.idl
@@ -27,7 +27,7 @@
 [
     ImplementedAs=SVGLengthListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGLengthList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/svg/SVGMarkerElement.idl b/core/svg/SVGMarkerElement.idl
index 4527585..ff7cc37 100644
--- a/core/svg/SVGMarkerElement.idl
+++ b/core/svg/SVGMarkerElement.idl
@@ -26,7 +26,7 @@
 // http://www.w3.org/TR/SVG2/painting.html#InterfaceSVGMarkerElement
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGMarkerElement : SVGElement {
 
     // Marker Unit Types
diff --git a/core/svg/SVGMatrix.idl b/core/svg/SVGMatrix.idl
index 90d00e4..663c5be 100644
--- a/core/svg/SVGMatrix.idl
+++ b/core/svg/SVGMatrix.idl
@@ -21,7 +21,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
     ImplementedAs=SVGMatrixTearOff,
     SetWrapperReferenceTo(SVGTransform contextTransform)
 ] interface SVGMatrix {
diff --git a/core/svg/SVGNumber.idl b/core/svg/SVGNumber.idl
index 63c4b52..adf8dc6 100644
--- a/core/svg/SVGNumber.idl
+++ b/core/svg/SVGNumber.idl
@@ -23,7 +23,7 @@
 [
     ImplementedAs=SVGNumberTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGNumber {
     // FIXMEDART: this attribute probably does not need to be DartCustom
     // anymore.
diff --git a/core/svg/SVGNumberList.idl b/core/svg/SVGNumberList.idl
index e5cf2fe..8fdbcf9 100644
--- a/core/svg/SVGNumberList.idl
+++ b/core/svg/SVGNumberList.idl
@@ -27,7 +27,7 @@
 [
     ImplementedAs=SVGNumberListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGNumberList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/svg/SVGPathElement.idl b/core/svg/SVGPathElement.idl
index 3cc9d2f..df7ac8c 100644
--- a/core/svg/SVGPathElement.idl
+++ b/core/svg/SVGPathElement.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathElement : SVGGeometryElement {
     readonly attribute SVGAnimatedNumber pathLength;
 
diff --git a/core/svg/SVGPathSegArcAbs.idl b/core/svg/SVGPathSegArcAbs.idl
index 9f60267..1695f53 100644
--- a/core/svg/SVGPathSegArcAbs.idl
+++ b/core/svg/SVGPathSegArcAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegArcAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegArcRel.idl b/core/svg/SVGPathSegArcRel.idl
index 405a5c6..febd2bf 100644
--- a/core/svg/SVGPathSegArcRel.idl
+++ b/core/svg/SVGPathSegArcRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegArcRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoCubicAbs.idl b/core/svg/SVGPathSegCurvetoCubicAbs.idl
index 3fb452c..8c666eb 100644
--- a/core/svg/SVGPathSegCurvetoCubicAbs.idl
+++ b/core/svg/SVGPathSegCurvetoCubicAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoCubicAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoCubicRel.idl b/core/svg/SVGPathSegCurvetoCubicRel.idl
index a047127..2353cbb 100644
--- a/core/svg/SVGPathSegCurvetoCubicRel.idl
+++ b/core/svg/SVGPathSegCurvetoCubicRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoCubicRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl b/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
index c84d239..63a7da2 100644
--- a/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
+++ b/core/svg/SVGPathSegCurvetoCubicSmoothAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoCubicSmoothAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl b/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
index daa38e3..9253bb3 100644
--- a/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
+++ b/core/svg/SVGPathSegCurvetoCubicSmoothRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoCubicSmoothRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoQuadraticAbs.idl b/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
index 3014b01..d7bfc66 100644
--- a/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
+++ b/core/svg/SVGPathSegCurvetoQuadraticAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoQuadraticAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoQuadraticRel.idl b/core/svg/SVGPathSegCurvetoQuadraticRel.idl
index a14cbe3..d4da453 100644
--- a/core/svg/SVGPathSegCurvetoQuadraticRel.idl
+++ b/core/svg/SVGPathSegCurvetoQuadraticRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoQuadraticRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl b/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
index aad9a56..8db13c3 100644
--- a/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
+++ b/core/svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoQuadraticSmoothAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl b/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
index a1e6aba..cecfb26 100644
--- a/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
+++ b/core/svg/SVGPathSegCurvetoQuadraticSmoothRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegCurvetoQuadraticSmoothRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegLinetoAbs.idl b/core/svg/SVGPathSegLinetoAbs.idl
index e1c1f5c..23cf3ac 100644
--- a/core/svg/SVGPathSegLinetoAbs.idl
+++ b/core/svg/SVGPathSegLinetoAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegLinetoAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegLinetoHorizontalAbs.idl b/core/svg/SVGPathSegLinetoHorizontalAbs.idl
index 08d774c..655043f 100644
--- a/core/svg/SVGPathSegLinetoHorizontalAbs.idl
+++ b/core/svg/SVGPathSegLinetoHorizontalAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegLinetoHorizontalAbs : SVGPathSeg {
     attribute float x;
 };
diff --git a/core/svg/SVGPathSegLinetoHorizontalRel.idl b/core/svg/SVGPathSegLinetoHorizontalRel.idl
index 34d378d..681d639 100644
--- a/core/svg/SVGPathSegLinetoHorizontalRel.idl
+++ b/core/svg/SVGPathSegLinetoHorizontalRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegLinetoHorizontalRel : SVGPathSeg {
     attribute float x;
 };
diff --git a/core/svg/SVGPathSegLinetoRel.idl b/core/svg/SVGPathSegLinetoRel.idl
index f356c17..a73f5d2 100644
--- a/core/svg/SVGPathSegLinetoRel.idl
+++ b/core/svg/SVGPathSegLinetoRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegLinetoRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegLinetoVerticalAbs.idl b/core/svg/SVGPathSegLinetoVerticalAbs.idl
index 9c6aaa9..7371094 100644
--- a/core/svg/SVGPathSegLinetoVerticalAbs.idl
+++ b/core/svg/SVGPathSegLinetoVerticalAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegLinetoVerticalAbs : SVGPathSeg {
     attribute float y;
 };
diff --git a/core/svg/SVGPathSegLinetoVerticalRel.idl b/core/svg/SVGPathSegLinetoVerticalRel.idl
index 36f44d4..74ccdee 100644
--- a/core/svg/SVGPathSegLinetoVerticalRel.idl
+++ b/core/svg/SVGPathSegLinetoVerticalRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegLinetoVerticalRel : SVGPathSeg {
     attribute float y;
 };
diff --git a/core/svg/SVGPathSegList.idl b/core/svg/SVGPathSegList.idl
index 5e896e4..9f8381b 100644
--- a/core/svg/SVGPathSegList.idl
+++ b/core/svg/SVGPathSegList.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
     SetWrapperReferenceTo(SVGElement contextElement),
     ImplementedAs=SVGPathSegListTearOff
 ] interface SVGPathSegList {
diff --git a/core/svg/SVGPathSegMovetoAbs.idl b/core/svg/SVGPathSegMovetoAbs.idl
index b257339..391b6b7 100644
--- a/core/svg/SVGPathSegMovetoAbs.idl
+++ b/core/svg/SVGPathSegMovetoAbs.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegMovetoAbs : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPathSegMovetoRel.idl b/core/svg/SVGPathSegMovetoRel.idl
index 15891e3..49cfa67 100644
--- a/core/svg/SVGPathSegMovetoRel.idl
+++ b/core/svg/SVGPathSegMovetoRel.idl
@@ -25,7 +25,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPathSegMovetoRel : SVGPathSeg {
     attribute float x;
     attribute float y;
diff --git a/core/svg/SVGPoint.idl b/core/svg/SVGPoint.idl
index a192380..bb30f3d 100644
--- a/core/svg/SVGPoint.idl
+++ b/core/svg/SVGPoint.idl
@@ -23,7 +23,7 @@
 [
     ImplementedAs=SVGPointTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPoint {
     [RaisesException=Setter] attribute float x;
     [RaisesException=Setter] attribute float y;
diff --git a/core/svg/SVGPointList.idl b/core/svg/SVGPointList.idl
index 444570b..7bf20b5 100644
--- a/core/svg/SVGPointList.idl
+++ b/core/svg/SVGPointList.idl
@@ -26,7 +26,7 @@
 [
     ImplementedAs=SVGPointListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGPointList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/svg/SVGPreserveAspectRatio.idl b/core/svg/SVGPreserveAspectRatio.idl
index 67b7124..9c6d89e 100644
--- a/core/svg/SVGPreserveAspectRatio.idl
+++ b/core/svg/SVGPreserveAspectRatio.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
     ImplementedAs=SVGPreserveAspectRatioTearOff,
     SetWrapperReferenceTo(SVGElement contextElement)
 ] interface SVGPreserveAspectRatio {
diff --git a/core/svg/SVGRect.idl b/core/svg/SVGRect.idl
index faff038..f602ce1 100644
--- a/core/svg/SVGRect.idl
+++ b/core/svg/SVGRect.idl
@@ -23,7 +23,7 @@
 [
     ImplementedAs=SVGRectTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGRect {
     [RaisesException=Setter] attribute float x;
     [RaisesException=Setter] attribute float y;
diff --git a/core/svg/SVGSVGElement.idl b/core/svg/SVGSVGElement.idl
index 093f153..ad7db21 100644
--- a/core/svg/SVGSVGElement.idl
+++ b/core/svg/SVGSVGElement.idl
@@ -25,7 +25,7 @@
 // TODO: no css::ViewCSS available!
 // TODO: no events::DocumentEvent available!
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGSVGElement : SVGGraphicsElement {
 
     readonly attribute SVGAnimatedLength x;
diff --git a/core/svg/SVGStringList.idl b/core/svg/SVGStringList.idl
index 870ba4c..dbbdf9d 100644
--- a/core/svg/SVGStringList.idl
+++ b/core/svg/SVGStringList.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
     SetWrapperReferenceTo(SVGElement contextElement),
     ImplementedAs=SVGStringListTearOff
 ] interface SVGStringList {
diff --git a/core/svg/SVGStyleElement.idl b/core/svg/SVGStyleElement.idl
index a80a727..482efa9 100644
--- a/core/svg/SVGStyleElement.idl
+++ b/core/svg/SVGStyleElement.idl
@@ -28,6 +28,9 @@
     attribute boolean disabled;
     attribute DOMString type;
     attribute DOMString media;
-    attribute DOMString title;
+    [MeasureAs=SVGStyleElementTitle] attribute DOMString title;
+
+    // DOM Level 2 Style
+    readonly attribute StyleSheet sheet;
 };
 
diff --git a/core/svg/SVGTextContentElement.idl b/core/svg/SVGTextContentElement.idl
index 4f0466b..9d1f4f4 100644
--- a/core/svg/SVGTextContentElement.idl
+++ b/core/svg/SVGTextContentElement.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGTextContentElement : SVGGraphicsElement {
     // lengthAdjust Types
     const unsigned short LENGTHADJUST_UNKNOWN          = 0;
diff --git a/core/svg/SVGTransform.idl b/core/svg/SVGTransform.idl
index d810948..cb4c437 100644
--- a/core/svg/SVGTransform.idl
+++ b/core/svg/SVGTransform.idl
@@ -20,7 +20,7 @@
  */
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
     ImplementedAs=SVGTransformTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
 ] interface SVGTransform {
diff --git a/core/svg/SVGTransformList.idl b/core/svg/SVGTransformList.idl
index 9bc5521..95663fc 100644
--- a/core/svg/SVGTransformList.idl
+++ b/core/svg/SVGTransformList.idl
@@ -27,7 +27,7 @@
 [
     ImplementedAs=SVGTransformListTearOff,
     SetWrapperReferenceTo(SVGElement contextElement),
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface SVGTransformList {
     readonly attribute unsigned long length;
     [ImplementedAs=length] readonly attribute unsigned long numberOfItems;
diff --git a/core/testing/GarbageCollectedScriptWrappable.idl b/core/testing/GarbageCollectedScriptWrappable.idl
new file mode 100644
index 0000000..0fd3bde
--- /dev/null
+++ b/core/testing/GarbageCollectedScriptWrappable.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    GarbageCollected
+] interface GarbageCollectedScriptWrappable {
+    [NotEnumerable] DOMString toString();
+};
diff --git a/core/testing/InternalSettings.idl b/core/testing/InternalSettings.idl
index 4120690..dabbbb4 100644
--- a/core/testing/InternalSettings.idl
+++ b/core/testing/InternalSettings.idl
@@ -29,6 +29,7 @@
     // All methods which access Page::settings() can raise an exception
     // when the page cannot be accessed. (Such as during page tear-down.)
     [RaisesException] void setMockScrollbarsEnabled(boolean enabled);
+    [RaisesException] void setMockGestureTapHighlightsEnabled(boolean enabled);
     [RaisesException] void setStandardFontFamily(DOMString family, DOMString script);
     [RaisesException] void setSerifFontFamily(DOMString family, DOMString script);
     [RaisesException] void setSansSerifFontFamily(DOMString family, DOMString script);
@@ -53,9 +54,9 @@
     // cannot be changed after process start.  These setters should
     // be removed or moved onto internals.runtimeFlags:
     void setAuthorShadowDOMForAnyElementEnabled(boolean enabled);
-    void setCSSExclusionsEnabled(boolean enabled);
     void setLangAttributeAwareFormControlUIEnabled(boolean enabled);
     void setOverlayScrollbarsEnabled(boolean enabled);
     void setExperimentalContentSecurityPolicyFeaturesEnabled(boolean enabled);
+    void setLaxMixedContentCheckingEnabled(boolean enabled);
     void setPseudoClassesInMatchingCriteriaInAuthorShadowTreesEnabled(boolean enabled);
 };
diff --git a/core/testing/Internals.idl b/core/testing/Internals.idl
index daec6fd..675dfbc 100644
--- a/core/testing/Internals.idl
+++ b/core/testing/Internals.idl
@@ -32,7 +32,7 @@
 
     GCObservation observeGC(any observed);
 
-    [RaisesException] DOMString elementRenderTreeAsText(Element element);
+    [RaisesException, TypeChecking=Interface] DOMString elementRenderTreeAsText(Element element);
     boolean isPreloaded(DOMString url);
     boolean isLoadingFromMemoryCache(DOMString url);
 
@@ -42,45 +42,45 @@
     [RaisesException] DOMString styleResolverStatsReport();
     [RaisesException] DOMString styleResolverStatsTotalsReport();
 
-    [RaisesException] boolean isSharingStyle(Element element1, Element element2);
+    [TypeChecking=Interface] boolean isSharingStyle(Element element1, Element element2);
 
-    [RaisesException] CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
+    [TypeChecking=Interface] CSSStyleDeclaration computedStyleIncludingVisitedInfo(Node node);
 
-    [RaisesException] ShadowRoot shadowRoot(Element host);
-    [RaisesException] ShadowRoot youngestShadowRoot(Element host);
-    [RaisesException] ShadowRoot oldestShadowRoot(Element host);
-    [RaisesException] ShadowRoot youngerShadowRoot(Node root);
+    [TypeChecking=Interface] ShadowRoot shadowRoot(Element host);
+    [TypeChecking=Interface] ShadowRoot youngestShadowRoot(Element host);
+    [TypeChecking=Interface] ShadowRoot oldestShadowRoot(Element host);
+    [RaisesException, TypeChecking=Interface] ShadowRoot youngerShadowRoot(Node root);
 
-    [RaisesException] DOMString shadowRootType(Node root);
+    [RaisesException, TypeChecking=Interface] DOMString shadowRootType(Node root);
     [RaisesException] boolean hasShadowInsertionPoint(Node root);
     [RaisesException] boolean hasContentElement(Node root);
-    [RaisesException] unsigned long countElementShadow(Node Root);
-    [RaisesException] DOMString shadowPseudoId(Element element);
-    [RaisesException] void setShadowPseudoId(Element element, DOMString id);
-    [RaisesException] boolean isValidContentSelect(Element contentElement);
-    [RaisesException] Node treeScopeRootNode(Node node);
-    [RaisesException] Node parentTreeScope(Node node);
-    [RaisesException] boolean hasSelectorForIdInShadow(Element host, DOMString id);
-    [RaisesException] boolean hasSelectorForClassInShadow(Element host, DOMString className);
-    [RaisesException] boolean hasSelectorForAttributeInShadow(Element host, DOMString attributeName);
-    [RaisesException] boolean hasSelectorForPseudoClassInShadow(Element host, DOMString pseudoClass);
-    [RaisesException] unsigned short compareTreeScopePosition(Node treeScope1, Node treeScope2);
+    [RaisesException, TypeChecking=Interface] unsigned long countElementShadow(Node Root);
+    [TypeChecking=Interface] DOMString shadowPseudoId(Element element);
+    [TypeChecking=Interface] void setShadowPseudoId(Element element, DOMString id);
+    [RaisesException, TypeChecking=Interface] boolean isValidContentSelect(Element contentElement);
+    [TypeChecking=Interface] Node treeScopeRootNode(Node node);
+    [TypeChecking=Interface] Node parentTreeScope(Node node);
+    [RaisesException, TypeChecking=Interface] boolean hasSelectorForIdInShadow(Element host, DOMString id);
+    [RaisesException, TypeChecking=Interface] boolean hasSelectorForClassInShadow(Element host, DOMString className);
+    [RaisesException, TypeChecking=Interface] boolean hasSelectorForAttributeInShadow(Element host, DOMString attributeName);
+    [RaisesException, TypeChecking=Interface] boolean hasSelectorForPseudoClassInShadow(Element host, DOMString pseudoClass);
+    [RaisesException, TypeChecking=Interface] unsigned short compareTreeScopePosition(Node treeScope1, Node treeScope2);
     [RaisesException] unsigned long updateStyleAndReturnAffectedElementCount();
     [RaisesException] unsigned long needsLayoutCount();
+    [RaisesException] unsigned long hitTestCount(Document document);
 
     // CSS Animation and Transition testing.
-    unsigned long numberOfActiveAnimations();
     [RaisesException] void pauseAnimations(double pauseTime);
 
-    [RaisesException] Node nextSiblingByWalker(Node node);
-    [RaisesException] Node firstChildByWalker(Node node);
-    [RaisesException] Node lastChildByWalker(Node node);
-    [RaisesException] Node nextNodeByWalker(Node node);
-    [RaisesException] Node previousNodeByWalker(Node node);
+    [TypeChecking=Interface] Node nextSiblingByWalker(Node node);
+    [TypeChecking=Interface] Node firstChildByWalker(Node node);
+    [TypeChecking=Interface] Node lastChildByWalker(Node node);
+    [TypeChecking=Interface] Node nextNodeByWalker(Node node);
+    [TypeChecking=Interface] Node previousNodeByWalker(Node node);
 
     DOMString visiblePlaceholder(Element element);
 
-    void selectColorInColorChooser(Element element, DOMString colorValue);
+    [TypeChecking=Interface] void selectColorInColorChooser(Element element, DOMString colorValue);
 
     // If the argument is omitted, the top-level document is used.
     boolean hasAutofocusRequest(optional Document document);
@@ -93,42 +93,42 @@
 
     [RaisesException] ClientRect absoluteCaretBounds();
 
-    [RaisesException] ClientRect boundingBox(Element element);
+    [TypeChecking=Interface] ClientRect boundingBox(Element element);
 
-    [RaisesException] unsigned long markerCountForNode(Node node, DOMString markerType);
-    [RaisesException] unsigned long activeMarkerCountForNode(Node node);
-    [RaisesException] Range markerRangeForNode(Node node, DOMString markerType, unsigned long index);
-    [RaisesException] DOMString markerDescriptionForNode(Node node, DOMString markerType, unsigned long index);
-    void addTextMatchMarker(Range range, boolean isActive);
-    [RaisesException] void setMarkersActive(Node node, unsigned long startOffset, unsigned long endOffset, boolean active);
-    [RaisesException] void setMarkedTextMatchesAreHighlighted(Document document, boolean highlight);
+    [RaisesException, TypeChecking=Interface] unsigned long markerCountForNode(Node node, DOMString markerType);
+    [TypeChecking=Interface] unsigned long activeMarkerCountForNode(Node node);
+    [RaisesException, TypeChecking=Interface] Range markerRangeForNode(Node node, DOMString markerType, unsigned long index);
+    [RaisesException, TypeChecking=Interface] DOMString markerDescriptionForNode(Node node, DOMString markerType, unsigned long index);
+    [TypeChecking=Interface] void addTextMatchMarker(Range range, boolean isActive);
+    [TypeChecking=Interface] void setMarkersActive(Node node, unsigned long startOffset, unsigned long endOffset, boolean active);
+    void setMarkedTextMatchesAreHighlighted(Document document, boolean highlight);
 
-    [RaisesException] void setScrollViewPosition(Document document, long x, long y);
+    [RaisesException, TypeChecking=Interface] void setScrollViewPosition(Document document, long x, long y);
 
-    [RaisesException] DOMString viewportAsText(Document document,
-                                               float devicePixelRatio,
-                                               long availableWidth,
-                                               long availableHeight);
+    [RaisesException, TypeChecking=Interface] DOMString viewportAsText(Document document,
+                                                                       float devicePixelRatio,
+                                                                       long availableWidth,
+                                                                       long availableHeight);
 
-    [RaisesException] boolean wasLastChangeUserEdit(Element textField);
-    [RaisesException] boolean elementShouldAutoComplete(Element inputElement);
-    [RaisesException] DOMString suggestedValue(Element inputElement);
-    [RaisesException] void setSuggestedValue(Element inputElement, DOMString value);
-    [RaisesException] void setEditingValue(Element inputElement, DOMString value);
-    [RaisesException] void setAutofilled(Element inputElement, boolean enabled);
+    [RaisesException, TypeChecking=Interface] boolean wasLastChangeUserEdit(Element textField);
+    [RaisesException, TypeChecking=Interface] boolean elementShouldAutoComplete(Element inputElement);
+    [RaisesException, TypeChecking=Interface] DOMString suggestedValue(Element inputElement);
+    [RaisesException, TypeChecking=Interface] void setSuggestedValue(Element inputElement, DOMString value);
+    [RaisesException, TypeChecking=Interface] void setEditingValue(Element inputElement, DOMString value);
+    [RaisesException, TypeChecking=Interface] void setAutofilled(Element inputElement, boolean enabled);
 
-    [RaisesException] void scrollElementToRect(Element element, long x, long y, long w, long h);
+    [RaisesException, TypeChecking=Interface] void scrollElementToRect(Element element, long x, long y, long w, long h);
 
-    [RaisesException] Range rangeFromLocationAndLength(Element scope, long rangeLocation, long rangeLength);
-    [RaisesException] unsigned long locationFromRange(Element scope, Range range);
-    [RaisesException] unsigned long lengthFromRange(Element scope, Range range);
-    [RaisesException] DOMString rangeAsText(Range range);
+    [TypeChecking=Interface] Range rangeFromLocationAndLength(Element scope, long rangeLocation, long rangeLength);
+    [TypeChecking=Interface] unsigned long locationFromRange(Element scope, Range range);
+    [TypeChecking=Interface] unsigned long lengthFromRange(Element scope, Range range);
+    [TypeChecking=Interface] DOMString rangeAsText(Range range);
 
-    [RaisesException] WebKitPoint touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
-    [RaisesException] Node touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
-    [RaisesException] WebKitPoint touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
-    [RaisesException] Node touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
-    [RaisesException] ClientRect bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document document);
+    [RaisesException, TypeChecking=Interface] WebKitPoint touchPositionAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
+    [RaisesException, TypeChecking=Interface] Node touchNodeAdjustedToBestClickableNode(long x, long y, long width, long height, Document document);
+    [RaisesException, TypeChecking=Interface] WebKitPoint touchPositionAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
+    [RaisesException, TypeChecking=Interface] Node touchNodeAdjustedToBestContextMenuNode(long x, long y, long width, long height, Document document);
+    [RaisesException, TypeChecking=Interface] ClientRect bestZoomableAreaForTouchPoint(long x, long y, long width, long height, Document document);
 
     [RaisesException] long lastSpellCheckRequestSequence(Document document);
     [RaisesException] long lastSpellCheckProcessedSequence(Document document);
@@ -136,30 +136,30 @@
     sequence<DOMString> userPreferredLanguages();
     void setUserPreferredLanguages(sequence<DOMString> languages);
 
-    [RaisesException] unsigned long activeDOMObjectCount(Document document);
-    [RaisesException] unsigned long wheelEventHandlerCount(Document document);
-    [RaisesException] unsigned long scrollEventHandlerCount(Document document);
-    [RaisesException] unsigned long touchEventHandlerCount(Document document);
-    [RaisesException] LayerRectList touchEventTargetLayerRects(Document document);
+    [TypeChecking=Interface] unsigned long activeDOMObjectCount(Document document);
+    [TypeChecking=Interface] unsigned long wheelEventHandlerCount(Document document);
+    [TypeChecking=Interface] unsigned long scrollEventHandlerCount(Document document);
+    [TypeChecking=Interface] unsigned long touchEventHandlerCount(Document document);
+    [RaisesException, TypeChecking=Interface] LayerRectList touchEventTargetLayerRects(Document document);
 
 
-    [RaisesException] NodeList nodesFromRect(Document document, long x, long y,
+    [RaisesException, TypeChecking=Interface] NodeList nodesFromRect(Document document, long x, long y,
         unsigned long topPadding, unsigned long rightPadding, unsigned long bottomPadding, unsigned long leftPadding,
-        boolean ignoreClipping, boolean allowShadowContent, boolean allowChildFrameContent);
+        boolean ignoreClipping, boolean allowChildFrameContent);
 
     void emitInspectorDidBeginFrame(optional long frameId);
     void emitInspectorDidCancelFrame();
 
-    [RaisesException] boolean hasSpellingMarker(Document document, long from, long length);
-    [RaisesException] boolean hasGrammarMarker(Document document, long from, long length);
-    [RaisesException] void setContinuousSpellCheckingEnabled(boolean enabled);
+    [TypeChecking=Interface] boolean hasSpellingMarker(Document document, long from, long length);
+    [TypeChecking=Interface] boolean hasGrammarMarker(Document document, long from, long length);
+    void setContinuousSpellCheckingEnabled(boolean enabled);
 
-    [RaisesException] boolean isOverwriteModeEnabled(Document document);
-    [RaisesException] void toggleOverwriteModeEnabled(Document document);
+    [TypeChecking=Interface] boolean isOverwriteModeEnabled(Document document);
+    [TypeChecking=Interface] void toggleOverwriteModeEnabled(Document document);
 
-    [RaisesException] unsigned long numberOfScrollableAreas(Document document);
+    [TypeChecking=Interface] unsigned long numberOfScrollableAreas(Document document);
 
-    [RaisesException] boolean isPageBoxVisible(Document document, long pageNumber);
+    [TypeChecking=Interface] boolean isPageBoxVisible(Document document, long pageNumber);
 
     readonly attribute InternalSettings settings;
     readonly attribute InternalProfilers profilers;
@@ -172,24 +172,19 @@
     const unsigned short LAYER_TREE_INCLUDES_PAINTING_PHASES = 4;
     const unsigned short LAYER_TREE_INCLUDES_ROOT_LAYER = 8;
     const unsigned short LAYER_TREE_INCLUDES_CLIP_AND_SCROLL_PARENTS = 16;
-    [RaisesException] DOMString layerTreeAsText(Document document, optional unsigned short flags);
-    [RaisesException] DOMString elementLayerTreeAsText(Element element, optional unsigned short flags);
+    [RaisesException, TypeChecking=Interface] DOMString layerTreeAsText(Document document, optional unsigned short flags);
+    [RaisesException, TypeChecking=Interface] DOMString elementLayerTreeAsText(Element element, optional unsigned short flags);
 
-    [RaisesException] boolean scrollsWithRespectTo(Element element1, Element element2);
-    [RaisesException] boolean isUnclippedDescendant(Element element);
+    [RaisesException, TypeChecking=Interface] boolean scrollsWithRespectTo(Element element1, Element element2);
+    [RaisesException, TypeChecking=Interface] boolean isUnclippedDescendant(Element element);
 
-    [RaisesException] DOMString scrollingStateTreeAsText(Document document);
-    [RaisesException] DOMString mainThreadScrollingReasons(Document document);
-    [RaisesException] ClientRectList nonFastScrollableRects(Document document);
+    [TypeChecking=Interface] DOMString scrollingStateTreeAsText(Document document);
+    [RaisesException, TypeChecking=Interface] DOMString mainThreadScrollingReasons(Document document);
+    [RaisesException, TypeChecking=Interface] ClientRectList nonFastScrollableRects(Document document);
 
-    [RaisesException] DOMString repaintRectsAsText(Document document);
-    [RaisesException] ClientRectList repaintRects(Element element);
-
-    [RaisesException] void garbageCollectDocumentResources(Document document);
+    [TypeChecking=Interface] void garbageCollectDocumentResources(Document document);
     void evictAllResources();
 
-    void allowRoundingHacks();
-
     unsigned long numberOfLiveNodes();
     unsigned long numberOfLiveDocuments();
     DOMString dumpRefCountedInstanceCounts();
@@ -207,69 +202,73 @@
 
     [RaisesException] void setDeviceScaleFactor(float scaleFactor);
 
-    [RaisesException] void setIsCursorVisible(Document document, boolean isVisible);
-
-    void webkitWillEnterFullScreenForElement(Document document, Element element);
-    void webkitDidEnterFullScreenForElement(Document document, Element element);
-    void webkitWillExitFullScreenForElement(Document document, Element element);
-    void webkitDidExitFullScreenForElement(Document document, Element element);
+    [RaisesException, TypeChecking=Interface] void setIsCursorVisible(Document document, boolean isVisible);
 
     void mediaPlayerRequestFullscreen(HTMLMediaElement mediaElement);
+    double effectiveMediaVolume(HTMLMediaElement mediaElement);
 
     void registerURLSchemeAsBypassingContentSecurityPolicy(DOMString scheme);
     void removeURLSchemeRegisteredAsBypassingContentSecurityPolicy(DOMString scheme);
 
-    MallocStatistics mallocStatistics();
     TypeConversions typeConversions();
 
+    // This is enabled only in Debug builds.
+    // This is because we want to avoid putting the byte stream of testing private scripts
+    // into the binary of Release builds.
+    PrivateScriptTest privateScriptTest();
+
     DOMString[] getReferencedFilePaths();
 
     // These functions both reset the tracked repaint rects. They are inteded to be used in the following order:
     //  startTrackingRepaints, repaintRectsAsText, stopTrackingRepaints.
-    [RaisesException] void startTrackingRepaints(Document document);
-    [RaisesException] void stopTrackingRepaints(Document document);
+    [RaisesException, TypeChecking=Interface] void startTrackingRepaints(Document document);
+    [RaisesException, TypeChecking=Interface] void stopTrackingRepaints(Document document);
 
     // |node| should be Document, HTMLIFrameElement, or unspecified.
     // If |node| is an HTMLIFrameElement, it assumes node.contentDocument is
     // specified without security checks. Unspecified means this document.
     [RaisesException] void updateLayoutIgnorePendingStylesheetsAndRunPostLayoutTasks(optional Node node);
 
-    [RaisesException] void forceFullRepaint(Document document);
+    [RaisesException, TypeChecking=Interface] void forceFullRepaint(Document document);
 
     // Returns a list of draggable/non-draggable regions in the document.
-    [RaisesException] ClientRectList draggableRegions(Document document);
-    [RaisesException] ClientRectList nonDraggableRegions(Document document);
+    [RaisesException, TypeChecking=Interface] ClientRectList draggableRegions(Document document);
+    [RaisesException, TypeChecking=Interface] ClientRectList nonDraggableRegions(Document document);
 
     // Returns a string with information about the mouse cursor used at the specified client location.
-    [RaisesException] DOMString getCurrentCursorInfo(Document document);
+    [RaisesException, TypeChecking=Interface] DOMString getCurrentCursorInfo(Document document);
 
-    [RaisesException] DOMString markerTextForListItem(Element element);
+    [TypeChecking=Interface] DOMString markerTextForListItem(Element element);
 
-    [RaisesException] DOMString baseURL(Document document);
+    [TypeChecking=Interface] DOMString baseURL(Document document);
 
     SerializedScriptValue deserializeBuffer(ArrayBuffer buffer);
     ArrayBuffer serializeObject(SerializedScriptValue obj);
 
     void forceReload(boolean endToEnd);
 
-    [RaisesException] DOMString getImageSourceURL(Element element);
+    [TypeChecking=Interface] DOMString getImageSourceURL(Element element);
 
-    boolean isSelectPopupVisible(Node node);
+    [TypeChecking=Interface] boolean isSelectPopupVisible(Node node);
+    boolean selectPopupItemStyleIsRtl(Node select, long itemIndex);
+    long selectPopupItemStyleFontHeight(Node select, long itemIndex);
 
     [RaisesException] ClientRect selectionBounds();
 
     boolean loseSharedGraphicsContext3D();
 
-    [RaisesException] void forceCompositingUpdate(Document document);
+    [RaisesException, TypeChecking=Interface] void forceCompositingUpdate(Document document);
 
     void setZoomFactor(float factor);
 
-    [RaisesException] void setShouldRevealPassword(Element element, boolean reveal);
+    [RaisesException, TypeChecking=Interface] void setShouldRevealPassword(Element element, boolean reveal);
 
-    [CallWith=ScriptState] Promise createPromise();
     [CallWith=ScriptState] Promise createResolvedPromise(any value);
     [CallWith=ScriptState] Promise createRejectedPromise(any reason);
-    [CallWith=ExecutionContext] Promise addOneToPromise(Promise promise);
+    [CallWith=ScriptState] Promise addOneToPromise(Promise promise);
+    [CallWith=ScriptState, RaisesException] Promise promiseCheck(long arg1, boolean arg2, Dictionary arg3, DOMString arg4, DOMString[] arg5);
+    [CallWith=ScriptState] Promise promiseCheckWithoutExceptionState(Dictionary arg1, DOMString arg2, DOMString... variadic);
+    [CallWith=ScriptState] Promise promiseCheckRange([EnforceRange] octet arg1);
 
     void setValueForUser(Element element, DOMString value);
 
@@ -277,10 +276,16 @@
 
     void setFocused(boolean focused);
 
-    [RaisesException] boolean ignoreLayoutWithPendingStylesheets(Document document);
+    [TypeChecking=Interface] boolean ignoreLayoutWithPendingStylesheets(Document document);
 
     // These functions are for testing NetInfo. You must call setNetworkStateNotifierTestOnly(true)
     // before calling setNetworkConnectionInfo.
     void setNetworkStateNotifierTestOnly(boolean testOnly);
     [RaisesException] void setNetworkConnectionInfo(DOMString type);
+
+    // This function is for testing HitRegions on Canvas2D.
+    unsigned long countHitRegions(CanvasRenderingContext2D context);
+
+    DOMString serializeNavigationMarkup();
+    void hideAllTransitionElements();
 };
diff --git a/core/testing/MallocStatistics.idl b/core/testing/MallocStatistics.idl
deleted file mode 100644
index 5e969e9..0000000
--- a/core/testing/MallocStatistics.idl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2012 SoftAtHome. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1.  Redistributions of source code must retain the above copyright
- *     notice, this list of conditions and the following disclaimer.
- * 2.  Redistributions in binary form must reproduce the above copyright
- *     notice, this list of conditions and the following disclaimer in the
- *     documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-    WillBeGarbageCollected,
-] interface MallocStatistics {
-    readonly attribute unsigned long reservedVMBytes;
-    readonly attribute unsigned long committedVMBytes;
-    readonly attribute unsigned long freeListBytes;
-};
diff --git a/core/testing/PartialPrivateScriptTest.idl b/core/testing/PartialPrivateScriptTest.idl
new file mode 100644
index 0000000..b19d17f
--- /dev/null
+++ b/core/testing/PartialPrivateScriptTest.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+partial interface PrivateScriptTest {
+    [ImplementedInPrivateScript] short addIntegerInPartial(short value1, short value2);
+    [ImplementedInPrivateScript] short addInteger2InPartial(short value1, short value2);
+    [ImplementedInPrivateScript] attribute DOMString stringAttributeInPartial;
+};
diff --git a/core/testing/PrivateScriptTest.idl b/core/testing/PrivateScriptTest.idl
new file mode 100644
index 0000000..20fca89
--- /dev/null
+++ b/core/testing/PrivateScriptTest.idl
@@ -0,0 +1,45 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    GarbageCollected
+] interface PrivateScriptTest {
+    [ImplementedInPrivateScript] void doNothing();
+    [ImplementedInPrivateScript] short return123();
+    [ImplementedInPrivateScript] short echoInteger(short value);
+    [ImplementedInPrivateScript] DOMString echoString(DOMString value);
+    [ImplementedInPrivateScript] Node echoNode(Node value);
+    [ImplementedInPrivateScript] short addInteger(short value1, short value2);
+    [ImplementedInPrivateScript] DOMString addString(DOMString value1, DOMString value2);
+    [ImplementedInPrivateScript] void setIntegerToPrototype(short value);
+    [ImplementedInPrivateScript] short getIntegerFromPrototype();
+    [ImplementedInPrivateScript] void setIntegerToDocument(Document document, short value);
+    [ImplementedInPrivateScript] short getIntegerFromDocument(Document document);
+    [ImplementedInPrivateScript] Node createElement(Document document);
+    [ImplementedInPrivateScript] void appendChild(Node node1, Node node2);
+    [ImplementedInPrivateScript] Node firstChild(Node node);
+    [ImplementedInPrivateScript] Node nextSibling(Node node);
+    [ImplementedInPrivateScript] DOMString innerHTML(Node node);
+    [ImplementedInPrivateScript] void setInnerHTML(Node node, DOMString string);
+    [ImplementedInPrivateScript] void addClickListener(Node node);
+    [ImplementedInPrivateScript] void clickNode(Document document, Node node);
+    [ImplementedInPrivateScript] readonly attribute short readonlyShortAttribute;
+    [ImplementedInPrivateScript] attribute short shortAttribute;
+    [ImplementedInPrivateScript] attribute DOMString stringAttribute;
+    [ImplementedInPrivateScript] attribute Node nodeAttribute;
+    [ImplementedInPrivateScript] attribute Node nodeAttributeThrowsIndexSizeError;
+    [ImplementedInPrivateScript] void voidMethodThrowsDOMSyntaxError();
+    [ImplementedInPrivateScript] void voidMethodThrowsError();
+    [ImplementedInPrivateScript] void voidMethodThrowsTypeError();
+    [ImplementedInPrivateScript] void voidMethodThrowsRangeError();
+    [ImplementedInPrivateScript] void voidMethodThrowsSyntaxError();
+    [ImplementedInPrivateScript] void voidMethodThrowsReferenceError();
+    [ImplementedInPrivateScript] void voidMethodWithStackOverflow();
+    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] short addIntegerForPrivateScriptOnly(short value1, short value2);
+    [ImplementedInPrivateScript, OnlyExposedToPrivateScript] attribute DOMString stringAttributeForPrivateScriptOnly;
+    [ImplementedInPrivateScript] short addIntegerImplementedInCPP(short value1, short value2);
+    [OnlyExposedToPrivateScript] short addIntegerImplementedInCPPForPrivateScriptOnly(short value1, short value2);
+    [ImplementedInPrivateScript] attribute DOMString stringAttributeImplementedInCPP;
+    [OnlyExposedToPrivateScript] attribute DOMString stringAttributeImplementedInCPPForPrivateScriptOnly;
+};
diff --git a/core/testing/RefCountedScriptWrappable.idl b/core/testing/RefCountedScriptWrappable.idl
new file mode 100644
index 0000000..1fc7fe0
--- /dev/null
+++ b/core/testing/RefCountedScriptWrappable.idl
@@ -0,0 +1,8 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+] interface RefCountedScriptWrappable {
+    [NotEnumerable] DOMString toString();
+};
diff --git a/core/testing/TypeConversions.idl b/core/testing/TypeConversions.idl
index 86dc328..ffaa21e 100644
--- a/core/testing/TypeConversions.idl
+++ b/core/testing/TypeConversions.idl
@@ -49,7 +49,7 @@
     attribute ByteString testByteString;
     [ImplementedAs=testByteString, TreatReturnedNullStringAs=Null] attribute ByteString testByteStringTreatReturnedNullStringAsNullAttribute;
     [ImplementedAs=testByteString, TreatReturnedNullStringAs=Undefined] attribute ByteString testByteStringTreatReturnedNullStringAsUndefinedAttribute;
-    [ImplementedAs=testByteString, TreatReturnedNullStringAs=Null] ByteString getTestByteStringTreatReturnedNullStringAsNullMethod();
+    [ImplementedAs=testByteString] ByteString? getTestByteStringTreatReturnedNullStringAsNullMethod();
     [ImplementedAs=testByteString, TreatReturnedNullStringAs=Undefined] ByteString getTestByteStringTreatReturnedNullStringAsUndefinedMethod();
     void setTestByteString(ByteString byteString);
     [ImplementedAs=setTestByteString] void setTestByteStringDefaultNull(optional ByteString byteString = null);
@@ -57,7 +57,7 @@
     attribute ScalarValueString testScalarValueString;
     [ImplementedAs=testScalarValueString, TreatReturnedNullStringAs=Null] attribute ScalarValueString testScalarValueStringTreatReturnedNullStringAsNullAttribute;
     [ImplementedAs=testScalarValueString, TreatReturnedNullStringAs=Undefined] attribute ScalarValueString testScalarValueStringTreatReturnedNullStringAsUndefinedAttribute;
-    [ImplementedAs=testScalarValueString, TreatReturnedNullStringAs=Null] ScalarValueString getTestScalarValueStringTreatReturnedNullStringAsNullMethod();
+    [ImplementedAs=testScalarValueString] ScalarValueString? getTestScalarValueStringTreatReturnedNullStringAsNullMethod();
     [ImplementedAs=testScalarValueString, TreatReturnedNullStringAs=Undefined] ScalarValueString getTestScalarValueStringTreatReturnedNullStringAsUndefinedMethod();
     void setTestScalarValueString(ScalarValueString scalarValueString);
     [ImplementedAs=setTestScalarValueString] void setTestScalarValueStringDefaultNull(optional ScalarValueString scalarValueString = null);
diff --git a/core/workers/AbstractWorker.idl b/core/workers/AbstractWorker.idl
index fc46a14..bfe9347 100644
--- a/core/workers/AbstractWorker.idl
+++ b/core/workers/AbstractWorker.idl
@@ -29,6 +29,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://www.whatwg.org/specs/web-apps/current-work/#the-abstractworker-abstract-interface
+
 [
     LegacyTreatAsPartialInterface,
     NoInterfaceObject, // Always used on target of 'implements'
diff --git a/core/workers/DedicatedWorkerGlobalScope.idl b/core/workers/DedicatedWorkerGlobalScope.idl
index 8c4444d..66bc369 100644
--- a/core/workers/DedicatedWorkerGlobalScope.idl
+++ b/core/workers/DedicatedWorkerGlobalScope.idl
@@ -30,8 +30,8 @@
 
 [
     Exposed=DedicatedWorker,
-    Global=Worker&DedicatedWorker
+    Global=(Worker,DedicatedWorker)
 ] interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
-    [Custom, RaisesException] void postMessage(any message, optional MessagePort[] messagePorts);
+    [Custom, RaisesException] void postMessage(any message, optional sequence<Transferable> transfer);
     attribute EventHandler onmessage;
 };
diff --git a/core/workers/SharedWorker.idl b/core/workers/SharedWorker.idl
index bd4719c..f839017 100644
--- a/core/workers/SharedWorker.idl
+++ b/core/workers/SharedWorker.idl
@@ -29,6 +29,8 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://www.whatwg.org/specs/web-apps/current-work/#shared-workers-and-the-sharedworker-interface
+
 [
     ActiveDOMObject,
     Constructor(DOMString scriptURL, optional DOMString name = null),
diff --git a/core/workers/SharedWorkerGlobalScope.idl b/core/workers/SharedWorkerGlobalScope.idl
index e2a7f55..b6c1f15 100644
--- a/core/workers/SharedWorkerGlobalScope.idl
+++ b/core/workers/SharedWorkerGlobalScope.idl
@@ -30,9 +30,8 @@
 
 [
     Exposed=SharedWorker,
-    Global=Worker&SharedWorker
+    Global=(Worker,SharedWorker)
 ] interface SharedWorkerGlobalScope : WorkerGlobalScope {
     readonly attribute DOMString name;
              attribute EventHandler onconnect;
 };
-
diff --git a/core/workers/Worker.idl b/core/workers/Worker.idl
index f494473..a7d148e 100644
--- a/core/workers/Worker.idl
+++ b/core/workers/Worker.idl
@@ -25,6 +25,8 @@
  *
  */
 
+// http://www.whatwg.org/specs/web-apps/current-work/#dedicated-workers-and-the-worker-interface
+
 [
     ActiveDOMObject,
     Constructor(DOMString scriptUrl),
@@ -35,7 +37,7 @@
 
     attribute EventHandler onmessage;
 
-    [Custom, RaisesException] void postMessage(SerializedScriptValue message, optional MessagePort[] messagePorts);
+    [Custom, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
     void terminate();
 };
 
diff --git a/core/xml/XMLHttpRequest.idl b/core/xml/XMLHttpRequest.idl
index 6eaa71b..6147be4 100644
--- a/core/xml/XMLHttpRequest.idl
+++ b/core/xml/XMLHttpRequest.idl
@@ -33,14 +33,14 @@
     "document",
     "json",
     "text",
-    "stream"
+    "legacystream"
 };
 
 [
     WillBeGarbageCollected,
     ActiveDOMObject,
     CustomConstructor(optional XMLHttpRequestOptions options),
-    Exposed=Window&Worker
+    Exposed=(Window,DedicatedWorker,SharedWorker)
 ] interface XMLHttpRequest : XMLHttpRequestEventTarget {
     // event handler attributes
     attribute EventHandler onreadystatechange;
@@ -57,9 +57,9 @@
 
     [RaisesException=Setter] attribute boolean withCredentials;
 
-    [Custom, LogActivity, LogAllWorlds, RaisesException] void open(DOMString method, DOMString url, optional boolean async, optional DOMString user, optional DOMString password);
+    [Custom, RaisesException] void open(DOMString method, DOMString url, optional boolean async, optional DOMString user, optional DOMString password);
 
-    [LogActivity, LogAllWorlds, RaisesException] void setRequestHeader(DOMString header, DOMString value);
+    [RaisesException] void setRequestHeader(DOMString header, DOMString value);
 
     [Custom, RaisesException] void send();
     // FIXMEDART: send(ArrayBuffer data) should be eventually deprecated.
@@ -76,8 +76,8 @@
 
     // response
     [TreatReturnedNullStringAs=Undefined] DOMString getAllResponseHeaders();
-    [TreatReturnedNullStringAs=Null] DOMString getResponseHeader(DOMString header);
-    [Custom=Getter, RaisesException=Getter] readonly attribute DOMString responseText; // The custom getter implements TreatReturnedNullStringAs=Null
+    DOMString? getResponseHeader(DOMString header);
+    [Custom=Getter, RaisesException=Getter] readonly attribute DOMString? responseText;
     [RaisesException=Getter] readonly attribute Document responseXML;
 
     [RaisesException=Setter] attribute XMLHttpRequestResponseType responseType;
diff --git a/core/xml/XPathNSResolver.idl b/core/xml/XPathNSResolver.idl
index fd16fcc..2985d3a 100644
--- a/core/xml/XPathNSResolver.idl
+++ b/core/xml/XPathNSResolver.idl
@@ -22,6 +22,6 @@
     WillBeGarbageCollected,
     NoInterfaceObject
 ] interface XPathNSResolver {
-    [TreatReturnedNullStringAs=Null] DOMString lookupNamespaceURI([Default=Undefined] optional DOMString prefix);
+    DOMString? lookupNamespaceURI([Default=Undefined] optional DOMString prefix);
 };
 
diff --git a/modules/README b/modules/README
index 53c5767..1a601a7 100644
--- a/modules/README
+++ b/modules/README
@@ -6,4 +6,4 @@
 
 The current version corresponds to:
 URL: http://src.chromium.org/blink/branches/dart/dartium
-Current revision: 181823
+Current revision: 182210
diff --git a/modules/battery/BatteryManager.idl b/modules/battery/BatteryManager.idl
index 01a6ce1..33a059f 100644
--- a/modules/battery/BatteryManager.idl
+++ b/modules/battery/BatteryManager.idl
@@ -6,6 +6,7 @@
 [
     RuntimeEnabled=BatteryStatus,
     TypeChecking=Unrestricted,
+    ActiveDOMObject
 ] interface BatteryManager : EventTarget {
     readonly attribute boolean charging;
     readonly attribute unrestricted double chargingTime;
diff --git a/modules/beacon/NavigatorBeacon.idl b/modules/beacon/NavigatorBeacon.idl
index 465c211..7b31421 100644
--- a/modules/beacon/NavigatorBeacon.idl
+++ b/modules/beacon/NavigatorBeacon.idl
@@ -8,8 +8,8 @@
     RuntimeEnabled=Beacon,
 ] partial interface Navigator {
     // FIXME: should be union type http://crbug.com/240176
-    [CallWith=ExecutionContext, RaisesException] boolean sendBeacon(DOMString url, ArrayBufferView data);
-    [CallWith=ExecutionContext, RaisesException] boolean sendBeacon(DOMString url, Blob data);
-    [CallWith=ExecutionContext, RaisesException] boolean sendBeacon(DOMString url, FormData data);
-    [CallWith=ExecutionContext, RaisesException] boolean sendBeacon(DOMString url, [Default=Undefined] optional DOMString data);
+    [CallWith=ExecutionContext, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, ArrayBufferView data);
+    [CallWith=ExecutionContext, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, Blob data);
+    [CallWith=ExecutionContext, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, FormData data);
+    [CallWith=ExecutionContext, MeasureAs=SendBeacon, RaisesException] boolean sendBeacon(DOMString url, [Default=Undefined] optional DOMString data);
 };
diff --git a/modules/credentialmanager/Credential.idl b/modules/credentialmanager/Credential.idl
new file mode 100644
index 0000000..76eab5b
--- /dev/null
+++ b/modules/credentialmanager/Credential.idl
@@ -0,0 +1,12 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=CredentialManager,
+    GarbageCollected
+] interface Credential {
+    readonly attribute DOMString id;
+    readonly attribute DOMString name;
+    readonly attribute DOMString avatarURL;
+};
diff --git a/modules/credentialmanager/CredentialsContainer.idl b/modules/credentialmanager/CredentialsContainer.idl
new file mode 100644
index 0000000..64ecde0
--- /dev/null
+++ b/modules/credentialmanager/CredentialsContainer.idl
@@ -0,0 +1,13 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=CredentialManager,
+    GarbageCollected
+] interface CredentialsContainer {
+    [CallWith=ScriptState] Promise request(optional Dictionary options);
+    [CallWith=ScriptState] Promise notifySignedIn(optional Credential credential);
+    [CallWith=ScriptState] Promise notifyFailedSignIn(optional Credential credential);
+    [CallWith=ScriptState] Promise notifySignedOut();
+};
diff --git a/modules/credentialmanager/FederatedCredential.idl b/modules/credentialmanager/FederatedCredential.idl
new file mode 100644
index 0000000..b596da2
--- /dev/null
+++ b/modules/credentialmanager/FederatedCredential.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=CredentialManager,
+    RaisesException=Constructor,
+    Constructor(DOMString id, DOMString name, DOMString avatarURL, DOMString federation)
+] interface FederatedCredential : Credential {
+    readonly attribute DOMString federation;
+};
diff --git a/modules/credentialmanager/LocalCredential.idl b/modules/credentialmanager/LocalCredential.idl
new file mode 100644
index 0000000..62c4aa6
--- /dev/null
+++ b/modules/credentialmanager/LocalCredential.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=CredentialManager,
+    RaisesException=Constructor,
+    Constructor(DOMString id, DOMString name, DOMString avatarURL, DOMString password)
+] interface LocalCredential : Credential {
+    readonly attribute DOMString password;
+};
diff --git a/modules/credentialmanager/NavigatorCredentials.idl b/modules/credentialmanager/NavigatorCredentials.idl
new file mode 100644
index 0000000..35b163b
--- /dev/null
+++ b/modules/credentialmanager/NavigatorCredentials.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=CredentialManager,
+] partial interface Navigator {
+    readonly attribute CredentialsContainer credentials;
+};
diff --git a/modules/crypto/AesKeyAlgorithm.idl b/modules/crypto/AesKeyAlgorithm.idl
deleted file mode 100644
index 171650d..0000000
--- a/modules/crypto/AesKeyAlgorithm.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-    NoInterfaceObject
-] interface AesKeyAlgorithm : KeyAlgorithm {
-  readonly attribute unsigned short length;
-};
diff --git a/modules/crypto/Key.idl b/modules/crypto/CryptoKey.idl
similarity index 95%
rename from modules/crypto/Key.idl
rename to modules/crypto/CryptoKey.idl
index 9bc0305..0ad4ab6 100644
--- a/modules/crypto/Key.idl
+++ b/modules/crypto/CryptoKey.idl
@@ -31,9 +31,9 @@
 [
     GarbageCollected,
     NoInterfaceObject
-] interface Key {
+] interface CryptoKey {
     readonly attribute DOMString type;
     readonly attribute boolean extractable;
-    readonly attribute KeyAlgorithm algorithm;
+    [Custom] readonly attribute object algorithm;
     readonly attribute DOMString[] usages;
 };
diff --git a/modules/crypto/HmacKeyAlgorithm.idl b/modules/crypto/HmacKeyAlgorithm.idl
deleted file mode 100644
index 89cc843..0000000
--- a/modules/crypto/HmacKeyAlgorithm.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-    NoInterfaceObject
-] interface HmacKeyAlgorithm : KeyAlgorithm {
-  readonly attribute KeyAlgorithm hash;
-  readonly attribute unsigned long length;
-};
diff --git a/modules/crypto/KeyAlgorithm.idl b/modules/crypto/KeyAlgorithm.idl
deleted file mode 100644
index d9e0ea0..0000000
--- a/modules/crypto/KeyAlgorithm.idl
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-    GarbageCollected,
-    NoInterfaceObject,
-    SpecialWrapFor=AesKeyAlgorithm|HmacKeyAlgorithm|RsaHashedKeyAlgorithm
-] interface KeyAlgorithm {
-    readonly attribute DOMString name;
-};
diff --git a/modules/crypto/RsaHashedKeyAlgorithm.idl b/modules/crypto/RsaHashedKeyAlgorithm.idl
deleted file mode 100644
index 28b765d..0000000
--- a/modules/crypto/RsaHashedKeyAlgorithm.idl
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-    NoInterfaceObject
-] interface RsaHashedKeyAlgorithm : RsaKeyAlgorithm {
-  readonly attribute KeyAlgorithm hash;
-};
diff --git a/modules/crypto/RsaKeyAlgorithm.idl b/modules/crypto/RsaKeyAlgorithm.idl
deleted file mode 100644
index 8cf43ed..0000000
--- a/modules/crypto/RsaKeyAlgorithm.idl
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2014 Google Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *     * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *     * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *     * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-[
-    NoInterfaceObject
-] interface RsaKeyAlgorithm : KeyAlgorithm {
-  readonly attribute unsigned long modulusLength;
-  readonly attribute Uint8Array publicExponent;
-};
diff --git a/modules/crypto/SubtleCrypto.idl b/modules/crypto/SubtleCrypto.idl
index da23af3..e76cac4 100644
--- a/modules/crypto/SubtleCrypto.idl
+++ b/modules/crypto/SubtleCrypto.idl
@@ -31,7 +31,7 @@
 // http://www.w3.org/TR/WebCryptoAPI/#subtlecrypto-interface
 
 typedef DOMString KeyFormat;
-typedef DOMString KeyUsage; // from Key interface
+typedef DOMString KeyUsage; // from CryptoKey interface
 
 // FIXME: use below; needs support for union types http://crbug.com/240176
 typedef (ArrayBuffer or ArrayBufferView) CryptoOperationData;
@@ -40,17 +40,17 @@
     GarbageCollected,
     NoInterfaceObject,
 ] interface SubtleCrypto {
-    [CallWith=ScriptState] Promise encrypt(Dictionary algorithm, Key key, ArrayBuffer data);
-    [CallWith=ScriptState] Promise encrypt(Dictionary algorithm, Key key, ArrayBufferView data);
+    [CallWith=ScriptState] Promise encrypt(Dictionary algorithm, CryptoKey key, ArrayBuffer data);
+    [CallWith=ScriptState] Promise encrypt(Dictionary algorithm, CryptoKey key, ArrayBufferView data);
 
-    [CallWith=ScriptState] Promise decrypt(Dictionary algorithm, Key key, ArrayBuffer data);
-    [CallWith=ScriptState] Promise decrypt(Dictionary algorithm, Key key, ArrayBufferView data);
+    [CallWith=ScriptState] Promise decrypt(Dictionary algorithm, CryptoKey key, ArrayBuffer data);
+    [CallWith=ScriptState] Promise decrypt(Dictionary algorithm, CryptoKey key, ArrayBufferView data);
 
-    [CallWith=ScriptState] Promise sign(Dictionary algorithm, Key key, ArrayBuffer data);
-    [CallWith=ScriptState] Promise sign(Dictionary algorithm, Key key, ArrayBufferView data);
+    [CallWith=ScriptState] Promise sign(Dictionary algorithm, CryptoKey key, ArrayBuffer data);
+    [CallWith=ScriptState] Promise sign(Dictionary algorithm, CryptoKey key, ArrayBufferView data);
 
-    // FIXME: should be: Promise verify(Dictionary algorithm, Key key, CryptoOperationData signature, CryptoOperationData data);
-    [CallWith=ScriptState, Custom, ImplementedAs=verifySignature] Promise verify(Dictionary algorithm, Key key, object signature, object data);
+    // FIXME: should be: Promise verify(Dictionary algorithm, CryptoKey key, CryptoOperationData signature, CryptoOperationData data);
+    [CallWith=ScriptState, Custom, ImplementedAs=verifySignature] Promise verify(Dictionary algorithm, CryptoKey key, object signature, object data);
 
     [CallWith=ScriptState] Promise digest(Dictionary algorithm, ArrayBuffer data);
     [CallWith=ScriptState] Promise digest(Dictionary algorithm, ArrayBufferView data);
@@ -61,10 +61,10 @@
     [CallWith=ScriptState] Promise importKey(KeyFormat format, ArrayBufferView keyData, Dictionary algorithm, boolean extractable, KeyUsage[] keyUsages);
     [CallWith=ScriptState] Promise importKey(KeyFormat format, Dictionary keyData, Dictionary algorithm, boolean extractable, KeyUsage[] keyUsages);
 
-    [CallWith=ScriptState] Promise exportKey(KeyFormat format, Key key);
+    [CallWith=ScriptState] Promise exportKey(KeyFormat format, CryptoKey key);
 
-    [CallWith=ScriptState] Promise wrapKey(KeyFormat format, Key key, Key wrappingKey, Dictionary wrapAlgorithm);
+    [CallWith=ScriptState] Promise wrapKey(KeyFormat format, CryptoKey key, CryptoKey wrappingKey, Dictionary wrapAlgorithm);
 
-    [CallWith=ScriptState] Promise unwrapKey(KeyFormat format, ArrayBuffer wrappedKey, Key unwrappingKey, Dictionary unwrapAlgorithm, Dictionary unwrappedKeyAlgorithm, boolean extractable, KeyUsage[] keyUsages);
-    [CallWith=ScriptState] Promise unwrapKey(KeyFormat format, ArrayBufferView wrappedKey, Key unwrappingKey, Dictionary unwrapAlgorithm, Dictionary unwrappedKeyAlgorithm, boolean extractable, KeyUsage[] keyUsages);
+    [CallWith=ScriptState] Promise unwrapKey(KeyFormat format, ArrayBuffer wrappedKey, CryptoKey unwrappingKey, Dictionary unwrapAlgorithm, Dictionary unwrappedKeyAlgorithm, boolean extractable, KeyUsage[] keyUsages);
+    [CallWith=ScriptState] Promise unwrapKey(KeyFormat format, ArrayBufferView wrappedKey, CryptoKey unwrappingKey, Dictionary unwrapAlgorithm, Dictionary unwrappedKeyAlgorithm, boolean extractable, KeyUsage[] keyUsages);
 };
diff --git a/modules/donottrack/NavigatorDoNotTrack.idl b/modules/donottrack/NavigatorDoNotTrack.idl
index 1ecea7f..1f1b615 100644
--- a/modules/donottrack/NavigatorDoNotTrack.idl
+++ b/modules/donottrack/NavigatorDoNotTrack.idl
@@ -29,5 +29,5 @@
  */
 
 partial interface Navigator {
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString doNotTrack;
+    readonly attribute DOMString? doNotTrack;
 };
diff --git a/modules/encoding/TextDecoder.idl b/modules/encoding/TextDecoder.idl
index f71c7b8..af0ffac 100644
--- a/modules/encoding/TextDecoder.idl
+++ b/modules/encoding/TextDecoder.idl
@@ -30,8 +30,8 @@
 
 [
     RuntimeEnabled=EncodingAPI,
-    Exposed=Window&Worker,
-    Constructor(optional DOMString label = null, optional Dictionary options),
+    Exposed=(Window,Worker),
+    Constructor(optional DOMString label = "utf-8", optional Dictionary options),
     RaisesException=Constructor,
     GarbageCollected,
     MeasureAs=TextDecoderConstructor
diff --git a/modules/encoding/TextEncoder.idl b/modules/encoding/TextEncoder.idl
index dc86fef..7e284d5 100644
--- a/modules/encoding/TextEncoder.idl
+++ b/modules/encoding/TextEncoder.idl
@@ -30,12 +30,12 @@
 
 [
     RuntimeEnabled=EncodingAPI,
-    Exposed=Window&Worker,
-    Constructor(optional DOMString utfLabel = null),
+    Exposed=(Window,Worker),
+    Constructor(optional DOMString utfLabel = "utf-8"),
     RaisesException=Constructor,
     GarbageCollected,
     MeasureAs=TextEncoderConstructor
 ] interface TextEncoder {
     readonly attribute DOMString encoding;
-    [MeasureAs=TextEncoderEncode] Uint8Array encode(optional ScalarValueString input = null, optional Dictionary options);
+    [MeasureAs=TextEncoderEncode] Uint8Array encode(optional ScalarValueString input = "");
 };
diff --git a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
index 52cd222..ed94199 100644
--- a/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
+++ b/modules/encryptedmedia/HTMLMediaElementEncryptedMedia.idl
@@ -3,9 +3,9 @@
 // found in the LICENSE file.
 
 partial interface HTMLMediaElement {
-    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, MeasureAs=PrefixedMediaGenerateKeyRequest] void webkitGenerateKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional Uint8Array initData);
-    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, MeasureAs=PrefixedMediaAddKey] void webkitAddKey([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, Uint8Array key, optional Uint8Array initData, optional DOMString sessionId = null);
-    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, MeasureAs=PrefixedMediaCancelKeyRequest] void webkitCancelKeyRequest([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString keySystem, optional DOMString sessionId = null);
+    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, MeasureAs=PrefixedMediaGenerateKeyRequest] void webkitGenerateKeyRequest([TreatUndefinedAs=NullString] DOMString? keySystem, optional Uint8Array initData);
+    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, MeasureAs=PrefixedMediaAddKey] void webkitAddKey([TreatUndefinedAs=NullString] DOMString? keySystem, Uint8Array key, optional Uint8Array initData, optional DOMString sessionId = null);
+    [RuntimeEnabled=PrefixedEncryptedMedia, RaisesException, MeasureAs=PrefixedMediaCancelKeyRequest] void webkitCancelKeyRequest([TreatUndefinedAs=NullString] DOMString? keySystem, optional DOMString sessionId = null);
 
     [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitkeyadded;
     [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitkeyerror;
@@ -13,6 +13,6 @@
     [RuntimeEnabled=PrefixedEncryptedMedia] attribute EventHandler onwebkitneedkey;
 
     [RuntimeEnabled=EncryptedMedia] readonly attribute MediaKeys mediaKeys;
-    [RuntimeEnabled=EncryptedMedia, RaisesException, TypeChecking=Interface|Nullable] void setMediaKeys(MediaKeys? mediaKeys);
+    [RuntimeEnabled=EncryptedMedia, RaisesException, TypeChecking=Interface] void setMediaKeys(MediaKeys? mediaKeys);
     [RuntimeEnabled=EncryptedMedia] attribute EventHandler onneedkey;
 };
diff --git a/modules/encryptedmedia/MediaKeyMessageEvent.idl b/modules/encryptedmedia/MediaKeyMessageEvent.idl
index 67bc8f4..6cda051 100644
--- a/modules/encryptedmedia/MediaKeyMessageEvent.idl
+++ b/modules/encryptedmedia/MediaKeyMessageEvent.idl
@@ -27,7 +27,7 @@
     EventConstructor,
     RuntimeEnabled=EncryptedMedia
 ] interface MediaKeyMessageEvent : Event {
-    readonly attribute Uint8Array message;
+    readonly attribute ArrayBuffer message;
     [InitializedByEventConstructor] readonly attribute DOMString destinationURL;
 };
 
diff --git a/modules/encryptedmedia/MediaKeySession.idl b/modules/encryptedmedia/MediaKeySession.idl
index a5cf333..9126d3b 100644
--- a/modules/encryptedmedia/MediaKeySession.idl
+++ b/modules/encryptedmedia/MediaKeySession.idl
@@ -27,7 +27,7 @@
     ActiveDOMObject,
     RuntimeEnabled=EncryptedMedia,
     GarbageCollected,
-    TypeChecking=Interface|Nullable
+    TypeChecking=Interface
 ] interface MediaKeySession : EventTarget {
     // error state
     readonly attribute MediaKeyError error;
@@ -35,8 +35,10 @@
     // session properties
     readonly attribute DOMString keySystem;
     readonly attribute DOMString sessionId;
+    [CallWith=ScriptState] readonly attribute Promise closed;
 
     // session operations
-    [RaisesException] void update(Uint8Array response);
-    [RaisesException] void release();
+    [CallWith=ScriptState] Promise update(ArrayBuffer response);
+    [CallWith=ScriptState] Promise update(ArrayBufferView response);
+    [CallWith=ScriptState] Promise release();
 };
diff --git a/modules/encryptedmedia/MediaKeys.idl b/modules/encryptedmedia/MediaKeys.idl
index a17d8d9..05dded4 100644
--- a/modules/encryptedmedia/MediaKeys.idl
+++ b/modules/encryptedmedia/MediaKeys.idl
@@ -23,17 +23,21 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+enum SessionType {
+    "temporary",
+    "persistent"
+};
+
 [
     RuntimeEnabled=EncryptedMedia,
-    Constructor(DOMString keySystem),
-    ConstructorCallWith=ExecutionContext,
-    RaisesException=Constructor,
     GarbageCollected,
-    TypeChecking=Interface|Nullable
+    TypeChecking=Interface
 ] interface MediaKeys {
     readonly attribute DOMString keySystem;
 
-    [CallWith=ExecutionContext, RaisesException] MediaKeySession createSession(DOMString type, Uint8Array initData);
+    [CallWith=ScriptState] static Promise create(DOMString keySystem);
+    [CallWith=ScriptState] Promise createSession(DOMString initDataType, ArrayBuffer initData, optional SessionType sessionType = "temporary");
+    [CallWith=ScriptState] Promise createSession(DOMString initDataType, ArrayBufferView initData, optional SessionType sessionType = "temporary");
 
     static boolean isTypeSupported(DOMString keySystem, optional DOMString contentType = null);
 };
diff --git a/modules/filesystem/DirectoryEntry.idl b/modules/filesystem/DirectoryEntry.idl
index 3e51b11..2a0bc6c 100644
--- a/modules/filesystem/DirectoryEntry.idl
+++ b/modules/filesystem/DirectoryEntry.idl
@@ -32,7 +32,7 @@
     NoInterfaceObject
 ] interface DirectoryEntry : Entry {
     DirectoryReader createReader();
-    void getFile([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, optional Dictionary options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
-    void getDirectory([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, optional Dictionary options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    void getFile([TreatUndefinedAs=NullString] DOMString? path, optional Dictionary options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    void getDirectory([TreatUndefinedAs=NullString] DOMString? path, optional Dictionary options, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
     void removeRecursively(VoidCallback successCallback, optional ErrorCallback errorCallback);
 };
diff --git a/modules/filesystem/DirectoryEntrySync.idl b/modules/filesystem/DirectoryEntrySync.idl
index b1c93b9..871c306 100644
--- a/modules/filesystem/DirectoryEntrySync.idl
+++ b/modules/filesystem/DirectoryEntrySync.idl
@@ -32,7 +32,7 @@
     NoInterfaceObject
 ] interface DirectoryEntrySync : EntrySync {
     DirectoryReaderSync createReader();
-    [RaisesException] FileEntrySync getFile([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, Dictionary flags);
-    [RaisesException] DirectoryEntrySync getDirectory([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString path, Dictionary flags);
+    [RaisesException] FileEntrySync getFile([TreatUndefinedAs=NullString] DOMString? path, Dictionary flags);
+    [RaisesException] DirectoryEntrySync getDirectory([TreatUndefinedAs=NullString] DOMString? path, Dictionary flags);
     [RaisesException] void removeRecursively();
 };
diff --git a/modules/filesystem/Entry.idl b/modules/filesystem/Entry.idl
index 5c3fed4..86d338a 100644
--- a/modules/filesystem/Entry.idl
+++ b/modules/filesystem/Entry.idl
@@ -40,8 +40,8 @@
     readonly attribute DOMFileSystem filesystem;
 
     void getMetadata(MetadataCallback successCallback, optional ErrorCallback errorCallback);
-    void moveTo(DirectoryEntry parent, [TreatNullAs=NullString, TreatUndefinedAs=NullString] optional DOMString name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
-    void copyTo(DirectoryEntry parent, [TreatNullAs=NullString, TreatUndefinedAs=NullString] optional DOMString name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    void moveTo(DirectoryEntry parent, [TreatUndefinedAs=NullString] optional DOMString? name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
+    void copyTo(DirectoryEntry parent, [TreatUndefinedAs=NullString] optional DOMString? name, optional EntryCallback successCallback, optional ErrorCallback errorCallback);
     DOMString toURL();
     void remove(VoidCallback successCallback, optional ErrorCallback errorCallback);
     void getParent(optional EntryCallback successCallback, optional ErrorCallback errorCallback);
diff --git a/modules/filesystem/EntrySync.idl b/modules/filesystem/EntrySync.idl
index b8f6b72..d953977 100644
--- a/modules/filesystem/EntrySync.idl
+++ b/modules/filesystem/EntrySync.idl
@@ -40,8 +40,8 @@
     readonly attribute DOMFileSystemSync filesystem;
 
     [RaisesException] Metadata getMetadata();
-    [RaisesException] EntrySync moveTo(DirectoryEntrySync parent, [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString name);
-    [RaisesException] EntrySync copyTo(DirectoryEntrySync parent, [TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString name);
+    [RaisesException] EntrySync moveTo(DirectoryEntrySync parent, [TreatUndefinedAs=NullString] DOMString? name);
+    [RaisesException] EntrySync copyTo(DirectoryEntrySync parent, [TreatUndefinedAs=NullString] DOMString? name);
     DOMString toURL();
     [RaisesException] void remove();
     DirectoryEntrySync getParent();
diff --git a/modules/filesystem/WindowFileSystem.idl b/modules/filesystem/WindowFileSystem.idl
index b35cc8a..4d98026 100644
--- a/modules/filesystem/WindowFileSystem.idl
+++ b/modules/filesystem/WindowFileSystem.idl
@@ -30,7 +30,7 @@
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
 
-    [RuntimeEnabled=FileSystem] void webkitRequestFileSystem(unsigned short type, long long size,
+    [RuntimeEnabled=FileSystem, MeasureAs=RequestFileSystem] void webkitRequestFileSystem(unsigned short type, long long size,
             FileSystemCallback successCallback, optional ErrorCallback errorCallback);
     [RuntimeEnabled=FileSystem] void webkitResolveLocalFileSystemURL(DOMString url,
             EntryCallback successCallback, optional ErrorCallback errorCallback);
diff --git a/modules/filesystem/WorkerGlobalScopeFileSystem.idl b/modules/filesystem/WorkerGlobalScopeFileSystem.idl
index 1e13f7f..f01817a 100644
--- a/modules/filesystem/WorkerGlobalScopeFileSystem.idl
+++ b/modules/filesystem/WorkerGlobalScopeFileSystem.idl
@@ -28,8 +28,8 @@
     const unsigned short TEMPORARY = 0;
     const unsigned short PERSISTENT = 1;
 
-    [RuntimeEnabled=FileSystem] void webkitRequestFileSystem(unsigned short type, long long size, optional FileSystemCallback successCallback, optional ErrorCallback errorCallback);
-    [RuntimeEnabled=FileSystem, RaisesException] DOMFileSystemSync webkitRequestFileSystemSync(unsigned short type, long long size);
+    [RuntimeEnabled=FileSystem, MeasureAs=RequestFileSystemWorker] void webkitRequestFileSystem(unsigned short type, long long size, optional FileSystemCallback successCallback, optional ErrorCallback errorCallback);
+    [RuntimeEnabled=FileSystem, RaisesException, MeasureAs=RequestFileSystemSyncWorker] DOMFileSystemSync webkitRequestFileSystemSync(unsigned short type, long long size);
     [RuntimeEnabled=FileSystem] void webkitResolveLocalFileSystemURL(DOMString url, EntryCallback successCallback, optional ErrorCallback errorCallback);
     [RuntimeEnabled=FileSystem, RaisesException] EntrySync webkitResolveLocalFileSystemSyncURL(DOMString url);
 
diff --git a/modules/geofencing/CircularRegion.idl b/modules/geofencing/CircularRegion.idl
new file mode 100644
index 0000000..19278fd
--- /dev/null
+++ b/modules/geofencing/CircularRegion.idl
@@ -0,0 +1,17 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=Geofencing,
+    Exposed=(Window,Worker),
+    GarbageCollected,
+    Constructor(Dictionary init)
+] interface CircularRegion : GeofencingRegion {
+    const double MIN_RADIUS = 1.0;
+    const double MAX_RADIUS = 100.0;
+
+    readonly attribute double latitude;
+    readonly attribute double longitude;
+    readonly attribute double radius;
+};
diff --git a/modules/geofencing/Geofencing.idl b/modules/geofencing/Geofencing.idl
new file mode 100644
index 0000000..7b36e70
--- /dev/null
+++ b/modules/geofencing/Geofencing.idl
@@ -0,0 +1,13 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    NoInterfaceObject,
+    RuntimeEnabled=Geofencing,
+    GarbageCollected,
+] interface Geofencing {
+    [CallWith=ScriptState] Promise registerRegion(GeofencingRegion region);
+    [CallWith=ScriptState] Promise unregisterRegion(DOMString regionId);
+    [CallWith=ScriptState] Promise getRegisteredRegions();
+};
diff --git a/modules/geofencing/GeofencingRegion.idl b/modules/geofencing/GeofencingRegion.idl
new file mode 100644
index 0000000..4e22058
--- /dev/null
+++ b/modules/geofencing/GeofencingRegion.idl
@@ -0,0 +1,11 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=Geofencing,
+    NoInterfaceObject,
+    GarbageCollected,
+] interface GeofencingRegion {
+    readonly attribute DOMString id;
+};
diff --git a/modules/geofencing/NavigatorGeofencing.idl b/modules/geofencing/NavigatorGeofencing.idl
new file mode 100644
index 0000000..2591b0f
--- /dev/null
+++ b/modules/geofencing/NavigatorGeofencing.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=Geofencing,
+] partial interface Navigator {
+    readonly attribute Geofencing geofencing;
+};
diff --git a/modules/geolocation/Geolocation.idl b/modules/geolocation/Geolocation.idl
index ca1b5a5..2c9c1f8 100644
--- a/modules/geolocation/Geolocation.idl
+++ b/modules/geolocation/Geolocation.idl
@@ -29,15 +29,14 @@
     NoInterfaceObject,
 ] interface Geolocation {
     // FIXME: should be: PositionOptions options: need PositionOptions.idl and dictionary http:/crbug.com/321462
-    [Custom, LogActivity] void getCurrentPosition(PositionCallback successCallback,
+    [LogActivity] void getCurrentPosition(PositionCallback successCallback,
                                      optional PositionErrorCallback errorCallback,
-                                     optional object options);
+                                     optional Dictionary options);
 
     // FIXME: should be: PositionOptions options: need PositionOptions.idl and dictionary http:/crbug.com/321462
-    [Custom, LogActivity] long watchPosition(PositionCallback successCallback,
+    [LogActivity] long watchPosition(PositionCallback successCallback,
                                 optional PositionErrorCallback errorCallback,
-                                optional object options);
+                                optional Dictionary options);
 
     void clearWatch(long watchID);
 };
-
diff --git a/modules/indexeddb/IDBCursor.idl b/modules/indexeddb/IDBCursor.idl
index 727f529..b96920b 100644
--- a/modules/indexeddb/IDBCursor.idl
+++ b/modules/indexeddb/IDBCursor.idl
@@ -23,11 +23,20 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://www.w3.org/TR/IndexedDB/#idl-def-IDBCursor
+
+enum IDBCursorDirection {
+    "next",
+    "nextunique",
+    "prev",
+    "prevunique"
+};
+
 [
     GarbageCollected
 ] interface IDBCursor {
 
-    readonly attribute DOMString direction;
+    readonly attribute IDBCursorDirection direction;
     [CallWith=ScriptState, CachedAttribute=isKeyDirty] readonly attribute any key;
     [CallWith=ScriptState, CachedAttribute=isPrimaryKeyDirty] readonly attribute any primaryKey;
     [CallWith=ScriptState] readonly attribute any source;
diff --git a/modules/indexeddb/IDBDatabase.idl b/modules/indexeddb/IDBDatabase.idl
index 41e8ff0..bb9c038 100644
--- a/modules/indexeddb/IDBDatabase.idl
+++ b/modules/indexeddb/IDBDatabase.idl
@@ -26,6 +26,13 @@
 
 // https://dvcs.w3.org/hg/IndexedDB/raw-file/default/Overview.html#idl-def-IDBDatabase
 
+// FIXME: de-duplicate this when crbug.com/390758 is fixed.
+enum IDBTransactionMode {
+    "readonly",
+    "readwrite",
+    "versionchange"
+};
+
 [
     ActiveDOMObject,
     GarbageCollected,
@@ -36,9 +43,9 @@
     [RaisesException] IDBObjectStore createObjectStore(DOMString name, optional Dictionary options);
     [RaisesException] void deleteObjectStore(DOMString name);
     // FIXME: should be union type http://crbug.com/240176
-    [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(DOMString storeName, optional DOMString mode = null);
-    [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(sequence<DOMString> storeNames, optional DOMString mode = null);
-    [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(DOMStringList storeNames, optional DOMString mode = null);
+    [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(DOMString storeName, optional IDBTransactionMode mode = "readonly");
+    [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(sequence<DOMString> storeNames, optional IDBTransactionMode mode = "readonly");
+    [CallWith=ExecutionContext, RaisesException] IDBTransaction transaction(DOMStringList storeNames, optional IDBTransactionMode mode = "readonly");
     void close();
     attribute EventHandler onabort;
     attribute EventHandler onclose;
diff --git a/modules/indexeddb/IDBIndex.idl b/modules/indexeddb/IDBIndex.idl
index 5087716..c6d6826 100644
--- a/modules/indexeddb/IDBIndex.idl
+++ b/modules/indexeddb/IDBIndex.idl
@@ -23,6 +23,16 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://www.w3.org/TR/IndexedDB/#idl-def-IDBIndex
+
+// FIXME: de-duplicate this when crbug.com/390758 is fixed.
+enum IDBCursorDirection {
+    "next",
+    "nextunique",
+    "prev",
+    "prevunique"
+};
+
 [
     GarbageCollected
 ] interface IDBIndex {
@@ -32,8 +42,8 @@
     readonly attribute boolean unique;
     readonly attribute boolean multiEntry;
 
-    [CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional DOMString direction = null);
-    [CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional DOMString direction = null);
+    [CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
+    [CallWith=ScriptState, RaisesException] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
 
     [CallWith=ScriptState, RaisesException] IDBRequest get(any key);
     [CallWith=ScriptState, RaisesException] IDBRequest getKey(any key);
diff --git a/modules/indexeddb/IDBKeyRange.idl b/modules/indexeddb/IDBKeyRange.idl
index 9b0b06b..93654fc 100644
--- a/modules/indexeddb/IDBKeyRange.idl
+++ b/modules/indexeddb/IDBKeyRange.idl
@@ -33,7 +33,7 @@
 
     // FIXMEDART: Define new names for these (see b/4436830).
     [CallWith=ExecutionContext, RaisesException, DartName=only_] static IDBKeyRange only(any value);
-    [CallWith=ExecutionContext, RaisesException, DartName=lowerBound_] static IDBKeyRange lowerBound(any bound, [Default=Undefined] optional boolean open);
-    [CallWith=ExecutionContext, RaisesException, DartName=upperBound_] static IDBKeyRange upperBound(any bound, [Default=Undefined] optional boolean open);
-    [CallWith=ExecutionContext, RaisesException, DartName=bound_] static IDBKeyRange bound(any lower, any upper, [Default=Undefined] optional boolean lowerOpen, [Default=Undefined] optional boolean upperOpen);
+    [CallWith=ExecutionContext, RaisesException, DartName=lowerBound_] static IDBKeyRange lowerBound(any bound, optional boolean open = false);
+    [CallWith=ExecutionContext, RaisesException, DartName=upperBound_] static IDBKeyRange upperBound(any bound, optional boolean open = false);
+    [CallWith=ExecutionContext, RaisesException, DartName=bound_] static IDBKeyRange bound(any lower, any upper, optional boolean lowerOpen = false, optional boolean upperOpen = false);
 };
diff --git a/modules/indexeddb/IDBObjectStore.idl b/modules/indexeddb/IDBObjectStore.idl
index 14bd1da..a22fc74 100644
--- a/modules/indexeddb/IDBObjectStore.idl
+++ b/modules/indexeddb/IDBObjectStore.idl
@@ -25,10 +25,18 @@
 
 // https://dvcs.w3.org/hg/IndexedDB/raw-file/default/Overview.html#idl-def-IDBObjectStore
 
+// FIXME: de-duplicate this when crbug.com/390758 is fixed.
+enum IDBCursorDirection {
+    "next",
+    "nextunique",
+    "prev",
+    "prevunique"
+};
+
 [
     GarbageCollected,
 ] interface IDBObjectStore {
-    [TreatReturnedNullStringAs=Null] readonly attribute DOMString name;
+    readonly attribute DOMString? name;
     [CallWith=ScriptState] readonly attribute any keyPath;
     readonly attribute DOMStringList indexNames;
     readonly attribute IDBTransaction transaction;
@@ -39,8 +47,8 @@
     [CallWith=ScriptState, ImplementedAs=deleteFunction, RaisesException] IDBRequest delete(any key);
     [CallWith=ScriptState, RaisesException] IDBRequest get(any key);
     [CallWith=ScriptState, RaisesException] IDBRequest clear();
-    [CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional DOMString direction = null);
-    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional DOMString direction = null);
+    [CallWith=ScriptState, RaisesException] IDBRequest openCursor([Default=Undefined] optional any range, optional DOMString direction = "next");
+    [CallWith=ScriptState, RaisesException, RuntimeEnabled=IndexedDBExperimental] IDBRequest openKeyCursor([Default=Undefined] optional any range, optional IDBCursorDirection direction = "next");
     // FIXME: should be union type http://crbug.com/240176
     [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, DOMString keyPath, optional Dictionary options);
     [CallWith=ScriptState, RaisesException] IDBIndex createIndex(DOMString name, sequence<DOMString> keyPath, optional Dictionary options);
diff --git a/modules/indexeddb/IDBRequest.idl b/modules/indexeddb/IDBRequest.idl
index a52b55b..1241cb7 100644
--- a/modules/indexeddb/IDBRequest.idl
+++ b/modules/indexeddb/IDBRequest.idl
@@ -27,6 +27,11 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+enum IDBRequestReadyState {
+    "pending",
+    "done"
+};
+
 [
     ActiveDOMObject,
     GarbageCollected,
@@ -38,7 +43,7 @@
     readonly attribute IDBTransaction transaction;
 
     // States
-    readonly attribute DOMString readyState;
+    readonly attribute IDBRequestReadyState readyState;
 
     // Events
     attribute EventHandler onsuccess;
diff --git a/modules/indexeddb/IDBTransaction.idl b/modules/indexeddb/IDBTransaction.idl
index f68c86e..8c86f14 100644
--- a/modules/indexeddb/IDBTransaction.idl
+++ b/modules/indexeddb/IDBTransaction.idl
@@ -24,13 +24,20 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// FIXME: de-duplicate this when crbug.com/390758 is fixed.
+enum IDBTransactionMode {
+    "readonly",
+    "readwrite",
+    "versionchange"
+};
+
 [
     ActiveDOMObject,
     GarbageCollected
 ] interface IDBTransaction : EventTarget {
 
     // Properties
-    readonly attribute DOMString mode;
+    readonly attribute IDBTransactionMode mode;
     readonly attribute IDBDatabase db;
     readonly attribute DOMError error;
 
diff --git a/modules/indexeddb/IDBVersionChangeEvent.idl b/modules/indexeddb/IDBVersionChangeEvent.idl
index 3ee0c58..2f73603 100644
--- a/modules/indexeddb/IDBVersionChangeEvent.idl
+++ b/modules/indexeddb/IDBVersionChangeEvent.idl
@@ -23,6 +23,14 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+// http://www.w3.org/TR/IndexedDB/#idl-def-IDBVersionChangeEvent
+
+// FIXME: This enum is non-standard, see
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=22370
+enum IDBDataLossAmount {
+    "none",
+    "total"
+};
 [
     EventConstructor
 ] interface IDBVersionChangeEvent : Event {
@@ -31,6 +39,6 @@
 
     // FIXME: These are non-standard, see
     // https://www.w3.org/Bugs/Public/show_bug.cgi?id=22370
-    readonly attribute DOMString dataLoss;
+    [InitializedByEventConstructor] readonly attribute IDBDataLossAmount dataLoss;
     readonly attribute DOMString dataLossMessage;
 };
diff --git a/modules/indexeddb/WindowIndexedDatabase.idl b/modules/indexeddb/WindowIndexedDatabase.idl
index 5b80cb8..eb08dd1 100644
--- a/modules/indexeddb/WindowIndexedDatabase.idl
+++ b/modules/indexeddb/WindowIndexedDatabase.idl
@@ -27,16 +27,16 @@
 [
     ImplementedAs=DOMWindowIndexedDatabase,
 ] partial interface Window {
-    [ImplementedAs=indexedDB, MeasureAs=PrefixedIndexedDB] readonly attribute IDBFactory webkitIndexedDB;
+    [ImplementedAs=indexedDB, DeprecateAs=PrefixedIndexedDB] readonly attribute IDBFactory webkitIndexedDB;
 
     [MeasureAs=UnprefixedIndexedDB] readonly attribute IDBFactory indexedDB;
 
-    [MeasureAs=PrefixedIDBCursorConstructor] attribute IDBCursorConstructor webkitIDBCursor;
-    [MeasureAs=PrefixedIDBDatabaseConstructor] attribute IDBDatabaseConstructor webkitIDBDatabase;
-    [MeasureAs=PrefixedIDBFactoryConstructor] attribute IDBFactoryConstructor webkitIDBFactory;
-    [MeasureAs=PrefixedIDBIndexConstructor] attribute IDBIndexConstructor webkitIDBIndex;
-    [MeasureAs=PrefixedIDBKeyRangeConstructor] attribute IDBKeyRangeConstructor webkitIDBKeyRange;
-    [MeasureAs=PrefixedIDBObjectStoreConstructor] attribute IDBObjectStoreConstructor webkitIDBObjectStore;
-    [MeasureAs=PrefixedIDBRequestConstructor] attribute IDBRequestConstructor webkitIDBRequest;
-    [MeasureAs=PrefixedIDBTransactionConstructor] attribute IDBTransactionConstructor webkitIDBTransaction;
+    [DeprecateAs=PrefixedIDBCursorConstructor] attribute IDBCursorConstructor webkitIDBCursor;
+    [DeprecateAs=PrefixedIDBDatabaseConstructor] attribute IDBDatabaseConstructor webkitIDBDatabase;
+    [DeprecateAs=PrefixedIDBFactoryConstructor] attribute IDBFactoryConstructor webkitIDBFactory;
+    [DeprecateAs=PrefixedIDBIndexConstructor] attribute IDBIndexConstructor webkitIDBIndex;
+    [DeprecateAs=PrefixedIDBKeyRangeConstructor] attribute IDBKeyRangeConstructor webkitIDBKeyRange;
+    [DeprecateAs=PrefixedIDBObjectStoreConstructor] attribute IDBObjectStoreConstructor webkitIDBObjectStore;
+    [DeprecateAs=PrefixedIDBRequestConstructor] attribute IDBRequestConstructor webkitIDBRequest;
+    [DeprecateAs=PrefixedIDBTransactionConstructor] attribute IDBTransactionConstructor webkitIDBTransaction;
 };
diff --git a/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl b/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
index 8ca9e62..a9540b6 100644
--- a/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
+++ b/modules/indexeddb/WorkerGlobalScopeIndexedDatabase.idl
@@ -25,16 +25,16 @@
  */
 
 partial interface WorkerGlobalScope {
-    [ImplementedAs=indexedDB] readonly attribute IDBFactory webkitIndexedDB;
+    [ImplementedAs=indexedDB, DeprecateAs=PrefixedIndexedDB] readonly attribute IDBFactory webkitIndexedDB;
 
-    attribute IDBCursorConstructor webkitIDBCursor;
-    attribute IDBDatabaseConstructor webkitIDBDatabase;
-    attribute IDBFactoryConstructor webkitIDBFactory;
-    attribute IDBIndexConstructor webkitIDBIndex;
-    attribute IDBKeyRangeConstructor webkitIDBKeyRange;
-    attribute IDBObjectStoreConstructor webkitIDBObjectStore;
-    attribute IDBRequestConstructor webkitIDBRequest;
-    attribute IDBTransactionConstructor webkitIDBTransaction;
+    [DeprecateAs=PrefixedIDBCursorConstructor] attribute IDBCursorConstructor webkitIDBCursor;
+    [DeprecateAs=PrefixedIDBDatabaseConstructor] attribute IDBDatabaseConstructor webkitIDBDatabase;
+    [DeprecateAs=PrefixedIDBFactoryConstructor] attribute IDBFactoryConstructor webkitIDBFactory;
+    [DeprecateAs=PrefixedIDBIndexConstructor] attribute IDBIndexConstructor webkitIDBIndex;
+    [DeprecateAs=PrefixedIDBKeyRangeConstructor] attribute IDBKeyRangeConstructor webkitIDBKeyRange;
+    [DeprecateAs=PrefixedIDBObjectStoreConstructor] attribute IDBObjectStoreConstructor webkitIDBObjectStore;
+    [DeprecateAs=PrefixedIDBRequestConstructor] attribute IDBRequestConstructor webkitIDBRequest;
+    [DeprecateAs=PrefixedIDBTransactionConstructor] attribute IDBTransactionConstructor webkitIDBTransaction;
 
     readonly attribute IDBFactory indexedDB;
 
diff --git a/modules/mediasource/MediaSource.idl b/modules/mediasource/MediaSource.idl
index a03cde5..0a946ba 100644
--- a/modules/mediasource/MediaSource.idl
+++ b/modules/mediasource/MediaSource.idl
@@ -40,7 +40,7 @@
     Constructor,
     ConstructorCallWith=ExecutionContext,
     RuntimeEnabled=MediaSource,
-    TypeChecking=Interface|Nullable|Unrestricted,
+    TypeChecking=Interface|Unrestricted,
 ] interface MediaSource : EventTarget {
     // All the source buffers created by this object.
     readonly attribute SourceBufferList sourceBuffers;
diff --git a/modules/mediasource/SourceBuffer.idl b/modules/mediasource/SourceBuffer.idl
index 7827d60..a29f0fa 100644
--- a/modules/mediasource/SourceBuffer.idl
+++ b/modules/mediasource/SourceBuffer.idl
@@ -39,7 +39,7 @@
     ActiveDOMObject,
     NoInterfaceObject,
     RuntimeEnabled=MediaSource,
-    TypeChecking=Interface|Nullable|Unrestricted,
+    TypeChecking=Interface|Unrestricted,
 ] interface SourceBuffer : EventTarget {
 
     // Gets or sets the AppendMode.
@@ -68,8 +68,6 @@
 
     // Abort the current segment append sequence.
     [RaisesException] void abort();
-    // Pending W3C bug: "Change SourceBuffer.remove() end parameter to 'unrestricted double'",
-    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=25518
-    [RaisesException] void remove(double start, double end);
+    [RaisesException] void remove(double start, unrestricted double end);
 };
 
diff --git a/modules/mediasource/SourceBufferList.idl b/modules/mediasource/SourceBufferList.idl
index bbac1f0..638ca9e 100644
--- a/modules/mediasource/SourceBufferList.idl
+++ b/modules/mediasource/SourceBufferList.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject,
     RuntimeEnabled=MediaSource,
 ] interface SourceBufferList : EventTarget {
diff --git a/modules/mediasource/URLMediaSource.idl b/modules/mediasource/URLMediaSource.idl
index 0d336fd..92c7e37 100644
--- a/modules/mediasource/URLMediaSource.idl
+++ b/modules/mediasource/URLMediaSource.idl
@@ -31,7 +31,7 @@
 // https://dvcs.w3.org/hg/html-media/raw-file/tip/media-source/media-source.html#idl-def-URL
 
 [
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] partial interface URL {
-    [CallWith=ExecutionContext, TreatReturnedNullStringAs=Null] static DOMString createObjectURL(MediaSource source);
+    [CallWith=ExecutionContext] static DOMString? createObjectURL(MediaSource source);
 };
diff --git a/modules/mediasource/VideoPlaybackQuality.idl b/modules/mediasource/VideoPlaybackQuality.idl
index 104bcab..063888e 100644
--- a/modules/mediasource/VideoPlaybackQuality.idl
+++ b/modules/mediasource/VideoPlaybackQuality.idl
@@ -28,7 +28,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     RuntimeEnabled=MediaSourceExperimental,
 ] interface VideoPlaybackQuality {
     readonly attribute double creationTime;
diff --git a/modules/mediastream/MediaDeviceInfo.idl b/modules/mediastream/MediaDeviceInfo.idl
index 1698fc7..4d441f4 100644
--- a/modules/mediastream/MediaDeviceInfo.idl
+++ b/modules/mediastream/MediaDeviceInfo.idl
@@ -30,7 +30,7 @@
 };
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject
 ] interface MediaDeviceInfo {
     readonly attribute DOMString deviceId;
diff --git a/modules/mediastream/MediaStream.idl b/modules/mediastream/MediaStream.idl
index 60a9712..171b878 100644
--- a/modules/mediastream/MediaStream.idl
+++ b/modules/mediastream/MediaStream.idl
@@ -25,7 +25,7 @@
 // http://dev.w3.org/2011/webrtc/editor/getusermedia.html#idl-def-MediaStream
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     Constructor,
     Constructor(MediaStream stream),
     Constructor(MediaStreamTrack[] tracks),
@@ -39,6 +39,7 @@
 
     sequence<MediaStreamTrack> getAudioTracks();
     sequence<MediaStreamTrack> getVideoTracks();
+    sequence<MediaStreamTrack> getTracks();
 
     [RaisesException] void addTrack(MediaStreamTrack track);
     [RaisesException] void removeTrack(MediaStreamTrack track);
diff --git a/modules/mediastream/MediaStreamTrack.idl b/modules/mediastream/MediaStreamTrack.idl
index 7249c0c..b707a46 100644
--- a/modules/mediastream/MediaStreamTrack.idl
+++ b/modules/mediastream/MediaStreamTrack.idl
@@ -23,16 +23,17 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     ActiveDOMObject
 ] interface MediaStreamTrack : EventTarget {
     readonly attribute DOMString kind;
     readonly attribute DOMString id;
     readonly attribute DOMString label;
     attribute boolean enabled;
+    readonly attribute boolean muted;
     readonly attribute DOMString readyState;
 
-    [CallWith=ExecutionContext, RaisesException] static void getSources(MediaStreamTrackSourcesCallback callback);
+    [CallWith=ExecutionContext, RaisesException, MeasureAs=MediaStreamTrackGetSources] static void getSources(MediaStreamTrackSourcesCallback callback);
     [ImplementedAs=stopTrack, RaisesException] void stop();
     [CallWith=ExecutionContext] MediaStreamTrack clone();
 
diff --git a/modules/mediastream/NavigatorMediaStream.idl b/modules/mediastream/NavigatorMediaStream.idl
index 0783d99..cef019a 100644
--- a/modules/mediastream/NavigatorMediaStream.idl
+++ b/modules/mediastream/NavigatorMediaStream.idl
@@ -23,6 +23,4 @@
     [RaisesException] void webkitGetUserMedia(Dictionary options,
                                               NavigatorUserMediaSuccessCallback successCallback,
                                               NavigatorUserMediaErrorCallback errorCallback);
-
-    [RaisesException] void getMediaDevices(MediaDeviceInfoCallback resultCallback);
 };
diff --git a/modules/mediastream/NavigatorUserMediaError.idl b/modules/mediastream/NavigatorUserMediaError.idl
index e068867..f3b5fbb 100644
--- a/modules/mediastream/NavigatorUserMediaError.idl
+++ b/modules/mediastream/NavigatorUserMediaError.idl
@@ -23,7 +23,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject
 ] interface NavigatorUserMediaError {
     readonly attribute DOMString name;
diff --git a/modules/mediastream/RTCDTMFSender.idl b/modules/mediastream/RTCDTMFSender.idl
index 1acdc57..c6f6076 100644
--- a/modules/mediastream/RTCDTMFSender.idl
+++ b/modules/mediastream/RTCDTMFSender.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject,
     ActiveDOMObject
 ] interface RTCDTMFSender : EventTarget {
diff --git a/modules/mediastream/RTCDataChannel.idl b/modules/mediastream/RTCDataChannel.idl
index 7827c20..83f0472 100644
--- a/modules/mediastream/RTCDataChannel.idl
+++ b/modules/mediastream/RTCDataChannel.idl
@@ -25,7 +25,7 @@
 // http://dev.w3.org/2011/webrtc/editor/webrtc.html#idl-def-RTCDataChannel
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject,
 ] interface RTCDataChannel : EventTarget {
     readonly attribute DOMString label;
diff --git a/modules/mediastream/RTCIceCandidate.idl b/modules/mediastream/RTCIceCandidate.idl
index 74a1c60..b3e2801 100644
--- a/modules/mediastream/RTCIceCandidate.idl
+++ b/modules/mediastream/RTCIceCandidate.idl
@@ -29,7 +29,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     Constructor(Dictionary dictionary),
     RaisesException=Constructor
 ] interface RTCIceCandidate {
diff --git a/modules/mediastream/RTCPeerConnection.idl b/modules/mediastream/RTCPeerConnection.idl
index 4d2459f..6f24471 100644
--- a/modules/mediastream/RTCPeerConnection.idl
+++ b/modules/mediastream/RTCPeerConnection.idl
@@ -29,14 +29,14 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     ActiveDOMObject,
-    Constructor(Dictionary rtcIceServers, optional Dictionary mediaConstraints),
+    Constructor(Dictionary rtcConfiguration, optional Dictionary mediaConstraints),
     ConstructorCallWith=ExecutionContext,
     NoInterfaceObject,
     RaisesException=Constructor,
 ] interface RTCPeerConnection : EventTarget {
-    [RaisesException] void createOffer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary mediaConstraints);
+    [RaisesException] void createOffer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary rtcOfferOptions);
 
     [RaisesException] void createAnswer(RTCSessionDescriptionCallback successCallback, [Default=Undefined] optional RTCErrorCallback failureCallback, optional Dictionary mediaConstraints);
 
@@ -62,12 +62,12 @@
     sequence<MediaStream> getRemoteStreams();
     MediaStream getStreamById(DOMString streamId);
 
-    [TypeChecking=Interface|Nullable, RaisesException] void addStream(MediaStream? stream, optional Dictionary mediaConstraints);
-    [TypeChecking=Interface|Nullable, RaisesException] void removeStream(MediaStream? stream);
+    [TypeChecking=Interface, RaisesException] void addStream(MediaStream? stream, optional Dictionary mediaConstraints);
+    [TypeChecking=Interface, RaisesException] void removeStream(MediaStream? stream);
 
     void getStats(RTCStatsCallback successCallback, [Default=Undefined] optional MediaStreamTrack selector);
 
-    [RaisesException] RTCDataChannel createDataChannel([TreatNullAs=NullString, TreatUndefinedAs=NullString] DOMString label, optional Dictionary options);
+    [RaisesException] RTCDataChannel createDataChannel([TreatUndefinedAs=NullString] DOMString? label, optional Dictionary options);
 
     [RaisesException] RTCDTMFSender createDTMFSender(MediaStreamTrack track);
 
diff --git a/modules/mediastream/RTCSessionDescription.idl b/modules/mediastream/RTCSessionDescription.idl
index 6aaf55e..a083ff3 100644
--- a/modules/mediastream/RTCSessionDescription.idl
+++ b/modules/mediastream/RTCSessionDescription.idl
@@ -29,11 +29,11 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     Constructor(optional Dictionary descriptionInitDict),
     RaisesException=Constructor
 ] interface RTCSessionDescription {
-    [RaisesException=Setter, TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString type;
-    [TreatReturnedNullStringAs=Null, TreatNullAs=NullString] attribute DOMString sdp;
+    [RaisesException=Setter] attribute DOMString? type;
+    attribute DOMString? sdp;
 };
 
diff --git a/modules/mediastream/RTCStatsReport.idl b/modules/mediastream/RTCStatsReport.idl
index 2fdce08..5721d5d 100644
--- a/modules/mediastream/RTCStatsReport.idl
+++ b/modules/mediastream/RTCStatsReport.idl
@@ -23,7 +23,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject
 ] interface RTCStatsReport {
     readonly attribute Date timestamp;
diff --git a/modules/mediastream/RTCStatsResponse.idl b/modules/mediastream/RTCStatsResponse.idl
index 5e8a53b..69fd239 100644
--- a/modules/mediastream/RTCStatsResponse.idl
+++ b/modules/mediastream/RTCStatsResponse.idl
@@ -23,7 +23,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject
 ] interface RTCStatsResponse {
     sequence<RTCStatsReport> result();
diff --git a/modules/mediastream/SourceInfo.idl b/modules/mediastream/SourceInfo.idl
index 8913dd5..60f2419 100644
--- a/modules/mediastream/SourceInfo.idl
+++ b/modules/mediastream/SourceInfo.idl
@@ -24,7 +24,7 @@
  */
 
 [
-    WillBeGarbageCollected,
+    GarbageCollected,
     NoInterfaceObject
 ] interface SourceInfo {
     readonly attribute DOMString id;
diff --git a/modules/mediastream/URLMediaStream.idl b/modules/mediastream/URLMediaStream.idl
index 0e9b64b..334509f 100644
--- a/modules/mediastream/URLMediaStream.idl
+++ b/modules/mediastream/URLMediaStream.idl
@@ -31,5 +31,5 @@
 // http://www.w3.org/TR/mediacapture-streams/#idl-def-URL
 
 partial interface URL {
-    [CallWith=ExecutionContext, TreatReturnedNullStringAs=Null] static DOMString createObjectURL(MediaStream stream);
+    [CallWith=ExecutionContext] static DOMString? createObjectURL(MediaStream stream);
 };
diff --git a/modules/navigatorcontentutils/NavigatorContentUtils.idl b/modules/navigatorcontentutils/NavigatorContentUtils.idl
index 66c24de..b5a05db 100644
--- a/modules/navigatorcontentutils/NavigatorContentUtils.idl
+++ b/modules/navigatorcontentutils/NavigatorContentUtils.idl
@@ -22,5 +22,5 @@
 partial interface Navigator {
     [RuntimeEnabled=NavigatorContentUtils, RaisesException] void registerProtocolHandler(DOMString scheme, DOMString url, DOMString title);
     [RuntimeEnabled=CustomSchemeHandler, RaisesException] DOMString isProtocolHandlerRegistered(DOMString scheme, DOMString url);
-    [RuntimeEnabled=CustomSchemeHandler, RaisesException] void unregisterProtocolHandler(DOMString scheme, DOMString url);
+    [RuntimeEnabled=NavigatorContentUtils, RaisesException] void unregisterProtocolHandler(DOMString scheme, DOMString url);
 };
diff --git a/modules/netinfo/NetworkInformation.idl b/modules/netinfo/NetworkInformation.idl
index 7a12c36..8a4f848 100644
--- a/modules/netinfo/NetworkInformation.idl
+++ b/modules/netinfo/NetworkInformation.idl
@@ -8,12 +8,13 @@
     "ethernet",
     "wifi",
     "other",
-    "none"
+    "none",
+    "unknown"
 };
 
 [
     RuntimeEnabled=NetworkInformation,
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     WillBeGarbageCollected,
     ActiveDOMObject
 ] interface NetworkInformation : EventTarget {
diff --git a/modules/screen_orientation/ScreenOrientation.idl b/modules/screen_orientation/ScreenOrientation.idl
index c1bf532..057ad37 100644
--- a/modules/screen_orientation/ScreenOrientation.idl
+++ b/modules/screen_orientation/ScreenOrientation.idl
@@ -2,15 +2,9 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
-enum OrientationType {
-    "portrait-primary",
-    "portrait-secondary",
-    "landscape-primary",
-    "landscape-secondary"
-};
-
 enum OrientationLockType {
     "any",
+    "natural",
     "landscape",
     "portrait",
     "portrait-primary",
@@ -19,12 +13,22 @@
     "landscape-secondary"
 };
 
+enum OrientationType {
+    "portrait-primary",
+    "portrait-secondary",
+    "landscape-primary",
+    "landscape-secondary"
+};
+
 [
+    GarbageCollected,
     RuntimeEnabled=ScreenOrientation
-] partial interface Screen {
-    readonly attribute OrientationType orientation;
+] interface ScreenOrientation : EventTarget {
+    readonly attribute unsigned short angle;
+    readonly attribute DOMString type;
 
-    [CallWith=ScriptState] Promise lockOrientation(OrientationLockType orientation);
+    [CallWith=ScriptState] Promise lock(OrientationLockType orientation);
+    void unlock();
 
-    void unlockOrientation();
+    attribute EventHandler onchange;
 };
diff --git a/modules/screen_orientation/ScreenScreenOrientation.idl b/modules/screen_orientation/ScreenScreenOrientation.idl
new file mode 100644
index 0000000..2905343
--- /dev/null
+++ b/modules/screen_orientation/ScreenScreenOrientation.idl
@@ -0,0 +1,9 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    RuntimeEnabled=ScreenOrientation
+] partial interface Screen {
+    [CallWith=ScriptState] readonly attribute ScreenOrientation orientation;
+};
diff --git a/modules/serviceworkers/Cache.idl b/modules/serviceworkers/Cache.idl
new file mode 100644
index 0000000..5f44e41
--- /dev/null
+++ b/modules/serviceworkers/Cache.idl
@@ -0,0 +1,54 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// See https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache
+
+// FIXME: Blink doesn't support dictionary definitions. For now, we can use the
+// Dictionary interface. See http://crbug.com/321462
+
+// dictionary QueryParams {
+//   boolean ignoreSearch;
+//   boolean ignoreMethod;
+//   boolean ignoreVary;
+//   boolean prefixMatch;
+//   DOMString cacheName;
+// };
+
+[
+    WillBeGarbageCollected,
+    NoInterfaceObject,
+    Exposed=ServiceWorker,
+    RuntimeEnabled=ServiceWorker,
+] interface Cache {
+  // FIXME: Blink doesn't support union types, we use overrides instead. See http://crbug.com/240176
+
+  // [CallWith=ScriptState] Promise match((Request or ScalarValueString) request, optional Dictionary queryParams);
+  [CallWith=ScriptState] Promise match(Request request, optional Dictionary queryParams);
+  [CallWith=ScriptState] Promise match(ScalarValueString request, optional Dictionary queryParams);
+
+  // [CallWith=ScriptState] Promise matchAll((Request or ScalarValueString) request, optional Dictionary queryParams);
+  [CallWith=ScriptState] Promise matchAll(Request request, optional Dictionary queryParams);
+  [CallWith=ScriptState] Promise matchAll(ScalarValueString request, optional Dictionary queryParams);
+
+  // [CallWith=ScriptState] Promise add((Request or ScalarValueString) request);
+  [CallWith=ScriptState] Promise add(Request request);
+  [CallWith=ScriptState] Promise add(ScalarValueString request);
+
+  // FIXME: The lack of union type support together with the sequence mean we can't use overrides here, instead
+  // bind a generic type.
+  // [CallWith=ScriptState] Promise addAll(sequence<Request or ScalarValueString> requests);
+  [CallWith=ScriptState] Promise addAll(sequence<any> requests);
+
+  // [CallWith=ScriptState] Promise put((Request or ScalarValueString) request, Response response);
+  [CallWith=ScriptState] Promise put(Request request, Response response);
+  [CallWith=ScriptState] Promise put(ScalarValueString request, Response response);
+
+  // [CallWith=ScriptState] Promise delete((Request or ScalarValueString) request, optional Dictionary queryParams);
+  [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(Request request, optional Dictionary queryParams);
+  [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(ScalarValueString request, optional Dictionary queryParams);
+
+  // [CallWith=ScriptState] Promise keys(optional (Request or ScalarValueString) request, optional Dictionary queryParams);
+  [CallWith=ScriptState] Promise keys(optional Request request, optional Dictionary queryParams);
+  [CallWith=ScriptState] Promise keys(ScalarValueString request, optional Dictionary queryParams);
+};
diff --git a/modules/serviceworkers/CacheStorage.idl b/modules/serviceworkers/CacheStorage.idl
new file mode 100644
index 0000000..35b5393
--- /dev/null
+++ b/modules/serviceworkers/CacheStorage.idl
@@ -0,0 +1,19 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+[
+    WillBeGarbageCollected,
+    NoInterfaceObject,
+    Exposed=ServiceWorker,
+    RuntimeEnabled=ServiceWorker,
+] interface CacheStorage {
+  [CallWith=ScriptState] Promise get(ScalarValueString cacheName);
+  [CallWith=ScriptState] Promise has(ScalarValueString cacheName);
+  [CallWith=ScriptState, ImplementedAs=createFunction] Promise create(ScalarValueString cacheName);
+  [CallWith=ScriptState, ImplementedAs=deleteFunction] Promise delete(ScalarValueString cacheName);
+  [CallWith=ScriptState] Promise keys();
+  // FIXME: From https://github.com/slightlyoff/ServiceWorker/issues/372 and the updated
+  // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#cache-storage ,
+  // we have yet to implement match().
+};
diff --git a/modules/serviceworkers/Client.idl b/modules/serviceworkers/Client.idl
deleted file mode 100644
index e30fd2b..0000000
--- a/modules/serviceworkers/Client.idl
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#client-interface
-[
-    Exposed=ServiceWorker,
-    RuntimeEnabled=ServiceWorker
-] interface Client {
-    readonly attribute unsigned long id;
-
-    // FIXME: Currently we think targetOrigin's probably not necessary, but
-    // re-add it if the ongoing issue [1] concludes the other way.
-    // [1] https://github.com/slightlyoff/ServiceWorker/issues/190
-    [Custom, RaisesException, CallWith=ExecutionContext] void postMessage(SerializedScriptValue message, optional MessagePort[] messagePorts);
-};
diff --git a/modules/serviceworkers/FetchBodyStream.idl b/modules/serviceworkers/FetchBodyStream.idl
new file mode 100644
index 0000000..7c1c3fb
--- /dev/null
+++ b/modules/serviceworkers/FetchBodyStream.idl
@@ -0,0 +1,21 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://fetch.spec.whatwg.org/#fetchbodystream
+[
+    RuntimeEnabled=ServiceWorker,
+    Exposed=ServiceWorker,
+    NoInterfaceObject,
+    ActiveDOMObject,
+    WillBeGarbageCollected,
+] interface FetchBodyStream {
+    [CallWith=ScriptState] Promise asArrayBuffer();
+    [CallWith=ScriptState] Promise asBlob();
+    [CallWith=ScriptState] Promise asJSON();
+    [CallWith=ScriptState] Promise asText();
+
+    // Still to be implemented.
+    // [CallWith=ScriptState] Promise asFormData();
+};
+
diff --git a/modules/serviceworkers/FetchEvent.idl b/modules/serviceworkers/FetchEvent.idl
index acb860f..d425143 100644
--- a/modules/serviceworkers/FetchEvent.idl
+++ b/modules/serviceworkers/FetchEvent.idl
@@ -8,6 +8,7 @@
     Exposed=ServiceWorker
 ] interface FetchEvent : Event {
     readonly attribute Request request;
+    readonly attribute boolean isReload;
 
     [CallWith=ScriptState] void respondWith(any value);
 };
diff --git a/modules/serviceworkers/HeaderMap.idl b/modules/serviceworkers/HeaderMap.idl
deleted file mode 100644
index 38d198b..0000000
--- a/modules/serviceworkers/HeaderMap.idl
+++ /dev/null
@@ -1,28 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// http://fetch.spec.whatwg.org/#headers-class
-// FIXME: Fetch spec has renamed this to just 'Headers'
-// FIXME: This should be defined as MapClass(DOMString, DOMString)
-// once binding code supports it (http://crbug.com/347435).
-[
-    Constructor,
-    RuntimeEnabled=ServiceWorker,
-    Exposed=ServiceWorker
-] interface HeaderMap {
-    readonly attribute unsigned long size;
-
-    // FIXME: Define keys, values, entries.
-    // FIXME: Some of the method definitions (like set) don't strictly
-    // follow the MapClass's ones (http://heycam.github.io/webidl/#MapClass),
-    // as this is supposed to be a transient implementation until we have real
-    // MapClass.
-
-    void clear();
-    [ImplementedAs=remove] boolean delete(DOMString key);
-    DOMString get(DOMString key);
-    boolean has(DOMString key);
-    void set(DOMString key, DOMString value);
-    void forEach(HeaderMapForEachCallback callback, optional any thisArg);
-};
diff --git a/modules/serviceworkers/HeaderMapForEachCallback.idl b/modules/serviceworkers/HeaderMapForEachCallback.idl
deleted file mode 100644
index d6bbb8d..0000000
--- a/modules/serviceworkers/HeaderMapForEachCallback.idl
+++ /dev/null
@@ -1,8 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-callback interface HeaderMapForEachCallback {
-    [CallWith=ThisValue] boolean handleItem(DOMString value, DOMString key, HeaderMap map);
-    boolean handleItem(DOMString value, DOMString key, HeaderMap map);
-};
diff --git a/modules/serviceworkers/Headers.idl b/modules/serviceworkers/Headers.idl
new file mode 100644
index 0000000..efcbc3b
--- /dev/null
+++ b/modules/serviceworkers/Headers.idl
@@ -0,0 +1,28 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// http://fetch.spec.whatwg.org/#headers-class
+[
+    Constructor,
+    Constructor(Headers input),
+    Constructor(Dictionary input),
+    RuntimeEnabled=ServiceWorker,
+    Exposed=ServiceWorker,
+    RaisesException=Constructor,
+    WillBeGarbageCollected,
+] interface Headers {
+    [RaisesException] void append(ByteString name, ByteString value);
+    [ImplementedAs=remove, RaisesException] void delete(ByteString key);
+    [RaisesException] ByteString? get(ByteString key);
+    [RaisesException] sequence<ByteString> getAll(ByteString name);
+    [RaisesException] boolean has(ByteString key);
+    [RaisesException] void set(ByteString key, ByteString value);
+
+    // The following are not defined in the spec.
+    // FIXME: We should implement Headers.prototype[Symbol.iterator] instead of
+    // forEach and size.
+    // https://www.w3.org/Bugs/Public/show_bug.cgi?id=26102
+    readonly attribute unsigned long size;
+    void forEach(HeadersForEachCallback callback, optional any thisArg);
+};
diff --git a/modules/serviceworkers/HeadersForEachCallback.idl b/modules/serviceworkers/HeadersForEachCallback.idl
new file mode 100644
index 0000000..d61e83a
--- /dev/null
+++ b/modules/serviceworkers/HeadersForEachCallback.idl
@@ -0,0 +1,10 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// This IDL is not spec'd yet.
+// http://fetch.spec.whatwg.org/#headers-class
+callback interface HeadersForEachCallback {
+    [CallWith=ThisValue] boolean handleItem(DOMString value, DOMString key, Headers map);
+    boolean handleItem(DOMString value, DOMString key, Headers map);
+};
diff --git a/modules/serviceworkers/Request.idl b/modules/serviceworkers/Request.idl
index aea4e91..3d1b402 100644
--- a/modules/serviceworkers/Request.idl
+++ b/modules/serviceworkers/Request.idl
@@ -3,24 +3,28 @@
 // found in the LICENSE file.
 
 // http://fetch.spec.whatwg.org/#request-class
+
+enum RequestMode { "same-origin", "no-cors", "cors" };
+enum RequestCredentials { "omit", "same-origin", "include" };
+
 [
-    Constructor(optional Dictionary requestInitDict),
+    Constructor(ScalarValueString input, optional Dictionary requestInitDict),
+    Constructor(Request input, optional Dictionary requestInitDict),
+    ConstructorCallWith=ExecutionContext,
     RuntimeEnabled=ServiceWorker,
-    Exposed=ServiceWorker
+    Exposed=ServiceWorker,
+    RaisesException=Constructor,
+    WillBeGarbageCollected,
 ] interface Request {
-    attribute ScalarValueString url;
-    attribute ByteString method;
-    readonly attribute DOMString origin;
-    readonly attribute HeaderMap headers;
+    readonly attribute ByteString method;
+    readonly attribute ScalarValueString url;
+    readonly attribute Headers headers;
+
+    readonly attribute DOMString referrer;
+    readonly attribute RequestMode mode;
+    readonly attribute RequestCredentials credentials;
 
     // FIXME: Implement the following:
-    // attribute unsigned long timeout;
-    // readonly attribute Mode mode;
-    // attribute boolean synchronous;
-    // readonly attribute unsigned long redirectCount;
-    // attribute boolean forcePreflight;
-    // attribute boolean forceSameOrigin;
-    // attribute boolean omitCredentials;
-    // readonly attribute DOMString referrer;
-    // attribute any body;
+    // readonly attribute FetchBodyStream body;
+    // readonly attribute RequestContext context;
 };
diff --git a/modules/serviceworkers/Response.idl b/modules/serviceworkers/Response.idl
index fb8ecf3..28df198 100644
--- a/modules/serviceworkers/Response.idl
+++ b/modules/serviceworkers/Response.idl
@@ -3,18 +3,24 @@
 // found in the LICENSE file.
 
 // http://fetch.spec.whatwg.org/#response-class
-// FIXME: Split this idl/impl into AbstractResponse and Response.
-[
-    // FIXME: Add ctors for String, Stream, and ArrayBuffer/ArrayBufferView response bodies.
-    Constructor(Blob body, optional Dictionary responseInitDict),
-    RuntimeEnabled=ServiceWorker,
-    Exposed=ServiceWorker
-] interface Response {
-    attribute unsigned short status;
-    attribute ByteString statusText;
-    readonly attribute HeaderMap headers;
 
-    // FIXME: Implement the following:
-    // attribute DOMString url;
-    // Promise<Blob> toBlob();
+enum ResponseType { "basic", "cors", "default", "error", "opaque" };
+
+[
+    // FIXME: Add ctors for ArrayBuffer, ArrayBufferView, FormData,
+    // and URLSearchParams response bodies.
+    Constructor(ScalarValueString body, optional Dictionary responseInitDict),
+    Constructor(Blob? body, optional Dictionary responseInitDict),
+    RuntimeEnabled=ServiceWorker,
+    Exposed=ServiceWorker,
+    RaisesException=Constructor,
+    WillBeGarbageCollected,
+] interface Response {
+    // FIXME: Implement redirect().
+    readonly attribute ResponseType type;
+    readonly attribute ScalarValueString url;
+    readonly attribute unsigned short status;
+    readonly attribute ByteString statusText;
+    readonly attribute Headers headers;
+    [CallWith=ExecutionContext] readonly attribute FetchBodyStream body;    
 };
diff --git a/modules/serviceworkers/ServiceWorker.idl b/modules/serviceworkers/ServiceWorker.idl
index b9a2bdd..69171df 100644
--- a/modules/serviceworkers/ServiceWorker.idl
+++ b/modules/serviceworkers/ServiceWorker.idl
@@ -29,18 +29,27 @@
  */
 
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-interface
+
+enum ServiceWorkerState {
+    "installing",
+    "installed",
+    "activating",
+    "activated",
+    "redundant"
+};
+
 [
     ActiveDOMObject,
-    RuntimeEnabled=ServiceWorker
+    RuntimeEnabled=ServiceWorker,
+    WillBeGarbageCollected
 ] interface ServiceWorker : EventTarget {
 
     // FIXME: Should inherit this from Worker.
-    [Custom, RaisesException] void postMessage(SerializedScriptValue message, optional MessagePort[] messagePorts);
+    [Custom, RaisesException] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
 
-    readonly attribute ScalarValueString scope;
-    readonly attribute ScalarValueString url;
-    // FIXME: Should be ServiceWorkerState enum, not DOMString.
-    readonly attribute DOMString state;
+    readonly attribute ScalarValueString scriptURL;
+    readonly attribute ServiceWorkerState  state;
+
     attribute EventHandler onstatechange;
 };
 
diff --git a/modules/serviceworkers/ServiceWorkerClient.idl b/modules/serviceworkers/ServiceWorkerClient.idl
new file mode 100644
index 0000000..01a92cf
--- /dev/null
+++ b/modules/serviceworkers/ServiceWorkerClient.idl
@@ -0,0 +1,14 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-client-interface
+[
+    Exposed=ServiceWorker,
+    RuntimeEnabled=ServiceWorker,
+    WillBeGarbageCollected,
+] interface ServiceWorkerClient {
+    readonly attribute unsigned long id;
+
+    [Custom, RaisesException, CallWith=ExecutionContext] void postMessage(SerializedScriptValue message, optional sequence<Transferable> transfer);
+};
diff --git a/modules/serviceworkers/ServiceWorkerClients.idl b/modules/serviceworkers/ServiceWorkerClients.idl
index 1fc9ad0..a484d6e 100644
--- a/modules/serviceworkers/ServiceWorkerClients.idl
+++ b/modules/serviceworkers/ServiceWorkerClients.idl
@@ -5,7 +5,8 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-clients-interface
 [
     Exposed=ServiceWorker,
-    RuntimeEnabled=ServiceWorker
+    RuntimeEnabled=ServiceWorker,
+    WillBeGarbageCollected,
 ] interface ServiceWorkerClients {
     [CallWith=ScriptState] Promise getServiced();
 };
diff --git a/modules/serviceworkers/ServiceWorkerContainer.idl b/modules/serviceworkers/ServiceWorkerContainer.idl
index 9f8a3f6..df0017e 100644
--- a/modules/serviceworkers/ServiceWorkerContainer.idl
+++ b/modules/serviceworkers/ServiceWorkerContainer.idl
@@ -30,15 +30,16 @@
 
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-container-interface
 [
-    RuntimeEnabled=ServiceWorker
+    RuntimeEnabled=ServiceWorker,
+    WillBeGarbageCollected
 ] interface ServiceWorkerContainer {
-    [Unforgeable] readonly attribute ServiceWorker active;
-    [Unforgeable] readonly attribute ServiceWorker controller;
-    [Unforgeable] readonly attribute ServiceWorker installing;
-    [Unforgeable] readonly attribute ServiceWorker waiting;
+    [Unforgeable] readonly attribute ServiceWorker? installing;
+    [Unforgeable] readonly attribute ServiceWorker? waiting;
+    [Unforgeable] readonly attribute ServiceWorker? active;
+    [Unforgeable] readonly attribute ServiceWorker? controller;
 
     [CallWith=ScriptState] readonly attribute Promise ready;
 
     [CallWith=ScriptState, ImplementedAs=registerServiceWorker] Promise register(ScalarValueString url, optional Dictionary options);
-    [CallWith=ScriptState, ImplementedAs=unregisterServiceWorker] Promise unregister(ScalarValueString scope);
+    [CallWith=ScriptState, ImplementedAs=unregisterServiceWorker] Promise unregister(optional ScalarValueString scope = "/");
 };
diff --git a/modules/serviceworkers/ServiceWorkerGlobalScope.idl b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
index 07d2dbf..be99abc 100644
--- a/modules/serviceworkers/ServiceWorkerGlobalScope.idl
+++ b/modules/serviceworkers/ServiceWorkerGlobalScope.idl
@@ -31,15 +31,17 @@
 // https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-global-scope-interface
 [
     Exposed=ServiceWorker,
-    Global=Worker&ServiceWorker,
+    Global=(Worker,ServiceWorker),
     RuntimeEnabled=ServiceWorker,
 ] interface ServiceWorkerGlobalScope : WorkerGlobalScope {
 
   readonly attribute ServiceWorkerClients clients;
   [CallWith=ExecutionContext, Unforgeable] readonly attribute ScalarValueString scope;
+  // FIXME: Rename this once it's ready for testing.
+  [CallWith=ExecutionContext, Unforgeable, ImplementedAs=caches] readonly attribute CacheStorage nativeCaches;
 
-  [CallWith=ScriptState] Promise fetch(ScalarValueString request);
-  [CallWith=ScriptState] Promise fetch(Request request);
+  [CallWith=ScriptState] Promise fetch(DOMString request, optional Dictionary requestInitDict);
+  [CallWith=ScriptState] Promise fetch(Request request, optional Dictionary requestInitDict);
 
   attribute EventHandler onactivate;
   attribute EventHandler onfetch;
diff --git a/modules/serviceworkers/ServiceWorkerRegistration.idl b/modules/serviceworkers/ServiceWorkerRegistration.idl
new file mode 100644
index 0000000..869808d
--- /dev/null
+++ b/modules/serviceworkers/ServiceWorkerRegistration.idl
@@ -0,0 +1,19 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// https://slightlyoff.github.io/ServiceWorker/spec/service_worker/index.html#service-worker-registration-obj
+[
+    ActiveDOMObject,
+    RuntimeEnabled=ServiceWorker,
+    WillBeGarbageCollected,
+] interface ServiceWorkerRegistration : EventTarget {
+    [Unforgeable] readonly attribute ServiceWorker? installing;
+    [Unforgeable] readonly attribute ServiceWorker? waiting;
+    [Unforgeable] readonly attribute ServiceWorker? active;
+    readonly attribute ScalarValueString scope;
+
+    [CallWith=ScriptState] Promise unregister();
+
+    attribute EventHandler onupdatefound;
+};
diff --git a/modules/webaudio/AudioBufferSourceNode.idl b/modules/webaudio/AudioBufferSourceNode.idl
index 135f1ce..0f3c252 100644
--- a/modules/webaudio/AudioBufferSourceNode.idl
+++ b/modules/webaudio/AudioBufferSourceNode.idl
@@ -25,7 +25,7 @@
 // A cached (non-streamed), memory-resident audio source
 [
     Conditional=WEB_AUDIO,
-    TypeChecking=Interface|Nullable,
+    TypeChecking=Interface,
 ] interface AudioBufferSourceNode : AudioSourceNode {
     [RaisesException=Setter] attribute AudioBuffer buffer;
 
diff --git a/modules/webaudio/AudioParam.idl b/modules/webaudio/AudioParam.idl
index 95d90e2..e612201 100644
--- a/modules/webaudio/AudioParam.idl
+++ b/modules/webaudio/AudioParam.idl
@@ -31,15 +31,8 @@
     Conditional=WEB_AUDIO
 ] interface AudioParam {
     attribute float value;
-    readonly attribute float minValue;
-    readonly attribute float maxValue;
     readonly attribute float defaultValue;
 
-    readonly attribute DOMString name;
-
-    // FIXME: Could define units constants here (seconds, decibels, cents, etc.)...
-    readonly attribute unsigned short units;
-
     // Parameter automation.
     void setValueAtTime(float value, double time);
     void linearRampToValueAtTime(float value, double time);
diff --git a/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl b/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl
index 49fe6a2..3e6fcfb 100644
--- a/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl
+++ b/modules/webdatabase/WorkerGlobalScopeWebDatabase.idl
@@ -27,7 +27,7 @@
 [
     RuntimeEnabled=Database,
 ] partial interface WorkerGlobalScope {
-    [RaisesException, MeasureAs=OpenWebDatabaseInWorker] Database openDatabase(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
+    [RaisesException, DeprecateAs=OpenWebDatabaseInWorker] Database openDatabase(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
 
-    [RaisesException, MeasureAs=OpenWebDatabaseSyncInWorker] DatabaseSync openDatabaseSync(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
+    [RaisesException, DeprecateAs=OpenWebDatabaseSyncInWorker] DatabaseSync openDatabaseSync(DOMString name, DOMString version, DOMString displayName, unsigned long estimatedSize, optional DatabaseCallback creationCallback);
 };
diff --git a/modules/webmidi/MIDIPort.idl b/modules/webmidi/MIDIPort.idl
index 3ca858a..902c825 100644
--- a/modules/webmidi/MIDIPort.idl
+++ b/modules/webmidi/MIDIPort.idl
@@ -35,6 +35,7 @@
 
 [
     NoInterfaceObject,
+    GarbageCollected
 ] interface MIDIPort : EventTarget {
     readonly attribute DOMString id;
     readonly attribute DOMString manufacturer;
diff --git a/modules/webmidi/NavigatorWebMIDI.idl b/modules/webmidi/NavigatorWebMIDI.idl
index 6a275d5..d391e29 100644
--- a/modules/webmidi/NavigatorWebMIDI.idl
+++ b/modules/webmidi/NavigatorWebMIDI.idl
@@ -31,5 +31,6 @@
 [
     RuntimeEnabled=WebMIDI,
 ] partial interface Navigator {
-    [CallWith=ScriptState] Promise requestMIDIAccess(optional Dictionary options);
+    // FIXMEDART: Remove the DartSuppress once Dart support Blink Promises.
+    [CallWith=ScriptState, DartSuppress] Promise requestMIDIAccess(optional Dictionary options);
 };
diff --git a/modules/websockets/WebSocket.idl b/modules/websockets/WebSocket.idl
index eeb8cbd..c2a343c 100644
--- a/modules/websockets/WebSocket.idl
+++ b/modules/websockets/WebSocket.idl
@@ -38,15 +38,15 @@
 [
     ActiveDOMObject,
     // FIXME: should be optional union type http://crbug.com/240176
-    Constructor(DOMString url),
-    Constructor(DOMString url, DOMString protocol),
+    Constructor(DOMString url, optional DOMString protocol),
     Constructor(DOMString url, sequence<DOMString> protocols),
     ConstructorCallWith=ExecutionContext,
-    Exposed=Window&Worker,
+    Exposed=(Window,Worker),
     RaisesException=Constructor,
-    WillBeGarbageCollected,
+    GarbageCollected,
+    ImplementedAs=DOMWebSocket,
 ] interface WebSocket : EventTarget {
-    [MeasureAs=WebSocketURL] readonly attribute DOMString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
+    [DeprecateAs=WebSocketURL] readonly attribute DOMString URL; // Lowercased .url is the one in the spec, but leaving .URL for compatibility reasons.
     readonly attribute DOMString url;
 
     // ready state
