Merge "[CI20] Call _flush_cache directly for MIPS"
diff --git a/src/README.md b/src/README.md
index 23e1d93..29c40c8 100644
--- a/src/README.md
+++ b/src/README.md
@@ -156,15 +156,15 @@
     support the network needs of an HTTP User-Agent (like Chromium or Cobalt),
     an HTTP server, a DIAL server, and several abstractions for networking
     primitives. Also contains SPDY and QUIC implementations.
-  * `media/` - Chromium's Media library. Contains all the code that parses,
-    processes, and manages buffers of video and audio data. Media decoding is
-    passed off to decoding hardware, wherever possible.
   * `cobalt/` - The home of all Cobalt application code. This includes the Web
     Implementation, Layout Engine, Renderer, and some other Cobalt-specific
     features.
       * `cobalt/build/` - The core build generation system, `gyp_cobalt`, and
         configurations for supported platforms. (NOTE: This should eventually be
         mostly moved into `starboard/`.)
+      * `cobalt/media/` - Chromium's Media library. Contains all the code that
+        parses, processes, and manages buffers of video and audio data. It
+        send the buffers to the SbPlayer implementation for playback.
   * `starboard/` - Cobalt's porting layer. Please see Starboard's
     [`README.md`](starboard/README.md) for more detailed information about
     porting Starboard (and Cobalt) to a new platform.
diff --git a/src/base/base.gypi b/src/base/base.gypi
index e5c56ef..c784bee 100644
--- a/src/base/base.gypi
+++ b/src/base/base.gypi
@@ -76,6 +76,7 @@
           'debug/trace_event_impl.h',
           'file_path.cc',
           'file_path.h',
+          'file_path_configuration.h',
           'file_util.cc',
           'file_util.h',
           'file_util_proxy.cc',
diff --git a/src/base/bind_unittest.cc b/src/base/bind_unittest.cc
index 1d808a6..0d24dcb 100644
--- a/src/base/bind_unittest.cc
+++ b/src/base/bind_unittest.cc
@@ -66,7 +66,7 @@
 
 class Child : public Parent {
  public:
-  virtual void VirtualSet() OVERRIDE { value = kChildValue; }
+  virtual void VirtualSet() override { value = kChildValue; }
   void NonVirtualSet() { value = kChildValue; }
 };
 
@@ -78,7 +78,7 @@
 };
 
 class NoRefChild : public NoRefParent {
-  virtual void VirtualSet() OVERRIDE { value = kChildValue; }
+  virtual void VirtualSet() override { value = kChildValue; }
   void NonVirtualSet() { value = kChildValue; }
 };
 
diff --git a/src/base/circular_buffer_shell_unittest.cc b/src/base/circular_buffer_shell_unittest.cc
index 209ec74..0a4a3c5 100644
--- a/src/base/circular_buffer_shell_unittest.cc
+++ b/src/base/circular_buffer_shell_unittest.cc
@@ -194,7 +194,7 @@
   {
     size_t bytes_written = kUnsetSize;
     bool result = circular_buffer->Write(kTestData, 25, &bytes_written);
-    EXPECT_EQ(false, result);
+    EXPECT_FALSE(result);
     EXPECT_EQ(kUnsetSize, bytes_written);
     EXPECT_EQ(0, circular_buffer->GetLength());
   }
diff --git a/src/base/compiler_specific.h b/src/base/compiler_specific.h
index 7db0035..5ffb2ea 100644
--- a/src/base/compiler_specific.h
+++ b/src/base/compiler_specific.h
@@ -133,23 +133,6 @@
 #define ALIGNOF(type) __alignof__(type)
 #endif
 
-// Annotate a virtual method indicating it must be overriding a virtual
-// method in the parent class.
-// Use like:
-//   virtual void foo() OVERRIDE;
-
-/* Test for GCC > 4.4.x */
-#if __GNUC__ > 4 || (__GNUC__ == 4 && (__GNUC_MINOR__ > 4))
-#define GCC_SUPPORTS_OVERRIDE
-#endif
-
-#if defined(COMPILER_MSVC) || \
-    (defined(COMPILER_GCC) && defined(GCC_SUPPORTS_OVERRIDE))
-#define OVERRIDE override
-#else
-#define OVERRIDE
-#endif
-
 // Annotate a function indicating the caller must examine the return value.
 // Use like:
 //   int foo() WARN_UNUSED_RESULT;
diff --git a/src/base/debug/trace_event_unittest.cc b/src/base/debug/trace_event_unittest.cc
index 445118b..2adaeb6 100644
--- a/src/base/debug/trace_event_unittest.cc
+++ b/src/base/debug/trace_event_unittest.cc
@@ -77,10 +77,10 @@
                    base::Unretained(this)));
   }
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     old_thread_name_ = PlatformThread::GetName();
   }
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     if (TraceLog::GetInstance())
       EXPECT_FALSE(TraceLog::GetInstance()->IsEnabled());
     PlatformThread::SetName(old_thread_name_ ? old_thread_name_  : "");
diff --git a/src/base/file_path.cc b/src/base/file_path.cc
index f62acae..b5c7900 100644
--- a/src/base/file_path.cc
+++ b/src/base/file_path.cc
@@ -8,6 +8,7 @@
 #include <algorithm>
 
 #include "base/basictypes.h"
+#include "base/file_path_configuration.h"
 #include "base/logging.h"
 #include "base/pickle.h"
 
@@ -17,6 +18,7 @@
 #include "base/string_util.h"
 #include "base/sys_string_conversions.h"
 #include "base/utf_string_conversions.h"
+#include "starboard/configuration.h"
 
 #if defined(OS_MACOSX)
 #include "base/mac/scoped_cftyperef.h"
@@ -29,11 +31,16 @@
 #include <CoreFoundation/CoreFoundation.h>
 #endif
 
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
-const FilePath::CharType FilePath::kSeparators[] = FILE_PATH_LITERAL("\\/");
-#else  // FILE_PATH_USES_WIN_SEPARATORS
-const FilePath::CharType FilePath::kSeparators[] = FILE_PATH_LITERAL("/");
-#endif  // FILE_PATH_USES_WIN_SEPARATORS
+
+#if (SB_FILE_SEP_CHAR == SB_FILE_ALT_SEP_CHAR)
+const FilePath::CharType FilePath::kSeparators[] =
+    FILE_PATH_LITERAL(SB_FILE_SEP_STRING);
+#else
+// First char is the normal character. Second char is the alternate, which will be
+// replaced with the first character during path normalization.
+const FilePath::CharType FilePath::kSeparators[] =
+    FILE_PATH_LITERAL(SB_FILE_SEP_STRING SB_FILE_ALT_SEP_STRING);
+#endif
 
 const FilePath::CharType FilePath::kCurrentDirectory[] = FILE_PATH_LITERAL(".");
 const FilePath::CharType FilePath::kParentDirectory[] = FILE_PATH_LITERAL("..");
@@ -55,7 +62,7 @@
 // begins with a letter followed by a colon.  On other platforms, this always
 // returns npos.
 StringType::size_type FindDriveLetter(const StringType& path) {
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
   // This is dependent on an ASCII-based character set, but that's a
   // reasonable assumption.  iswalpha can be too inclusive here.
   if (path.length() >= 2 && path[1] == L':' &&
@@ -67,7 +74,7 @@
   return StringType::npos;
 }
 
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
 bool EqualDriveLetterCaseInsensitive(const StringType& a,
                                      const StringType& b) {
   size_t a_letter_pos = FindDriveLetter(a);
@@ -88,7 +95,7 @@
 #endif  // defined(FILE_PATH_USES_DRIVE_LETTERS)
 
 bool IsPathAbsolute(const StringType& path) {
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
   StringType::size_type letter = FindDriveLetter(path);
   if (letter != StringType::npos) {
     // Look for a separator right after the drive specification.
@@ -198,7 +205,7 @@
 }
 
 bool FilePath::operator==(const FilePath& that) const {
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
   return EqualDriveLetterCaseInsensitive(this->path_, that.path_);
 #else  // defined(FILE_PATH_USES_DRIVE_LETTERS)
   return path_ == that.path_;
@@ -206,7 +213,7 @@
 }
 
 bool FilePath::operator!=(const FilePath& that) const {
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
   return !EqualDriveLetterCaseInsensitive(this->path_, that.path_);
 #else  // defined(FILE_PATH_USES_DRIVE_LETTERS)
   return path_ != that.path_;
@@ -279,7 +286,7 @@
   std::vector<StringType>::const_iterator child_comp =
       child_components.begin();
 
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
   // Windows can access case sensitive filesystems, so component
   // comparisions must be case sensitive, but drive letters are
   // never case sensitive.
@@ -1240,7 +1247,7 @@
 }
 
 FilePath FilePath::NormalizePathSeparators() const {
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
   StringType copy = path_;
   for (size_t i = 1; i < arraysize(kSeparators); ++i) {
     std::replace(copy.begin(), copy.end(), kSeparators[i], kSeparators[0]);
diff --git a/src/base/file_path_configuration.h b/src/base/file_path_configuration.h
new file mode 100644
index 0000000..b753057
--- /dev/null
+++ b/src/base/file_path_configuration.h
@@ -0,0 +1,28 @@
+// Copyright 2017 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef BASE_FILE_PATH_CONFIGURATION_H_
+#define BASE_FILE_PATH_CONFIGURATION_H_
+
+#include "starboard/configuration.h"
+
+#if !defined(FILE_PATH_USES_WIN_SEPARATORS) && (SB_FILE_SEP_CHAR == '\\')
+#define FILE_PATH_USES_WIN_SEPARATORS 1
+#endif
+
+#if !defined(FILE_PATH_USES_DRIVE_LETTERS) && (SB_FILE_SEP_CHAR == '\\')
+#define FILE_PATH_USES_DRIVE_LETTERS 1
+#endif
+
+#endif  // BASE_FILE_PATH_CONFIGURATION_H_
diff --git a/src/base/file_path_unittest.cc b/src/base/file_path_unittest.cc
index 42f1dcb..7de8ee9 100644
--- a/src/base/file_path_unittest.cc
+++ b/src/base/file_path_unittest.cc
@@ -4,6 +4,7 @@
 
 #include "base/basictypes.h"
 #include "base/file_path.h"
+#include "base/file_path_configuration.h"
 #include "base/file_util.h"
 #include "base/utf_string_conversions.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -49,10 +50,10 @@
 // to be a PlatformTest
 class FilePathTest : public PlatformTest {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     PlatformTest::SetUp();
   }
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     PlatformTest::TearDown();
   }
 };
@@ -90,7 +91,7 @@
 #if defined(OS_WIN)
     { FPL("\x0143:"),       FPL(".") },
 #endif  // OS_WIN
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("c:"),            FPL("c:") },
     { FPL("C:"),            FPL("C:") },
     { FPL("A:"),            FPL("A:") },
@@ -106,7 +107,7 @@
     { FPL("c:/aa/bb"),      FPL("c:/aa") },
     { FPL("c:aa/bb"),       FPL("c:aa") },
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("\\aa\\bb"),      FPL("\\aa") },
     { FPL("\\aa\\bb\\"),    FPL("\\aa") },
     { FPL("\\aa\\bb\\\\"),  FPL("\\aa") },
@@ -126,7 +127,7 @@
     { FPL("\\\\aa\\bb"),    FPL("\\\\aa") },
     { FPL("\\\\aa\\"),      FPL("\\\\") },
     { FPL("\\\\aa"),        FPL("\\\\") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("c:\\"),          FPL("c:\\") },
     { FPL("c:\\\\"),        FPL("c:\\\\") },
     { FPL("c:\\\\\\"),      FPL("c:\\") },
@@ -178,7 +179,7 @@
 #if defined(OS_WIN)
     { FPL("\x0143:"),       FPL("\x0143:") },
 #endif  // OS_WIN
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("c:"),            FPL("") },
     { FPL("C:"),            FPL("") },
     { FPL("A:"),            FPL("") },
@@ -194,7 +195,7 @@
     { FPL("c:/aa/bb"),      FPL("bb") },
     { FPL("c:aa/bb"),       FPL("bb") },
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("\\aa\\bb"),      FPL("bb") },
     { FPL("\\aa\\bb\\"),    FPL("bb") },
     { FPL("\\aa\\bb\\\\"),  FPL("bb") },
@@ -213,7 +214,7 @@
     { FPL("\\\\aa\\bb"),    FPL("bb") },
     { FPL("\\\\aa\\"),      FPL("aa") },
     { FPL("\\\\aa"),        FPL("aa") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("c:\\"),          FPL("\\") },
     { FPL("c:\\\\"),        FPL("\\\\") },
     { FPL("c:\\\\\\"),      FPL("\\") },
@@ -243,14 +244,14 @@
     { { FPL("//aa"),       FPL("") },   FPL("//aa") },
     { { FPL("//aa/"),      FPL("") },   FPL("//aa") },
     { { FPL("//"),         FPL("aa") }, FPL("//aa") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:"),         FPL("a") },  FPL("c:a") },
     { { FPL("c:"),         FPL("") },   FPL("c:") },
     { { FPL("c:/"),        FPL("a") },  FPL("c:/a") },
     { { FPL("c://"),       FPL("a") },  FPL("c://a") },
     { { FPL("c:///"),      FPL("a") },  FPL("c:/a") },
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     // Append introduces the default separator character, so these test cases
     // need to be defined with different expected results on platforms that use
     // different default separator characters.
@@ -276,7 +277,7 @@
     { { FPL("a\\b\\"),     FPL("c") },  FPL("a\\b\\c") },
     { { FPL("\\\\aa"),     FPL("bb") }, FPL("\\\\aa\\bb") },
     { { FPL("\\\\aa\\"),   FPL("bb") }, FPL("\\\\aa\\bb") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:\\"),       FPL("a") },  FPL("c:\\a") },
     { { FPL("c:\\\\"),     FPL("a") },  FPL("c:\\\\a") },
     { { FPL("c:\\\\\\"),   FPL("a") },  FPL("c:\\a") },
@@ -293,7 +294,7 @@
     { { FPL("a/b/"),       FPL("c") },  FPL("a/b/c") },
     { { FPL("//aa"),       FPL("bb") }, FPL("//aa/bb") },
     { { FPL("//aa/"),      FPL("bb") }, FPL("//aa/bb") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:/"),        FPL("a") },  FPL("c:/a") },
     { { FPL("c:/"),        FPL("") },   FPL("c:/") },
     { { FPL("c:/a"),       FPL("b") },  FPL("c:/a/b") },
@@ -341,7 +342,7 @@
     { FPL("/a//"),          FPL("/a") },
     { FPL("/a///"),         FPL("/a") },
     { FPL("/a////"),        FPL("/a") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("c:"),            FPL("c:") },
     { FPL("c:/"),           FPL("c:/") },
     { FPL("c://"),          FPL("c://") },
@@ -353,7 +354,7 @@
     { FPL("c:/a///"),       FPL("c:/a") },
     { FPL("c:/a////"),      FPL("c:/a") },
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("\\"),            FPL("\\") },
     { FPL("\\\\"),          FPL("\\\\") },
     { FPL("\\\\\\"),        FPL("\\") },
@@ -367,7 +368,7 @@
     { FPL("\\a\\\\"),       FPL("\\a") },
     { FPL("\\a\\\\\\"),     FPL("\\a") },
     { FPL("\\a\\\\\\\\"),   FPL("\\a") },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("c:\\"),          FPL("c:\\") },
     { FPL("c:\\\\"),        FPL("c:\\\\") },
     { FPL("c:\\\\\\"),      FPL("c:\\") },
@@ -400,7 +401,7 @@
     { FPL("//a"),    true },
     { FPL("c:a/b"),  false },
     { FPL("?:/a"),   false },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("/"),      false },
     { FPL("/a"),     false },
     { FPL("/."),     false },
@@ -418,7 +419,7 @@
     { FPL("/.."),    true },
     { FPL("c:/"),    false },
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("a\\b"),   false },
     { FPL("\\\\"),   true },
     { FPL("\\\\a"),  true },
@@ -427,7 +428,7 @@
     { FPL("//a"),    true },
     { FPL("c:a\\b"), false },
     { FPL("?:\\a"),  false },
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("\\"),     false },
     { FPL("\\a"),    false },
     { FPL("\\."),    false },
@@ -471,12 +472,12 @@
     { FPL("/"),                       FPL("|/")},
     { FPL("foo"),                     FPL("|foo")},
     { FPL(""),                        FPL("")},
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { FPL("e:/foo"),                  FPL("|e:|/|foo")},
     { FPL("e:/"),                     FPL("|e:|/")},
     { FPL("e:"),                      FPL("|e:")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("../foo"),                  FPL("|..|foo")},
     { FPL("./foo"),                   FPL("|foo")},
     { FPL("../foo/bar/"),             FPL("|..|foo|bar") },
@@ -525,7 +526,7 @@
     { { FPL("foo/bar"),       FPL("foo2/bar/baz") },      false},
     { { FPL("foo/bar"),       FPL("foo/bar2/baz") },      false},
     { { FPL(""),              FPL("foo") },               false},
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:/foo/bar"),    FPL("c:/foo/bar/baz") },    true},
     { { FPL("E:/foo/bar"),    FPL("e:/foo/bar/baz") },    true},
     { { FPL("f:/foo/bar"),    FPL("F:/foo/bar/baz") },    true},
@@ -541,7 +542,7 @@
     { { FPL("F:/foo/bar"),    FPL("f:/foo2/bar/baz") },   false},
     { { FPL("c:/foo/bar"),    FPL("c:/foo/bar2/baz") },   false},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("\\foo\\bar"),    FPL("\\foo\\bar\\baz") },   true},
     { { FPL("\\foo/bar"),     FPL("\\foo\\bar\\baz") },   true},
     { { FPL("\\foo/bar"),     FPL("\\foo/bar/baz") },     true},
@@ -564,7 +565,7 @@
 
 TEST_F(FilePathTest, AppendRelativePathTest) {
   const struct BinaryTestData cases[] = {
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("/"),             FPL("/foo/bar/baz") },      FPL("foo\\bar\\baz")},
 #else  // FILE_PATH_USES_WIN_SEPARATORS
     { { FPL("/"),             FPL("/foo/bar/baz") },      FPL("foo/bar/baz")},
@@ -581,13 +582,13 @@
     { { FPL("foo/bar"),       FPL("foo2/bar/baz") },      FPL("")},
     { { FPL("foo/bar"),       FPL("foo/bar2/baz") },      FPL("")},
     { { FPL(""),              FPL("foo") },               FPL("")},
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:/foo/bar"),    FPL("c:/foo/bar/baz") },    FPL("baz")},
     { { FPL("E:/foo/bar"),    FPL("e:/foo/bar/baz") },    FPL("baz")},
     { { FPL("f:/foo/bar"),    FPL("F:/foo/bar/baz") },    FPL("baz")},
     { { FPL("E:/Foo/bar"),    FPL("e:/foo/bar/baz") },    FPL("")},
     { { FPL("f:/foo/bar"),    FPL("F:/foo/Bar/baz") },    FPL("")},
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("c:/"),           FPL("c:/foo/bar/baz") },    FPL("foo\\bar\\baz")},
     // TODO(akalin): Figure out how to handle the corner case in the
     // commented-out test case below.  Appending to an empty path gives
@@ -603,7 +604,7 @@
     { { FPL("F:/foo/bar"),    FPL("f:/foo2/bar/baz") },   FPL("")},
     { { FPL("c:/foo/bar"),    FPL("c:/foo/bar2/baz") },   FPL("")},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("\\foo\\bar"),    FPL("\\foo\\bar\\baz") },   FPL("baz")},
     { { FPL("\\foo/bar"),     FPL("\\foo\\bar\\baz") },   FPL("baz")},
     { { FPL("\\foo/bar"),     FPL("\\foo/bar/baz") },     FPL("baz")},
@@ -653,7 +654,7 @@
     { { FPL("foo/bar"),       FPL("foo/bar") },           true},
     { { FPL("foo/bar"),       FPL("foo/bar/baz") },       false},
     { { FPL(""),              FPL("foo") },               false},
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:/foo/bar"),    FPL("c:/foo/bar") },        true},
     { { FPL("E:/foo/bar"),    FPL("e:/foo/bar") },        true},
     { { FPL("f:/foo/bar"),    FPL("F:/foo/bar") },        true},
@@ -666,7 +667,7 @@
     { { FPL("C:/foo/bar"),    FPL("d:/foo/bar") },        false},
     { { FPL("c:/foo/bar"),    FPL("c:/foo2/bar") },       false},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("\\foo\\bar"),    FPL("\\foo\\bar") },        true},
     { { FPL("\\foo/bar"),     FPL("\\foo/bar") },         true},
     { { FPL("\\foo/bar"),     FPL("\\foo\\bar") },        false},
@@ -675,7 +676,7 @@
     { { FPL(""),              FPL("\\") },                false},
     { { FPL("\\foo\\bar"),    FPL("\\foo2\\bar") },       false},
     { { FPL("\\foo\\bar"),    FPL("\\foo\\bar2") },       false},
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:\\foo\\bar"),    FPL("c:\\foo\\bar") },    true},
     { { FPL("E:\\foo\\bar"),    FPL("e:\\foo\\bar") },    true},
     { { FPL("f:\\foo\\bar"),    FPL("F:\\foo/bar") },     false},
@@ -720,7 +721,7 @@
 
 TEST_F(FilePathTest, Extension2) {
   const struct UnaryTestData cases[] = {
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("C:\\a\\b\\c.ext"),        FPL(".ext") },
     { FPL("C:\\a\\b\\c."),           FPL(".") },
     { FPL("C:\\a\\b\\c"),            FPL("") },
@@ -788,7 +789,7 @@
     { { FPL("foo"),             FPL(".") },       FPL("foo.") },
     { { FPL("foo.baz.dll"),     FPL("") },        FPL("foo.baz.dll") },
     { { FPL("foo.baz.dll"),     FPL(".") },       FPL("foo.baz..dll") },
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("\\"),              FPL("") },        FPL("\\") },
     { { FPL("\\"),              FPL("txt") },     FPL("\\txt") },
     { { FPL("\\."),             FPL("txt") },     FPL("") },
@@ -850,7 +851,7 @@
     { FPL("foo.."),               FPL("foo.") },
     { FPL("foo.baz.dll"),         FPL("foo.baz") },
     { FPL("foo.tar.gz"),          FPL("foo") },
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { FPL("C:\\foo.bar\\foo"),    FPL("C:\\foo.bar\\foo") },
     { FPL("C:\\foo.bar\\..\\\\"), FPL("C:\\foo.bar\\..\\\\") },
 #endif
@@ -888,7 +889,7 @@
     { { FPL("foo"),           FPL(".") },     FPL("foo") },
     { { FPL("foo.baz.dll"),   FPL("") },      FPL("foo.baz") },
     { { FPL("foo.baz.dll"),   FPL(".") },     FPL("foo.baz") },
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("C:\\foo.bar\\foo"),    FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") },
     { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") },
 #endif
@@ -926,7 +927,7 @@
     { { FPL("foo"),           FPL(".") },     FPL("foo") },
     { { FPL("foo.baz.dll"),   FPL("") },      FPL("foo.baz.dll") },
     { { FPL("foo.baz.dll"),   FPL(".") },     FPL("foo.baz.dll") },
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("C:\\foo.bar\\foo"),    FPL("baz") }, FPL("C:\\foo.bar\\foo.baz") },
     { { FPL("C:\\foo.bar\\..\\\\"), FPL("baz") }, FPL("") },
 #endif
@@ -957,11 +958,11 @@
     { { FPL("foo.txt"),                 FPL(".tXt") },                true},
     { { FPL("foo.tXt"),                 FPL(".TXT") },                true},
     { { FPL("foo.tXt"),                 FPL(".tXt") },                true},
-#if defined(FILE_PATH_USES_DRIVE_LETTERS)
+#if (FILE_PATH_USES_DRIVE_LETTERS == 1)
     { { FPL("c:/foo.txt.dll"),          FPL(".txt") },                false},
     { { FPL("c:/foo.txt"),              FPL(".txt") },                true},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
     { { FPL("c:\\bar\\foo.txt.dll"),    FPL(".txt") },                false},
     { { FPL("c:\\bar\\foo.txt"),        FPL(".txt") },                true},
 #endif  // FILE_PATH_USES_DRIVE_LETTERS
@@ -1151,7 +1152,7 @@
   FilePath path(FPL("a"));
   path = path.Append(FPS("b\0b"));
   EXPECT_TRUE(path.value().length() == 3);
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
   EXPECT_EQ(path.value(), FPL("a\\b"));
 #else
   EXPECT_EQ(path.value(), FPL("a/b"));
@@ -1167,7 +1168,7 @@
   EXPECT_TRUE(path.ReferencesParent());
 }
 
-#if defined(FILE_PATH_USES_WIN_SEPARATORS)
+#if (FILE_PATH_USES_WIN_SEPARATORS == 1)
 TEST_F(FilePathTest, NormalizePathSeparators) {
   const struct UnaryTestData cases[] = {
     { FPL("foo/bar"), FPL("foo\\bar") },
diff --git a/src/base/file_util_proxy_unittest.cc b/src/base/file_util_proxy_unittest.cc
index dcd5ad8..3e97c6a 100644
--- a/src/base/file_util_proxy_unittest.cc
+++ b/src/base/file_util_proxy_unittest.cc
@@ -28,12 +28,12 @@
         bytes_written_(-1),
         weak_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {}
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     ASSERT_TRUE(dir_.CreateUniqueTempDir());
     ASSERT_TRUE(file_thread_.Start());
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     if (file_ != kInvalidPlatformFileValue)
       ClosePlatformFile(file_);
   }
@@ -125,9 +125,10 @@
 };
 
 TEST_F(FileUtilProxyTest, CreateOrOpen_Create) {
+  FilePath file_path = test_path();
   FileUtilProxy::CreateOrOpen(
       file_task_runner(),
-      test_path(),
+      file_path,
       PLATFORM_FILE_CREATE | PLATFORM_FILE_READ,
       Bind(&FileUtilProxyTest::DidCreateOrOpen, weak_factory_.GetWeakPtr()));
   MessageLoop::current()->Run();
diff --git a/src/base/file_util_starboard.cc b/src/base/file_util_starboard.cc
index 0856c69..d024542 100644
--- a/src/base/file_util_starboard.cc
+++ b/src/base/file_util_starboard.cc
@@ -326,6 +326,15 @@
 
 bool CreateDirectory(const FilePath &full_path) {
   base::ThreadRestrictions::AssertIOAllowed();
+
+  // Fast-path: can the full path be resolved from the full path?
+  if (DirectoryExists(full_path) ||
+      SbDirectoryCreate(full_path.value().c_str())) {
+    return true;
+  }
+
+  // Slow-path: iterate through the paths and resolve from the root
+  // to the leaf.
   std::vector<FilePath> subpaths;
 
   // Collect a list of all parent directories.
diff --git a/src/base/file_util_unittest.cc b/src/base/file_util_unittest.cc
index 847a1e0..6d0c25c 100644
--- a/src/base/file_util_unittest.cc
+++ b/src/base/file_util_unittest.cc
@@ -173,7 +173,7 @@
 // to be a PlatformTest
 class FileUtilTest : public PlatformTest {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     PlatformTest::SetUp();
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
   }
@@ -2157,7 +2157,7 @@
 // with a common SetUp() method.
 class VerifyPathControlledByUserTest : public FileUtilTest {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     FileUtilTest::SetUp();
 
     // Create a basic structure used by each test.
diff --git a/src/base/files/file_path_watcher.cc b/src/base/files/file_path_watcher.cc
index bc8db37..291a113 100644
--- a/src/base/files/file_path_watcher.cc
+++ b/src/base/files/file_path_watcher.cc
@@ -22,11 +22,11 @@
       : callback_(callback) {}
 
   // FilePathWatcher::Delegate implementation.
-  virtual void OnFilePathChanged(const FilePath& path) OVERRIDE {
+  virtual void OnFilePathChanged(const FilePath& path) override {
     callback_.Run(path, false);
   }
 
-  virtual void OnFilePathError(const FilePath& path) OVERRIDE {
+  virtual void OnFilePathError(const FilePath& path) override {
     callback_.Run(path, true);
   }
 
diff --git a/src/base/files/file_path_watcher_browsertest.cc b/src/base/files/file_path_watcher_browsertest.cc
index 9a7c6c4..badaef1 100644
--- a/src/base/files/file_path_watcher_browsertest.cc
+++ b/src/base/files/file_path_watcher_browsertest.cc
@@ -113,7 +113,7 @@
   }
   ~TestDelegate() {}
 
-  virtual void OnFileChanged(const FilePath& path, bool error) OVERRIDE {
+  virtual void OnFileChanged(const FilePath& path, bool error) override {
     if (error)
       ADD_FAILURE() << "Error " << path.value();
     else
@@ -159,7 +159,7 @@
   virtual ~FilePathWatcherTest() {}
 
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     // Create a separate file thread in order to test proper thread usage.
     base::Thread::Options options(MessageLoop::TYPE_IO, 0);
     ASSERT_TRUE(file_thread_.StartWithOptions(options));
@@ -167,7 +167,7 @@
     collector_ = new NotificationCollector();
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     loop_.RunUntilIdle();
   }
 
@@ -289,7 +289,7 @@
   }
   ~Deleter() {}
 
-  virtual void OnFileChanged(const FilePath&, bool) OVERRIDE {
+  virtual void OnFileChanged(const FilePath&, bool) override {
     watcher_.reset();
     loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure());
   }
diff --git a/src/base/files/file_path_watcher_kqueue.cc b/src/base/files/file_path_watcher_kqueue.cc
index aebe15a..a05ae69 100644
--- a/src/base/files/file_path_watcher_kqueue.cc
+++ b/src/base/files/file_path_watcher_kqueue.cc
@@ -57,17 +57,17 @@
   FilePathWatcherImpl() : kqueue_(-1) {}
 
   // MessageLoopForIO::Watcher overrides.
-  virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE;
-  virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE;
+  virtual void OnFileCanReadWithoutBlocking(int fd) override;
+  virtual void OnFileCanWriteWithoutBlocking(int fd) override;
 
   // MessageLoop::DestructionObserver overrides.
-  virtual void WillDestroyCurrentMessageLoop() OVERRIDE;
+  virtual void WillDestroyCurrentMessageLoop() override;
 
   // FilePathWatcher::PlatformDelegate overrides.
   virtual bool Watch(const FilePath& path,
                      bool recursive,
-                     FilePathWatcher::Delegate* delegate) OVERRIDE;
-  virtual void Cancel() OVERRIDE;
+                     FilePathWatcher::Delegate* delegate) override;
+  virtual void Cancel() override;
 
  protected:
   virtual ~FilePathWatcherImpl() {}
@@ -83,7 +83,7 @@
   typedef std::vector<struct kevent> EventVector;
 
   // Can only be called on |io_message_loop_|'s thread.
-  virtual void CancelOnMessageLoopThread() OVERRIDE;
+  virtual void CancelOnMessageLoopThread() override;
 
   // Returns true if the kevent values are error free.
   bool AreKeventValuesValid(struct kevent* kevents, int count);
diff --git a/src/base/files/file_path_watcher_stub.cc b/src/base/files/file_path_watcher_stub.cc
index 0c25d7f..2bafb90 100644
--- a/src/base/files/file_path_watcher_stub.cc
+++ b/src/base/files/file_path_watcher_stub.cc
@@ -16,13 +16,13 @@
  public:
   virtual bool Watch(const FilePath& path,
                      bool recursive,
-                     FilePathWatcher::Delegate* delegate) OVERRIDE {
+                     FilePathWatcher::Delegate* delegate) override {
     return false;
   }
 
-  virtual void Cancel() OVERRIDE {}
+  virtual void Cancel() override {}
 
-  virtual void CancelOnMessageLoopThread() OVERRIDE {}
+  virtual void CancelOnMessageLoopThread() override {}
 
  protected:
   virtual ~FilePathWatcherImpl() {}
diff --git a/src/base/hi_res_timer_manager.h b/src/base/hi_res_timer_manager.h
index 1bd5538..5303a7c 100644
--- a/src/base/hi_res_timer_manager.h
+++ b/src/base/hi_res_timer_manager.h
@@ -17,7 +17,7 @@
   virtual ~HighResolutionTimerManager();
 
   // base::SystemMonitor::PowerObserver:
-  virtual void OnPowerStateChange(bool on_battery_power) OVERRIDE;
+  virtual void OnPowerStateChange(bool on_battery_power) override;
 
   // Returns true if the hi resolution clock could be used right now.
   bool hi_res_clock_available() const { return hi_res_clock_available_; }
diff --git a/src/base/json/json_file_value_serializer.h b/src/base/json/json_file_value_serializer.h
index 633db5d..8202d2d 100644
--- a/src/base/json/json_file_value_serializer.h
+++ b/src/base/json/json_file_value_serializer.h
@@ -32,7 +32,7 @@
   // Attempt to serialize the data structure represented by Value into
   // JSON.  If the return value is true, the result will have been written
   // into the file whose name was passed into the constructor.
-  virtual bool Serialize(const Value& root) OVERRIDE;
+  virtual bool Serialize(const Value& root) override;
 
   // Equivalent to Serialize(root) except binary values are omitted from the
   // output.
@@ -46,7 +46,7 @@
   // error message including the location of the error if appropriate.
   // The caller takes ownership of the returned value.
   virtual Value* Deserialize(int* error_code,
-                             std::string* error_message) OVERRIDE;
+                             std::string* error_message) override;
 
   // This enum is designed to safely overlap with JSONReader::JsonParseError.
   enum JsonFileError {
diff --git a/src/base/json/json_parser.cc b/src/base/json/json_parser.cc
index 4c03a98..54433c1 100644
--- a/src/base/json/json_parser.cc
+++ b/src/base/json/json_parser.cc
@@ -37,7 +37,7 @@
     DictionaryValue::Swap(static_cast<DictionaryValue*>(root));
   }
 
-  virtual void Swap(DictionaryValue* other) OVERRIDE {
+  virtual void Swap(DictionaryValue* other) override {
     DVLOG(1) << "Swap()ing a DictionaryValue inefficiently.";
 
     // First deep copy to convert JSONStringValue to std::string and swap that
@@ -56,7 +56,7 @@
   // the method below.
 
   virtual bool RemoveWithoutPathExpansion(const std::string& key,
-                                          Value** out) OVERRIDE {
+                                          Value** out) override {
     // If the caller won't take ownership of the removed value, just call up.
     if (!out)
       return DictionaryValue::RemoveWithoutPathExpansion(key, out);
@@ -88,7 +88,7 @@
     ListValue::Swap(static_cast<ListValue*>(root));
   }
 
-  virtual void Swap(ListValue* other) OVERRIDE {
+  virtual void Swap(ListValue* other) override {
     DVLOG(1) << "Swap()ing a ListValue inefficiently.";
 
     // First deep copy to convert JSONStringValue to std::string and swap that
@@ -103,7 +103,7 @@
     ListValue::Swap(copy.get());
   }
 
-  virtual bool Remove(size_t index, Value** out) OVERRIDE {
+  virtual bool Remove(size_t index, Value** out) override {
     // If the caller won't take ownership of the removed value, just call up.
     if (!out)
       return ListValue::Remove(index, out);
@@ -139,18 +139,18 @@
   }
 
   // Overridden from base::Value:
-  virtual bool GetAsString(std::string* out_value) const OVERRIDE {
+  virtual bool GetAsString(std::string* out_value) const override {
     string_piece_.CopyToString(out_value);
     return true;
   }
-  virtual bool GetAsString(string16* out_value) const OVERRIDE {
+  virtual bool GetAsString(string16* out_value) const override {
     *out_value = UTF8ToUTF16(string_piece_);
     return true;
   }
-  virtual Value* DeepCopy() const OVERRIDE {
+  virtual Value* DeepCopy() const override {
     return new StringValue(string_piece_.as_string());
   }
-  virtual bool Equals(const Value* other) const OVERRIDE {
+  virtual bool Equals(const Value* other) const override {
     std::string other_string;
     return other->IsType(TYPE_STRING) && other->GetAsString(&other_string) &&
         StringPiece(other_string) == string_piece_;
diff --git a/src/base/json/json_string_value_serializer.h b/src/base/json/json_string_value_serializer.h
index e333dc6..0c3e8fd 100644
--- a/src/base/json/json_string_value_serializer.h
+++ b/src/base/json/json_string_value_serializer.h
@@ -38,7 +38,7 @@
   // Attempt to serialize the data structure represented by Value into
   // JSON.  If the return value is true, the result will have been written
   // into the string passed into the constructor.
-  virtual bool Serialize(const Value& root) OVERRIDE;
+  virtual bool Serialize(const Value& root) override;
 
   // Equivalent to Serialize(root) except binary values are omitted from the
   // output.
@@ -52,7 +52,7 @@
   // error message including the location of the error if appropriate.
   // The caller takes ownership of the returned value.
   virtual Value* Deserialize(int* error_code,
-                             std::string* error_message) OVERRIDE;
+                             std::string* error_message) override;
 
   void set_pretty_print(bool new_value) { pretty_print_ = new_value; }
   bool pretty_print() { return pretty_print_; }
diff --git a/src/base/json/json_value_converter.h b/src/base/json/json_value_converter.h
index 69da0d8..a4a8f18 100644
--- a/src/base/json/json_value_converter.h
+++ b/src/base/json/json_value_converter.h
@@ -123,7 +123,7 @@
   }
 
   virtual bool ConvertField(
-      const base::Value& value, StructType* dst) const OVERRIDE {
+      const base::Value& value, StructType* dst) const override {
     return value_converter_->Convert(value, &(dst->*field_pointer_));
   }
 
@@ -141,7 +141,7 @@
  public:
   BasicValueConverter() {}
 
-  virtual bool Convert(const base::Value& value, int* field) const OVERRIDE {
+  virtual bool Convert(const base::Value& value, int* field) const override {
     return value.GetAsInteger(field);
   }
 
@@ -155,7 +155,7 @@
   BasicValueConverter() {}
 
   virtual bool Convert(
-      const base::Value& value, std::string* field) const OVERRIDE {
+      const base::Value& value, std::string* field) const override {
     return value.GetAsString(field);
   }
 
@@ -169,7 +169,7 @@
   BasicValueConverter() {}
 
   virtual bool Convert(
-      const base::Value& value, string16* field) const OVERRIDE {
+      const base::Value& value, string16* field) const override {
     return value.GetAsString(field);
   }
 
@@ -182,7 +182,7 @@
  public:
   BasicValueConverter() {}
 
-  virtual bool Convert(const base::Value& value, double* field) const OVERRIDE {
+  virtual bool Convert(const base::Value& value, double* field) const override {
     return value.GetAsDouble(field);
   }
 
@@ -195,7 +195,7 @@
  public:
   BasicValueConverter() {}
 
-  virtual bool Convert(const base::Value& value, bool* field) const OVERRIDE {
+  virtual bool Convert(const base::Value& value, bool* field) const override {
     return value.GetAsBoolean(field);
   }
 
@@ -212,7 +212,7 @@
       : convert_func_(convert_func) {}
 
   virtual bool Convert(const base::Value& value,
-                       FieldType* field) const OVERRIDE {
+                       FieldType* field) const override {
     return convert_func_(&value, field);
   }
 
@@ -231,7 +231,7 @@
       : convert_func_(convert_func) {}
 
   virtual bool Convert(const base::Value& value,
-                       FieldType* field) const OVERRIDE {
+                       FieldType* field) const override {
     std::string string_value;
     return value.GetAsString(&string_value) &&
         convert_func_(string_value, field);
@@ -249,7 +249,7 @@
   NestedValueConverter() {}
 
   virtual bool Convert(
-      const base::Value& value, NestedType* field) const OVERRIDE {
+      const base::Value& value, NestedType* field) const override {
     return converter_.Convert(value, field);
   }
 
@@ -264,7 +264,7 @@
   RepeatedValueConverter() {}
 
   virtual bool Convert(
-      const base::Value& value, ScopedVector<Element>* field) const OVERRIDE {
+      const base::Value& value, ScopedVector<Element>* field) const override {
     const base::ListValue* list = NULL;
     if (!value.GetAsList(&list)) {
       // The field is not a list.
@@ -300,7 +300,7 @@
   RepeatedMessageConverter() {}
 
   virtual bool Convert(const base::Value& value,
-                       ScopedVector<NestedType>* field) const OVERRIDE {
+                       ScopedVector<NestedType>* field) const override {
     const base::ListValue* list = NULL;
     if (!value.GetAsList(&list))
       return false;
@@ -337,7 +337,7 @@
       : convert_func_(convert_func) {}
 
   virtual bool Convert(const base::Value& value,
-                       ScopedVector<NestedType>* field) const OVERRIDE {
+                       ScopedVector<NestedType>* field) const override {
     const base::ListValue* list = NULL;
     if (!value.GetAsList(&list))
       return false;
diff --git a/src/base/lazy_instance_unittest.cc b/src/base/lazy_instance_unittest.cc
index e25366e..bf293c7 100644
--- a/src/base/lazy_instance_unittest.cc
+++ b/src/base/lazy_instance_unittest.cc
@@ -46,7 +46,7 @@
   explicit SlowDelegate(base::LazyInstance<SlowConstructor>* lazy)
       : lazy_(lazy) {}
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     EXPECT_EQ(12, lazy_->Get().some_int());
     EXPECT_EQ(12, lazy_->Pointer()->some_int());
   }
diff --git a/src/base/memory/linked_ptr_unittest.cc b/src/base/memory/linked_ptr_unittest.cc
index 4550350..516b972 100644
--- a/src/base/memory/linked_ptr_unittest.cc
+++ b/src/base/memory/linked_ptr_unittest.cc
@@ -26,7 +26,7 @@
 struct B: public A {
   B() { history += base::StringPrintf("B%d ctor\n", mynum); }
   virtual ~B() { history += base::StringPrintf("B%d dtor\n", mynum); }
-  virtual void Use() OVERRIDE {
+  virtual void Use() override {
     history += base::StringPrintf("B%d use\n", mynum);
   }
 };
diff --git a/src/base/memory/ref_counted_memory.h b/src/base/memory/ref_counted_memory.h
index b99871b..b3b79a7 100644
--- a/src/base/memory/ref_counted_memory.h
+++ b/src/base/memory/ref_counted_memory.h
@@ -46,8 +46,8 @@
       : data_(length ? data : NULL), length_(length) {}
 
   // Overridden from RefCountedMemory:
-  virtual const unsigned char* front() const OVERRIDE;
-  virtual size_t size() const OVERRIDE;
+  virtual const unsigned char* front() const override;
+  virtual size_t size() const override;
 
  private:
   virtual ~RefCountedStaticMemory();
@@ -73,8 +73,8 @@
   static RefCountedBytes* TakeVector(std::vector<unsigned char>* to_destroy);
 
   // Overridden from RefCountedMemory:
-  virtual const unsigned char* front() const OVERRIDE;
-  virtual size_t size() const OVERRIDE;
+  virtual const unsigned char* front() const override;
+  virtual size_t size() const override;
 
   const std::vector<unsigned char>& data() const { return data_; }
   std::vector<unsigned char>& data() { return data_; }
@@ -99,8 +99,8 @@
   static RefCountedString* TakeString(std::string* to_destroy);
 
   // Overridden from RefCountedMemory:
-  virtual const unsigned char* front() const OVERRIDE;
-  virtual size_t size() const OVERRIDE;
+  virtual const unsigned char* front() const override;
+  virtual size_t size() const override;
 
   const std::string& data() const { return data_; }
   std::string& data() { return data_; }
diff --git a/src/base/memory/scoped_ptr_unittest.cc b/src/base/memory/scoped_ptr_unittest.cc
index 2a1b455..1860a4e 100644
--- a/src/base/memory/scoped_ptr_unittest.cc
+++ b/src/base/memory/scoped_ptr_unittest.cc
@@ -24,9 +24,9 @@
   explicit ConDecLogger(int* ptr) { SetPtr(ptr); }
   virtual ~ConDecLogger() { --*ptr_; }
 
-  virtual void SetPtr(int* ptr) OVERRIDE { ptr_ = ptr; ++*ptr_; }
+  virtual void SetPtr(int* ptr) override { ptr_ = ptr; ++*ptr_; }
 
-  virtual int SomeMeth(int x) const OVERRIDE { return x; }
+  virtual int SomeMeth(int x) const override { return x; }
 
  private:
   int* ptr_;
diff --git a/src/base/memory/scoped_vector_unittest.cc b/src/base/memory/scoped_vector_unittest.cc
index a91776a..0757a56 100644
--- a/src/base/memory/scoped_vector_unittest.cc
+++ b/src/base/memory/scoped_vector_unittest.cc
@@ -68,7 +68,7 @@
 
   // Assert INITIAL -> CONSTRUCTED and no LifeCycleObject associated with this
   // LifeCycleWatcher.
-  virtual void OnLifeCycleConstruct(LifeCycleObject* object) OVERRIDE {
+  virtual void OnLifeCycleConstruct(LifeCycleObject* object) override {
     ASSERT_EQ(LC_INITIAL, life_cycle_state_);
     ASSERT_EQ(NULL, constructed_life_cycle_object_.get());
     life_cycle_state_ = LC_CONSTRUCTED;
@@ -77,7 +77,7 @@
 
   // Assert CONSTRUCTED -> DESTROYED and the |object| being destroyed is the
   // same one we saw constructed.
-  virtual void OnLifeCycleDestroy(LifeCycleObject* object) OVERRIDE {
+  virtual void OnLifeCycleDestroy(LifeCycleObject* object) override {
     ASSERT_EQ(LC_CONSTRUCTED, life_cycle_state_);
     LifeCycleObject* constructed_life_cycle_object =
         constructed_life_cycle_object_.release();
diff --git a/src/base/memory/singleton_unittest.cc b/src/base/memory/singleton_unittest.cc
index d9892cb..78e9c19 100644
--- a/src/base/memory/singleton_unittest.cc
+++ b/src/base/memory/singleton_unittest.cc
@@ -155,7 +155,7 @@
  public:
   SingletonTest() {}
 
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     non_leak_called_ = false;
     leaky_called_ = false;
     static_called_ = false;
diff --git a/src/base/message_loop.h b/src/base/message_loop.h
index 912898b..782b5e2 100644
--- a/src/base/message_loop.h
+++ b/src/base/message_loop.h
@@ -499,9 +499,9 @@
   void HistogramEvent(int event);
 
   // base::MessagePump::Delegate methods:
-  virtual bool DoWork() OVERRIDE;
-  virtual bool DoDelayedWork(base::TimeTicks* next_delayed_work_time) OVERRIDE;
-  virtual bool DoIdleWork() OVERRIDE;
+  virtual bool DoWork() override;
+  virtual bool DoDelayedWork(base::TimeTicks* next_delayed_work_time) override;
+  virtual bool DoIdleWork() override;
 
   Type type_;
 
diff --git a/src/base/message_loop_proxy_impl.h b/src/base/message_loop_proxy_impl.h
index 4675a9e..48f663f 100644
--- a/src/base/message_loop_proxy_impl.h
+++ b/src/base/message_loop_proxy_impl.h
@@ -21,15 +21,15 @@
   // MessageLoopProxy implementation
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                const base::Closure& task,
-                               base::TimeDelta delay) OVERRIDE;
+                               base::TimeDelta delay) override;
   virtual bool PostNonNestableDelayedTask(
       const tracked_objects::Location& from_here,
       const base::Closure& task,
-      base::TimeDelta delay) OVERRIDE;
-  virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
+      base::TimeDelta delay) override;
+  virtual bool RunsTasksOnCurrentThread() const override;
 #if defined(COBALT)
   virtual bool PostBlockingTask(const tracked_objects::Location& from_here,
-                                const Closure& task) OVERRIDE;
+                                const Closure& task) override;
 #endif
 
  protected:
@@ -37,7 +37,7 @@
 
   // Override OnDestruct so that we can delete the object on the target message
   // loop if it still exists.
-  virtual void OnDestruct() const OVERRIDE;
+  virtual void OnDestruct() const override;
 
  private:
   // Allow the MessageLoop to create a MessageLoopProxyImpl.
diff --git a/src/base/message_loop_proxy_impl_unittest.cc b/src/base/message_loop_proxy_impl_unittest.cc
index e97d8f1..a66aed8 100644
--- a/src/base/message_loop_proxy_impl_unittest.cc
+++ b/src/base/message_loop_proxy_impl_unittest.cc
@@ -37,14 +37,14 @@
   }
 
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     io_thread_.reset(new base::Thread("MessageLoopProxyImplTest_IO"));
     file_thread_.reset(new base::Thread("MessageLoopProxyImplTest_File"));
     io_thread_->Start();
     file_thread_->Start();
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     io_thread_->Stop();
     file_thread_->Stop();
   }
diff --git a/src/base/message_loop_proxy_unittest.cc b/src/base/message_loop_proxy_unittest.cc
index 4776502..5ec9c74 100644
--- a/src/base/message_loop_proxy_unittest.cc
+++ b/src/base/message_loop_proxy_unittest.cc
@@ -31,7 +31,7 @@
   }
 
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     // Use SetUp() instead of the constructor to avoid posting a task to a
     // partialy constructed object.
     task_thread_.Start();
@@ -42,7 +42,7 @@
         Bind(&MessageLoopProxyTest::BlockTaskThreadHelper, Unretained(this)));
   }
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     // Make sure the |task_thread_| is not blocked, and stop the thread
     // fully before destuction because its tasks may still depend on the
     // |thread_sync_| event.
diff --git a/src/base/message_loop_unittest.cc b/src/base/message_loop_unittest.cc
index 2f49451..ceedbdc 100644
--- a/src/base/message_loop_unittest.cc
+++ b/src/base/message_loop_unittest.cc
@@ -1460,7 +1460,7 @@
  public:
   DispatcherImpl() : dispatch_count_(0) {}
 
-  virtual bool Dispatch(const base::NativeEvent& msg) OVERRIDE {
+  virtual bool Dispatch(const base::NativeEvent& msg) override {
     ::TranslateMessage(&msg);
     ::DispatchMessage(&msg);
     // Do not count WM_TIMER since it is not what we post and it will cause
@@ -1932,14 +1932,14 @@
 
   virtual ~DummyTaskObserver() {}
 
-  virtual void WillProcessTask(TimeTicks time_posted) OVERRIDE {
+  virtual void WillProcessTask(TimeTicks time_posted) override {
     num_tasks_started_++;
     EXPECT_TRUE(time_posted != TimeTicks());
     EXPECT_LE(num_tasks_started_, num_tasks_);
     EXPECT_EQ(num_tasks_started_, num_tasks_processed_ + 1);
   }
 
-  virtual void DidProcessTask(TimeTicks time_posted) OVERRIDE {
+  virtual void DidProcessTask(TimeTicks time_posted) override {
     num_tasks_processed_++;
     EXPECT_TRUE(time_posted != TimeTicks());
     EXPECT_LE(num_tasks_started_, num_tasks_);
@@ -2030,10 +2030,10 @@
 
 class QuitDelegate : public MessageLoopForIO::Watcher {
  public:
-  virtual void OnFileCanWriteWithoutBlocking(int fd) OVERRIDE {
+  virtual void OnFileCanWriteWithoutBlocking(int fd) override {
     MessageLoop::current()->Quit();
   }
-  virtual void OnFileCanReadWithoutBlocking(int fd) OVERRIDE {
+  virtual void OnFileCanReadWithoutBlocking(int fd) override {
     MessageLoop::current()->Quit();
   }
 };
@@ -2135,7 +2135,7 @@
         destruction_observer_called_(destruction_observer_called),
         task_destroyed_before_message_loop_(false) {
   }
-  virtual void WillDestroyCurrentMessageLoop() OVERRIDE {
+  virtual void WillDestroyCurrentMessageLoop() override {
     task_destroyed_before_message_loop_ = *task_destroyed_;
     *destruction_observer_called_ = true;
   }
diff --git a/src/base/message_pump_default.h b/src/base/message_pump_default.h
index 6deec99..51d8f23 100644
--- a/src/base/message_pump_default.h
+++ b/src/base/message_pump_default.h
@@ -16,10 +16,10 @@
   MessagePumpDefault();
 
   // MessagePump methods:
-  virtual void Run(Delegate* delegate) OVERRIDE;
-  virtual void Quit() OVERRIDE;
-  virtual void ScheduleWork() OVERRIDE;
-  virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) OVERRIDE;
+  virtual void Run(Delegate* delegate) override;
+  virtual void Quit() override;
+  virtual void ScheduleWork() override;
+  virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override;
 
  protected:
   virtual ~MessagePumpDefault() {}
diff --git a/src/base/message_pump_io_starboard.h b/src/base/message_pump_io_starboard.h
index c840181..53b8662 100644
--- a/src/base/message_pump_io_starboard.h
+++ b/src/base/message_pump_io_starboard.h
@@ -132,10 +132,10 @@
   void RemoveIOObserver(IOObserver* obs);
 
   // MessagePump methods:
-  virtual void Run(Delegate* delegate) OVERRIDE;
-  virtual void Quit() OVERRIDE;
-  virtual void ScheduleWork() OVERRIDE;
-  virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) OVERRIDE;
+  virtual void Run(Delegate* delegate) override;
+  virtual void Quit() override;
+  virtual void ScheduleWork() override;
+  virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override;
 
  protected:
   virtual ~MessagePumpIOStarboard();
diff --git a/src/base/message_pump_ui_starboard.h b/src/base/message_pump_ui_starboard.h
index 08f6be4..add1e6a 100644
--- a/src/base/message_pump_ui_starboard.h
+++ b/src/base/message_pump_ui_starboard.h
@@ -50,10 +50,10 @@
 
   // --- MessagePump Implementation ---
 
-  virtual void Run(Delegate* delegate) OVERRIDE;
-  virtual void Quit() OVERRIDE;
-  virtual void ScheduleWork() OVERRIDE;
-  virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) OVERRIDE;
+  virtual void Run(Delegate* delegate) override;
+  virtual void Quit() override;
+  virtual void ScheduleWork() override;
+  virtual void ScheduleDelayedWork(const TimeTicks& delayed_work_time) override;
   virtual void Start(Delegate* delegate);
 
  protected:
diff --git a/src/base/metrics/field_trial_unittest.cc b/src/base/metrics/field_trial_unittest.cc
index eed5f78..ea4bc99 100644
--- a/src/base/metrics/field_trial_unittest.cc
+++ b/src/base/metrics/field_trial_unittest.cc
@@ -28,7 +28,7 @@
   }
 
   virtual void OnFieldTrialGroupFinalized(const std::string& trial,
-                                          const std::string& group) OVERRIDE {
+                                          const std::string& group) override {
     trial_name_ = trial;
     group_name_ = group;
   }
diff --git a/src/base/metrics/histogram.h b/src/base/metrics/histogram.h
index 9fbe631..8506701 100644
--- a/src/base/metrics/histogram.h
+++ b/src/base/metrics/histogram.h
@@ -500,14 +500,14 @@
                                            size_t* bucket_count);
 
   // HistogramBase implementation:
-  virtual HistogramType GetHistogramType() const OVERRIDE;
+  virtual HistogramType GetHistogramType() const override;
   virtual bool HasConstructionArguments(Sample minimum,
                                         Sample maximum,
-                                        size_t bucket_count) const OVERRIDE;
-  virtual void Add(Sample value) OVERRIDE;
-  virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE;
-  virtual void WriteHTMLGraph(std::string* output) const OVERRIDE;
-  virtual void WriteAscii(std::string* output) const OVERRIDE;
+                                        size_t bucket_count) const override;
+  virtual void Add(Sample value) override;
+  virtual scoped_ptr<HistogramSamples> SnapshotSamples() const override;
+  virtual void WriteHTMLGraph(std::string* output) const override;
+  virtual void WriteAscii(std::string* output) const override;
 
  protected:
   // |bucket_count| and |ranges| should contain the underflow and overflow
@@ -582,10 +582,10 @@
                              std::string* output) const;
 
   // WriteJSON calls these.
-  virtual void GetParameters(DictionaryValue* params) const OVERRIDE;
+  virtual void GetParameters(DictionaryValue* params) const override;
 
   virtual void GetCountAndBucketData(Count* count,
-                                     ListValue* buckets) const OVERRIDE;
+                                     ListValue* buckets) const override;
 
   // Does not own this object. Should get from StatisticsRecorder.
   const BucketRanges* bucket_ranges_;
@@ -641,7 +641,7 @@
                                      BucketRanges* ranges);
 
   // Overridden from Histogram:
-  virtual HistogramType GetHistogramType() const OVERRIDE;
+  virtual HistogramType GetHistogramType() const override;
 
  protected:
   LinearHistogram(const std::string& name,
@@ -650,15 +650,15 @@
                   size_t bucket_count,
                   const BucketRanges* ranges);
 
-  virtual double GetBucketSize(Count current, size_t i) const OVERRIDE;
+  virtual double GetBucketSize(Count current, size_t i) const override;
 
   // If we have a description for a bucket, then return that.  Otherwise
   // let parent class provide a (numeric) description.
-  virtual const std::string GetAsciiBucketRange(size_t i) const OVERRIDE;
+  virtual const std::string GetAsciiBucketRange(size_t i) const override;
 
   // Skip printing of name for numeric range if we have a name (and if this is
   // an empty bucket).
-  virtual bool PrintEmptyBucket(size_t index) const OVERRIDE;
+  virtual bool PrintEmptyBucket(size_t index) const override;
 
  private:
   // For some ranges, we store a printable description of a bucket range.
@@ -677,9 +677,9 @@
  public:
   static Histogram* FactoryGet(const std::string& name, int32 flags);
 
-  virtual HistogramType GetHistogramType() const OVERRIDE;
+  virtual HistogramType GetHistogramType() const override;
 
-  virtual void AddBoolean(bool value) OVERRIDE;
+  virtual void AddBoolean(bool value) override;
 
  private:
   BooleanHistogram(const std::string& name, const BucketRanges* ranges);
@@ -701,7 +701,7 @@
                                int32 flags);
 
   // Overridden from Histogram:
-  virtual HistogramType GetHistogramType() const OVERRIDE;
+  virtual HistogramType GetHistogramType() const override;
 
   // Helper method for transforming an array of valid enumeration values
   // to the std::vector<int> expected by HISTOGRAM_CUSTOM_ENUMERATION.
@@ -720,9 +720,9 @@
   CustomHistogram(const std::string& name,
                   const BucketRanges* ranges);
 
-  virtual bool SerializeRanges(Pickle* pickle) const OVERRIDE;
+  virtual bool SerializeRanges(Pickle* pickle) const override;
 
-  virtual double GetBucketSize(Count current, size_t i) const OVERRIDE;
+  virtual double GetBucketSize(Count current, size_t i) const override;
 
  private:
   static bool ValidateCustomRanges(const std::vector<Sample>& custom_ranges);
diff --git a/src/base/metrics/histogram_samples.cc b/src/base/metrics/histogram_samples.cc
index e375952..9951a0e 100644
--- a/src/base/metrics/histogram_samples.cc
+++ b/src/base/metrics/histogram_samples.cc
@@ -15,11 +15,11 @@
  public:
   SampleCountPickleIterator(PickleIterator* iter);
 
-  virtual bool Done() const OVERRIDE;
-  virtual void Next() OVERRIDE;
+  virtual bool Done() const override;
+  virtual void Next() override;
   virtual void Get(HistogramBase::Sample* min,
                    HistogramBase::Sample* max,
-                   HistogramBase::Count* count) const OVERRIDE;
+                   HistogramBase::Count* count) const override;
  private:
   PickleIterator* const iter_;
 
diff --git a/src/base/metrics/sample_map.h b/src/base/metrics/sample_map.h
index 65a31f1..a8e3828 100644
--- a/src/base/metrics/sample_map.h
+++ b/src/base/metrics/sample_map.h
@@ -24,18 +24,18 @@
 
   // HistogramSamples implementation:
   virtual void Accumulate(HistogramBase::Sample value,
-                          HistogramBase::Count count) OVERRIDE;
+                          HistogramBase::Count count) override;
   virtual HistogramBase::Count GetCount(
-      HistogramBase::Sample value) const OVERRIDE;
-  virtual HistogramBase::Count TotalCount() const OVERRIDE;
-  virtual scoped_ptr<SampleCountIterator> Iterator() const OVERRIDE;
+      HistogramBase::Sample value) const override;
+  virtual HistogramBase::Count TotalCount() const override;
+  virtual scoped_ptr<SampleCountIterator> Iterator() const override;
 
   void ResetRedundantCount(HistogramBase::Count count);
 
  protected:
   virtual bool AddSubtractImpl(
       SampleCountIterator* iter,
-      HistogramSamples::Operator op) OVERRIDE;  // |op| is ADD or SUBTRACT.
+      HistogramSamples::Operator op) override;  // |op| is ADD or SUBTRACT.
 
  private:
   std::map<HistogramBase::Sample, HistogramBase::Count> sample_counts_;
@@ -52,11 +52,11 @@
   virtual ~SampleMapIterator();
 
   // SampleCountIterator implementation:
-  virtual bool Done() const OVERRIDE;
-  virtual void Next() OVERRIDE;
+  virtual bool Done() const override;
+  virtual void Next() override;
   virtual void Get(HistogramBase::Sample* min,
                    HistogramBase::Sample* max,
-                   HistogramBase::Count* count) const OVERRIDE;
+                   HistogramBase::Count* count) const override;
  private:
   SampleToCountMap::const_iterator iter_;
   const SampleToCountMap::const_iterator end_;
diff --git a/src/base/metrics/sample_vector.h b/src/base/metrics/sample_vector.h
index 67c344a..0a23bfe 100644
--- a/src/base/metrics/sample_vector.h
+++ b/src/base/metrics/sample_vector.h
@@ -27,11 +27,11 @@
 
   // HistogramSamples implementation:
   virtual void Accumulate(HistogramBase::Sample value,
-                          HistogramBase::Count count) OVERRIDE;
+                          HistogramBase::Count count) override;
   virtual HistogramBase::Count GetCount(
-      HistogramBase::Sample value) const OVERRIDE;
-  virtual HistogramBase::Count TotalCount() const OVERRIDE;
-  virtual scoped_ptr<SampleCountIterator> Iterator() const OVERRIDE;
+      HistogramBase::Sample value) const override;
+  virtual HistogramBase::Count TotalCount() const override;
+  virtual scoped_ptr<SampleCountIterator> Iterator() const override;
 
   // Get count of a specific bucket.
   HistogramBase::Count GetCountAtIndex(size_t bucket_index) const;
@@ -39,7 +39,7 @@
  protected:
   virtual bool AddSubtractImpl(
       SampleCountIterator* iter,
-      HistogramSamples::Operator op) OVERRIDE;  // |op| is ADD or SUBTRACT.
+      HistogramSamples::Operator op) override;  // |op| is ADD or SUBTRACT.
 
   virtual size_t GetBucketIndex(HistogramBase::Sample value) const;
 
@@ -61,14 +61,14 @@
   virtual ~SampleVectorIterator();
 
   // SampleCountIterator implementation:
-  virtual bool Done() const OVERRIDE;
-  virtual void Next() OVERRIDE;
+  virtual bool Done() const override;
+  virtual void Next() override;
   virtual void Get(HistogramBase::Sample* min,
                    HistogramBase::Sample* max,
-                   HistogramBase::Count* count) const OVERRIDE;
+                   HistogramBase::Count* count) const override;
 
   // SampleVector uses predefined buckets, so iterator can return bucket index.
-  virtual bool GetBucketIndex(size_t* index) const OVERRIDE;
+  virtual bool GetBucketIndex(size_t* index) const override;
 
  private:
   void SkipEmptyBuckets();
diff --git a/src/base/metrics/sparse_histogram.h b/src/base/metrics/sparse_histogram.h
index a7c5695..5d355d5 100644
--- a/src/base/metrics/sparse_histogram.h
+++ b/src/base/metrics/sparse_histogram.h
@@ -28,22 +28,22 @@
   virtual ~SparseHistogram();
 
   // HistogramBase implementation:
-  virtual HistogramType GetHistogramType() const OVERRIDE;
+  virtual HistogramType GetHistogramType() const override;
   virtual bool HasConstructionArguments(Sample minimum,
                                         Sample maximum,
-                                        size_t bucket_count) const OVERRIDE;
-  virtual void Add(Sample value) OVERRIDE;
-  virtual void WriteHTMLGraph(std::string* output) const OVERRIDE;
-  virtual void WriteAscii(std::string* output) const OVERRIDE;
-  virtual scoped_ptr<HistogramSamples> SnapshotSamples() const OVERRIDE;
+                                        size_t bucket_count) const override;
+  virtual void Add(Sample value) override;
+  virtual void WriteHTMLGraph(std::string* output) const override;
+  virtual void WriteAscii(std::string* output) const override;
+  virtual scoped_ptr<HistogramSamples> SnapshotSamples() const override;
 
  private:
   // Clients should always use FactoryGet to create SparseHistogram.
   SparseHistogram(const std::string& name);
 
-  virtual void GetParameters(DictionaryValue* params) const OVERRIDE;
+  virtual void GetParameters(DictionaryValue* params) const override;
   virtual void GetCountAndBucketData(Count* count,
-                                     ListValue* buckets) const OVERRIDE;
+                                     ListValue* buckets) const override;
 
   friend class SparseHistogramTest;  // For constuctor calling.
 
diff --git a/src/base/metrics/stats_counters.h b/src/base/metrics/stats_counters.h
index bc2016c..5e4b1fb 100644
--- a/src/base/metrics/stats_counters.h
+++ b/src/base/metrics/stats_counters.h
@@ -172,7 +172,7 @@
   explicit StatsRate(const std::string& name);
   virtual ~StatsRate();
 
-  virtual void Add(int value) OVERRIDE;
+  virtual void Add(int value) override;
 
  private:
   StatsCounter counter_;
diff --git a/src/base/metrics/stats_table_unittest.cc b/src/base/metrics/stats_table_unittest.cc
index 579bab7..e64c39d 100644
--- a/src/base/metrics/stats_table_unittest.cc
+++ b/src/base/metrics/stats_table_unittest.cc
@@ -78,7 +78,7 @@
       : SimpleThread(name),
         id_(id) {}
 
-  virtual void Run() OVERRIDE;
+  virtual void Run() override;
 
  private:
   int id_;
diff --git a/src/base/observer_list_unittest.cc b/src/base/observer_list_unittest.cc
index 7e16b47..56e004b 100644
--- a/src/base/observer_list_unittest.cc
+++ b/src/base/observer_list_unittest.cc
@@ -27,7 +27,7 @@
 class Adder : public Foo {
  public:
   explicit Adder(int scaler) : total(0), scaler_(scaler) {}
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     total += x * scaler_;
   }
   virtual ~Adder() {}
@@ -44,7 +44,7 @@
         doomed_(doomed) {
   }
   virtual ~Disrupter() {}
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     list_->RemoveObserver(doomed_);
   }
 
@@ -60,7 +60,7 @@
         doomed_(doomed) {
   }
   virtual ~ThreadSafeDisrupter() {}
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     list_->RemoveObserver(doomed_);
   }
 
@@ -78,7 +78,7 @@
         adder(1) {
   }
 
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     if (!added) {
       added = true;
       observer_list->AddObserver(&adder);
@@ -113,7 +113,7 @@
   virtual ~AddRemoveThread() {
   }
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     loop_ = new MessageLoop();  // Fire up a message loop.
     loop_->PostTask(
         FROM_HERE,
@@ -158,7 +158,7 @@
     loop_->PostTask(FROM_HERE, MessageLoop::QuitClosure());
   }
 
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     count_observes_++;
 
     // If we're getting called after we removed ourselves from
@@ -334,7 +334,7 @@
     foos_.push_back(foo);
   }
 
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     std::vector<Foo*> tmp;
     tmp.swap(foos_);
     for (std::vector<Foo*>::iterator it = tmp.begin();
@@ -494,7 +494,7 @@
   explicit AddInClearObserve(ObserverList<Foo>* list)
       : list_(list), added_(false), adder_(1) {}
 
-  virtual void Observe(int /* x */) OVERRIDE {
+  virtual void Observe(int /* x */) override {
     list_->Clear();
     list_->AddObserver(&adder_);
     added_ = true;
@@ -539,7 +539,7 @@
   explicit ListDestructor(ObserverList<Foo>* list) : list_(list) {}
   virtual ~ListDestructor() {}
 
-  virtual void Observe(int x) OVERRIDE {
+  virtual void Observe(int x) override {
     delete list_;
   }
 
diff --git a/src/base/pr_time_unittest.cc b/src/base/pr_time_unittest.cc
index da1ab96..8056484 100644
--- a/src/base/pr_time_unittest.cc
+++ b/src/base/pr_time_unittest.cc
@@ -29,7 +29,7 @@
   // that is more platform-abstracted.
 
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
 #if defined(OS_STARBOARD)
     Time local_time = base::test::time_helpers::TestDateToTime(
         base::test::time_helpers::kTimeZoneLocal);
diff --git a/src/base/prefs/default_pref_store.h b/src/base/prefs/default_pref_store.h
index 996bf8b..07055af 100644
--- a/src/base/prefs/default_pref_store.h
+++ b/src/base/prefs/default_pref_store.h
@@ -21,7 +21,7 @@
   DefaultPrefStore();
 
   virtual bool GetValue(const std::string& key,
-                        const base::Value** result) const OVERRIDE;
+                        const base::Value** result) const override;
 
   // Stores a new |value| for |key|. Assumes ownership of |value|.
   void SetDefaultValue(const std::string& key, Value* value);
diff --git a/src/base/prefs/json_pref_store.h b/src/base/prefs/json_pref_store.h
index 49dd71a..cb7da85 100644
--- a/src/base/prefs/json_pref_store.h
+++ b/src/base/prefs/json_pref_store.h
@@ -45,26 +45,26 @@
 
   // PrefStore overrides:
   virtual bool GetValue(const std::string& key,
-                        const base::Value** result) const OVERRIDE;
-  virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual size_t NumberOfObservers() const OVERRIDE;
-  virtual bool IsInitializationComplete() const OVERRIDE;
+                        const base::Value** result) const override;
+  virtual void AddObserver(PrefStore::Observer* observer) override;
+  virtual void RemoveObserver(PrefStore::Observer* observer) override;
+  virtual size_t NumberOfObservers() const override;
+  virtual bool IsInitializationComplete() const override;
 
   // PersistentPrefStore overrides:
   virtual bool GetMutableValue(const std::string& key,
-                               base::Value** result) OVERRIDE;
-  virtual void SetValue(const std::string& key, base::Value* value) OVERRIDE;
+                               base::Value** result) override;
+  virtual void SetValue(const std::string& key, base::Value* value) override;
   virtual void SetValueSilently(const std::string& key,
-                                base::Value* value) OVERRIDE;
-  virtual void RemoveValue(const std::string& key) OVERRIDE;
-  virtual void MarkNeedsEmptyValue(const std::string& key) OVERRIDE;
-  virtual bool ReadOnly() const OVERRIDE;
-  virtual PrefReadError GetReadError() const OVERRIDE;
-  virtual PrefReadError ReadPrefs() OVERRIDE;
-  virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) OVERRIDE;
-  virtual void CommitPendingWrite() OVERRIDE;
-  virtual void ReportValueChanged(const std::string& key) OVERRIDE;
+                                base::Value* value) override;
+  virtual void RemoveValue(const std::string& key) override;
+  virtual void MarkNeedsEmptyValue(const std::string& key) override;
+  virtual bool ReadOnly() const override;
+  virtual PrefReadError GetReadError() const override;
+  virtual PrefReadError ReadPrefs() override;
+  virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) override;
+  virtual void CommitPendingWrite() override;
+  virtual void ReportValueChanged(const std::string& key) override;
 
   // This method is called after JSON file has been read. Method takes
   // ownership of the |value| pointer. Note, this method is used with
@@ -76,7 +76,7 @@
   virtual ~JsonPrefStore();
 
   // ImportantFileWriter::DataSerializer overrides:
-  virtual bool SerializeData(std::string* output) OVERRIDE;
+  virtual bool SerializeData(std::string* output) override;
 
   FilePath path_;
   const scoped_refptr<base::SequencedTaskRunner> sequenced_task_runner_;
diff --git a/src/base/prefs/json_pref_store_unittest.cc b/src/base/prefs/json_pref_store_unittest.cc
index dc6f95e..959007a 100644
--- a/src/base/prefs/json_pref_store_unittest.cc
+++ b/src/base/prefs/json_pref_store_unittest.cc
@@ -38,7 +38,7 @@
 
 class JsonPrefStoreTest : public testing::Test {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
 
     ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &data_dir_));
diff --git a/src/base/prefs/overlay_user_pref_store.h b/src/base/prefs/overlay_user_pref_store.h
index 120d405..7d971e6 100644
--- a/src/base/prefs/overlay_user_pref_store.h
+++ b/src/base/prefs/overlay_user_pref_store.h
@@ -30,31 +30,31 @@
   virtual bool IsSetInOverlay(const std::string& key) const;
 
   // Methods of PrefStore.
-  virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual size_t NumberOfObservers() const OVERRIDE;
-  virtual bool IsInitializationComplete() const OVERRIDE;
+  virtual void AddObserver(PrefStore::Observer* observer) override;
+  virtual void RemoveObserver(PrefStore::Observer* observer) override;
+  virtual size_t NumberOfObservers() const override;
+  virtual bool IsInitializationComplete() const override;
   virtual bool GetValue(const std::string& key,
-                        const base::Value** result) const OVERRIDE;
+                        const base::Value** result) const override;
 
   // Methods of PersistentPrefStore.
   virtual bool GetMutableValue(const std::string& key,
-                               base::Value** result) OVERRIDE;
-  virtual void SetValue(const std::string& key, base::Value* value) OVERRIDE;
+                               base::Value** result) override;
+  virtual void SetValue(const std::string& key, base::Value* value) override;
   virtual void SetValueSilently(const std::string& key,
-                                base::Value* value) OVERRIDE;
-  virtual void RemoveValue(const std::string& key) OVERRIDE;
-  virtual void MarkNeedsEmptyValue(const std::string& key) OVERRIDE;
-  virtual bool ReadOnly() const OVERRIDE;
-  virtual PrefReadError GetReadError() const OVERRIDE;
-  virtual PrefReadError ReadPrefs() OVERRIDE;
-  virtual void ReadPrefsAsync(ReadErrorDelegate* delegate) OVERRIDE;
-  virtual void CommitPendingWrite() OVERRIDE;
-  virtual void ReportValueChanged(const std::string& key) OVERRIDE;
+                                base::Value* value) override;
+  virtual void RemoveValue(const std::string& key) override;
+  virtual void MarkNeedsEmptyValue(const std::string& key) override;
+  virtual bool ReadOnly() const override;
+  virtual PrefReadError GetReadError() const override;
+  virtual PrefReadError ReadPrefs() override;
+  virtual void ReadPrefsAsync(ReadErrorDelegate* delegate) override;
+  virtual void CommitPendingWrite() override;
+  virtual void ReportValueChanged(const std::string& key) override;
 
   // Methods of PrefStore::Observer.
-  virtual void OnPrefValueChanged(const std::string& key) OVERRIDE;
-  virtual void OnInitializationCompleted(bool succeeded) OVERRIDE;
+  virtual void OnPrefValueChanged(const std::string& key) override;
+  virtual void OnInitializationCompleted(bool succeeded) override;
 
   void RegisterOverlayPref(const std::string& key);
   void RegisterOverlayPref(const std::string& overlay_key,
diff --git a/src/base/prefs/public/pref_change_registrar.h b/src/base/prefs/public/pref_change_registrar.h
index 84df652..3c80f1d 100644
--- a/src/base/prefs/public/pref_change_registrar.h
+++ b/src/base/prefs/public/pref_change_registrar.h
@@ -64,7 +64,7 @@
  private:
   // PrefObserver:
   virtual void OnPreferenceChanged(PrefServiceBase* service,
-                                   const std::string& pref_name) OVERRIDE;
+                                   const std::string& pref_name) override;
 
   static void InvokeUnnamedCallback(const base::Closure& callback,
                                     const std::string& pref_name);
diff --git a/src/base/prefs/public/pref_change_registrar_unittest.cc b/src/base/prefs/public/pref_change_registrar_unittest.cc
index d194c36..2eb4000 100644
--- a/src/base/prefs/public/pref_change_registrar_unittest.cc
+++ b/src/base/prefs/public/pref_change_registrar_unittest.cc
@@ -40,7 +40,7 @@
   virtual ~PrefChangeRegistrarTest() {}
 
  protected:
-  virtual void SetUp() OVERRIDE;
+  virtual void SetUp() override;
 
   base::Closure observer() const {
     return base::Bind(&base::DoNothing);
diff --git a/src/base/prefs/public/pref_member.h b/src/base/prefs/public/pref_member.h
index 52a91b5..dd26d62 100644
--- a/src/base/prefs/public/pref_member.h
+++ b/src/base/prefs/public/pref_member.h
@@ -116,7 +116,7 @@
 
   // PrefObserver
   virtual void OnPreferenceChanged(PrefServiceBase* service,
-                                   const std::string& pref_name) OVERRIDE;
+                                   const std::string& pref_name) override;
 
   void VerifyValuePrefName() const {
     DCHECK(!pref_name_.empty());
@@ -262,7 +262,7 @@
     virtual ~Internal() {}
 
     virtual BASE_PREFS_EXPORT bool UpdateValueInternal(
-        const base::Value& value) const OVERRIDE;
+        const base::Value& value) const override;
 
     // We cache the value of the pref so we don't have to keep walking the pref
     // tree.
@@ -271,8 +271,8 @@
     DISALLOW_COPY_AND_ASSIGN(Internal);
   };
 
-  virtual Internal* internal() const OVERRIDE { return internal_; }
-  virtual void CreateInternal() const OVERRIDE {
+  virtual Internal* internal() const override { return internal_; }
+  virtual void CreateInternal() const override {
     internal_ = new Internal();
   }
 
diff --git a/src/base/prefs/testing_pref_store.h b/src/base/prefs/testing_pref_store.h
index a9f1e92..8602c65 100644
--- a/src/base/prefs/testing_pref_store.h
+++ b/src/base/prefs/testing_pref_store.h
@@ -22,26 +22,26 @@
 
   // Overriden from PrefStore.
   virtual bool GetValue(const std::string& key,
-                        const base::Value** result) const OVERRIDE;
-  virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual size_t NumberOfObservers() const OVERRIDE;
-  virtual bool IsInitializationComplete() const OVERRIDE;
+                        const base::Value** result) const override;
+  virtual void AddObserver(PrefStore::Observer* observer) override;
+  virtual void RemoveObserver(PrefStore::Observer* observer) override;
+  virtual size_t NumberOfObservers() const override;
+  virtual bool IsInitializationComplete() const override;
 
   // PersistentPrefStore overrides:
   virtual bool GetMutableValue(const std::string& key,
-                               base::Value** result) OVERRIDE;
-  virtual void ReportValueChanged(const std::string& key) OVERRIDE;
-  virtual void SetValue(const std::string& key, base::Value* value) OVERRIDE;
+                               base::Value** result) override;
+  virtual void ReportValueChanged(const std::string& key) override;
+  virtual void SetValue(const std::string& key, base::Value* value) override;
   virtual void SetValueSilently(const std::string& key,
-                                base::Value* value) OVERRIDE;
-  virtual void RemoveValue(const std::string& key) OVERRIDE;
-  virtual void MarkNeedsEmptyValue(const std::string& key) OVERRIDE;
-  virtual bool ReadOnly() const OVERRIDE;
-  virtual PrefReadError GetReadError() const OVERRIDE;
-  virtual PersistentPrefStore::PrefReadError ReadPrefs() OVERRIDE;
-  virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) OVERRIDE;
-  virtual void CommitPendingWrite() OVERRIDE {}
+                                base::Value* value) override;
+  virtual void RemoveValue(const std::string& key) override;
+  virtual void MarkNeedsEmptyValue(const std::string& key) override;
+  virtual bool ReadOnly() const override;
+  virtual PrefReadError GetReadError() const override;
+  virtual PersistentPrefStore::PrefReadError ReadPrefs() override;
+  virtual void ReadPrefsAsync(ReadErrorDelegate* error_delegate) override;
+  virtual void CommitPendingWrite() override {}
 
   // Marks the store as having completed initialization.
   void SetInitializationCompleted();
diff --git a/src/base/prefs/value_map_pref_store.h b/src/base/prefs/value_map_pref_store.h
index c9c9b1c..1f17cef 100644
--- a/src/base/prefs/value_map_pref_store.h
+++ b/src/base/prefs/value_map_pref_store.h
@@ -22,10 +22,10 @@
 
   // PrefStore overrides:
   virtual bool GetValue(const std::string& key,
-                        const base::Value** value) const OVERRIDE;
-  virtual void AddObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual void RemoveObserver(PrefStore::Observer* observer) OVERRIDE;
-  virtual size_t NumberOfObservers() const OVERRIDE;
+                        const base::Value** value) const override;
+  virtual void AddObserver(PrefStore::Observer* observer) override;
+  virtual void RemoveObserver(PrefStore::Observer* observer) override;
+  virtual size_t NumberOfObservers() const override;
 
  protected:
   virtual ~ValueMapPrefStore();
diff --git a/src/base/process_util.h b/src/base/process_util.h
index 8e21ec5..ffe3073 100644
--- a/src/base/process_util.h
+++ b/src/base/process_util.h
@@ -670,7 +670,7 @@
   virtual ~NamedProcessIterator();
 
  protected:
-  virtual bool IncludeEntry() OVERRIDE;
+  virtual bool IncludeEntry() override;
 
  private:
   FilePath::StringType executable_name_;
diff --git a/src/base/sync_socket.h b/src/base/sync_socket.h
index eb3eeb5..4601fb9 100644
--- a/src/base/sync_socket.h
+++ b/src/base/sync_socket.h
@@ -100,8 +100,8 @@
   // and there isn't a way to cancel a blocking synchronous Read that is
   // supported on <Vista. So, for Windows only, we override these
   // SyncSocket methods in order to support shutting down the 'socket'.
-  virtual bool Close() OVERRIDE;
-  virtual size_t Receive(void* buffer, size_t length) OVERRIDE;
+  virtual bool Close() override;
+  virtual size_t Receive(void* buffer, size_t length) override;
 #endif
 
   // Send() is overridden to catch cases where the remote end is not responding
@@ -109,7 +109,7 @@
   // implementation of Send() will not block indefinitely as
   // SyncSocket::Send will, but instead return 0, as no bytes could be sent.
   // Note that the socket will not be closed in this case.
-  virtual size_t Send(const void* buffer, size_t length) OVERRIDE;
+  virtual size_t Send(const void* buffer, size_t length) override;
 
  private:
 #if defined(OS_WIN)
diff --git a/src/base/synchronization/condition_variable_unittest.cc b/src/base/synchronization/condition_variable_unittest.cc
index 49d138b..e95b273 100644
--- a/src/base/synchronization/condition_variable_unittest.cc
+++ b/src/base/synchronization/condition_variable_unittest.cc
@@ -69,7 +69,7 @@
   virtual ~WorkQueue();
 
   // PlatformThread::Delegate interface.
-  virtual void ThreadMain() OVERRIDE;
+  virtual void ThreadMain() override;
 
   //----------------------------------------------------------------------------
   // Worker threads only call the following methods.
diff --git a/src/base/synchronization/lock_unittest.cc b/src/base/synchronization/lock_unittest.cc
index a048f85..dd045c5 100644
--- a/src/base/synchronization/lock_unittest.cc
+++ b/src/base/synchronization/lock_unittest.cc
@@ -18,7 +18,7 @@
  public:
   BasicLockTestThread(Lock* lock) : lock_(lock), acquired_(0) {}
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     for (int i = 0; i < 10; i++) {
       lock_->Acquire();
       acquired_++;
@@ -93,7 +93,7 @@
  public:
   TryLockTestThread(Lock* lock) : lock_(lock), got_lock_(false) {}
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     got_lock_ = lock_->Try();
     if (got_lock_)
       lock_->Release();
@@ -162,7 +162,7 @@
     }
   }
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     DoStuff(lock_, value_);
   }
 
diff --git a/src/base/synchronization/waitable_event_posix.cc b/src/base/synchronization/waitable_event_posix.cc
index 7066aee..a2a0c0b 100644
--- a/src/base/synchronization/waitable_event_posix.cc
+++ b/src/base/synchronization/waitable_event_posix.cc
@@ -91,7 +91,7 @@
         cv_(&lock_) {
   }
 
-  virtual bool Fire(WaitableEvent* signaling_event) OVERRIDE {
+  virtual bool Fire(WaitableEvent* signaling_event) override {
     base::AutoLock locked(lock_);
 
     if (fired_)
@@ -117,7 +117,7 @@
   // These waiters are always stack allocated and don't delete themselves. Thus
   // there's no problem and the ABA tag is the same as the object pointer.
   // ---------------------------------------------------------------------------
-  virtual bool Compare(void* tag) OVERRIDE {
+  virtual bool Compare(void* tag) override {
     return this == tag;
   }
 
@@ -159,7 +159,7 @@
 
 bool WaitableEvent::TimedWait(const TimeDelta& max_time) {
   base::ThreadRestrictions::AssertWaitAllowed();
-  const Time end_time(Time::Now() + max_time);
+  const TimeTicks end_time(TimeTicks::Now() + max_time);
   const bool finite_time = max_time.ToInternalValue() >= 0;
 
   kernel_->lock_.Acquire();
@@ -184,7 +184,7 @@
   // again before unlocking it.
 
   for (;;) {
-    const Time current_time(Time::Now());
+    const TimeTicks current_time(TimeTicks::Now());
 
     if (sw.fired() || (finite_time && current_time >= end_time)) {
       const bool return_value = sw.fired();
diff --git a/src/base/synchronization/waitable_event_unittest.cc b/src/base/synchronization/waitable_event_unittest.cc
index d00adc7..e6a309e 100644
--- a/src/base/synchronization/waitable_event_unittest.cc
+++ b/src/base/synchronization/waitable_event_unittest.cc
@@ -78,7 +78,7 @@
         ev_(ev) {
   }
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     PlatformThread::Sleep(TimeDelta::FromSeconds(static_cast<int>(seconds_)));
     ev_->Signal();
   }
diff --git a/src/base/system_monitor/system_monitor_unittest.cc b/src/base/system_monitor/system_monitor_unittest.cc
index 10bd7e7..683d937 100644
--- a/src/base/system_monitor/system_monitor_unittest.cc
+++ b/src/base/system_monitor/system_monitor_unittest.cc
@@ -24,15 +24,15 @@
   }
 
   // PowerObserver callbacks.
-  virtual void OnPowerStateChange(bool on_battery_power) OVERRIDE {
+  virtual void OnPowerStateChange(bool on_battery_power) override {
     power_state_changes_++;
   }
 
-  virtual void OnSuspend() OVERRIDE {
+  virtual void OnSuspend() override {
     suspends_++;
   }
 
-  virtual void OnResume() OVERRIDE {
+  virtual void OnResume() override {
     resumes_++;
   }
 
diff --git a/src/base/task_runner.cc b/src/base/task_runner.cc
index b0563d4..592ee67 100644
--- a/src/base/task_runner.cc
+++ b/src/base/task_runner.cc
@@ -21,7 +21,7 @@
 
  private:
   virtual bool PostTask(const tracked_objects::Location& from_here,
-                        const Closure& task) OVERRIDE;
+                        const Closure& task) override;
 
   // Non-owning.
   TaskRunner* destination_;
diff --git a/src/base/test/perf_test_suite.h b/src/base/test/perf_test_suite.h
index 85bfc41..df8162b 100644
--- a/src/base/test/perf_test_suite.h
+++ b/src/base/test/perf_test_suite.h
@@ -13,8 +13,8 @@
  public:
   PerfTestSuite(int argc, char** argv);
 
-  virtual void Initialize() OVERRIDE;
-  virtual void Shutdown() OVERRIDE;
+  virtual void Initialize() override;
+  virtual void Shutdown() override;
 };
 
 }  // namespace base
diff --git a/src/base/test/sequenced_worker_pool_owner.h b/src/base/test/sequenced_worker_pool_owner.h
index c6c8d67..12afc62 100644
--- a/src/base/test/sequenced_worker_pool_owner.h
+++ b/src/base/test/sequenced_worker_pool_owner.h
@@ -42,9 +42,9 @@
 
  private:
   // SequencedWorkerPool::TestingObserver implementation.
-  virtual void OnHasWork() OVERRIDE;
-  virtual void WillWaitForShutdown() OVERRIDE;
-  virtual void OnDestruct() OVERRIDE;
+  virtual void OnHasWork() override;
+  virtual void WillWaitForShutdown() override;
+  virtual void OnDestruct() override;
 
   MessageLoop* const constructor_message_loop_;
   scoped_refptr<SequencedWorkerPool> pool_;
diff --git a/src/base/test/test_suite.cc b/src/base/test/test_suite.cc
index 6e0444d..57de666 100644
--- a/src/base/test/test_suite.cc
+++ b/src/base/test/test_suite.cc
@@ -48,7 +48,7 @@
 
 class MaybeTestDisabler : public testing::EmptyTestEventListener {
  public:
-  virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
+  virtual void OnTestStart(const testing::TestInfo& test_info) override {
     ASSERT_FALSE(TestSuite::IsMarkedMaybe(test_info))
         << "Probably the OS #ifdefs don't include all of the necessary "
            "platforms.\nPlease ensure that no tests have the MAYBE_ prefix "
@@ -62,11 +62,11 @@
       : old_command_line_(CommandLine::NO_PROGRAM) {
   }
 
-  virtual void OnTestStart(const testing::TestInfo& test_info) OVERRIDE {
+  virtual void OnTestStart(const testing::TestInfo& test_info) override {
     old_command_line_ = *CommandLine::ForCurrentProcess();
   }
 
-  virtual void OnTestEnd(const testing::TestInfo& test_info) OVERRIDE {
+  virtual void OnTestEnd(const testing::TestInfo& test_info) override {
     *CommandLine::ForCurrentProcess() = old_command_line_;
   }
 
diff --git a/src/base/threading/non_thread_safe_unittest.cc b/src/base/threading/non_thread_safe_unittest.cc
index ee31701..5c4b93f 100644
--- a/src/base/threading/non_thread_safe_unittest.cc
+++ b/src/base/threading/non_thread_safe_unittest.cc
@@ -52,7 +52,7 @@
         non_thread_safe_class_(non_thread_safe_class) {
   }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     non_thread_safe_class_->DoStuff();
   }
 
@@ -70,7 +70,7 @@
         non_thread_safe_class_(non_thread_safe_class) {
   }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     non_thread_safe_class_.reset();
   }
 
diff --git a/src/base/threading/platform_thread_unittest.cc b/src/base/threading/platform_thread_unittest.cc
index e37709a..49ba2b8 100644
--- a/src/base/threading/platform_thread_unittest.cc
+++ b/src/base/threading/platform_thread_unittest.cc
@@ -15,7 +15,7 @@
  public:
   TrivialThread() : did_run_(false) {}
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     did_run_ = true;
   }
 
@@ -57,7 +57,7 @@
  public:
   FunctionTestThread() : thread_id_(0) {}
 
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     thread_id_ = PlatformThread::CurrentId();
     PlatformThread::YieldCurrentThread();
     PlatformThread::Sleep(TimeDelta::FromMilliseconds(50));
diff --git a/src/base/threading/sequenced_worker_pool.cc b/src/base/threading/sequenced_worker_pool.cc
index 59e684f..1d77de9 100644
--- a/src/base/threading/sequenced_worker_pool.cc
+++ b/src/base/threading/sequenced_worker_pool.cc
@@ -95,12 +95,12 @@
   // TaskRunner implementation
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                const Closure& task,
-                               TimeDelta delay) OVERRIDE;
+                               TimeDelta delay) override;
 #if defined(COBALT)
   virtual bool PostBlockingTask(const tracked_objects::Location& from_here,
-                                const Closure& task) OVERRIDE;
+                                const Closure& task) override;
 #endif
-  virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
+  virtual bool RunsTasksOnCurrentThread() const override;
 
  private:
   virtual ~SequencedWorkerPoolTaskRunner();
@@ -160,18 +160,18 @@
   // TaskRunner implementation
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                const Closure& task,
-                               TimeDelta delay) OVERRIDE;
+                               TimeDelta delay) override;
 #if defined(COBALT)
   virtual bool PostBlockingTask(const tracked_objects::Location& from_here,
-                                const Closure& task) OVERRIDE;
+                                const Closure& task) override;
 #endif
-  virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
+  virtual bool RunsTasksOnCurrentThread() const override;
 
   // SequencedTaskRunner implementation
   virtual bool PostNonNestableDelayedTask(
       const tracked_objects::Location& from_here,
       const Closure& task,
-      TimeDelta delay) OVERRIDE;
+      TimeDelta delay) override;
 
  private:
   virtual ~SequencedWorkerPoolSequencedTaskRunner();
@@ -253,7 +253,7 @@
   virtual ~Worker();
 
   // SimpleThread implementation. This actually runs the background thread.
-  virtual void Run() OVERRIDE;
+  virtual void Run() override;
 
   void set_running_sequence(SequenceToken token) {
     running_sequence_ = token;
diff --git a/src/base/threading/sequenced_worker_pool.h b/src/base/threading/sequenced_worker_pool.h
index cca19f9..c133490 100644
--- a/src/base/threading/sequenced_worker_pool.h
+++ b/src/base/threading/sequenced_worker_pool.h
@@ -291,12 +291,12 @@
   // TaskRunner implementation. Forwards to PostDelayedWorkerTask().
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                const Closure& task,
-                               TimeDelta delay) OVERRIDE;
+                               TimeDelta delay) override;
 #if defined(COBALT)
   virtual bool PostBlockingTask(const tracked_objects::Location& from_here,
-                                const Closure& task) OVERRIDE;
+                                const Closure& task) override;
 #endif
-  virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
+  virtual bool RunsTasksOnCurrentThread() const override;
 
   // Returns true if the current thread is processing a task with the given
   // sequence_token.
@@ -325,7 +325,7 @@
  protected:
   virtual ~SequencedWorkerPool();
 
-  virtual void OnDestruct() const OVERRIDE;
+  virtual void OnDestruct() const override;
 
  private:
   friend class RefCountedThreadSafe<SequencedWorkerPool>;
diff --git a/src/base/threading/sequenced_worker_pool_unittest.cc b/src/base/threading/sequenced_worker_pool_unittest.cc
index 2dcda60..5e643b5 100644
--- a/src/base/threading/sequenced_worker_pool_unittest.cc
+++ b/src/base/threading/sequenced_worker_pool_unittest.cc
@@ -160,9 +160,9 @@
 
   virtual ~SequencedWorkerPoolTest() {}
 
-  virtual void SetUp() OVERRIDE {}
+  virtual void SetUp() override {}
 
-  virtual void TearDown() OVERRIDE {
+  virtual void TearDown() override {
     pool()->Shutdown();
   }
 
diff --git a/src/base/threading/simple_thread.h b/src/base/threading/simple_thread.h
index 2594b18..33f7f77 100644
--- a/src/base/threading/simple_thread.h
+++ b/src/base/threading/simple_thread.h
@@ -122,7 +122,7 @@
   bool HasBeenJoined() { return joined_; }
 
   // Overridden from PlatformThread::Delegate:
-  virtual void ThreadMain() OVERRIDE;
+  virtual void ThreadMain() override;
 
   // Only set priorities with a careful understanding of the consequences.
   // This is meant for very limited use cases.
@@ -156,7 +156,7 @@
                        const Options& options);
 
   virtual ~DelegateSimpleThread();
-  virtual void Run() OVERRIDE;
+  virtual void Run() override;
  private:
   Delegate* delegate_;
 };
@@ -194,7 +194,7 @@
   }
 
   // We implement the Delegate interface, for running our internal threads.
-  virtual void Run() OVERRIDE;
+  virtual void Run() override;
 
  private:
   const std::string name_prefix_;
diff --git a/src/base/threading/simple_thread_unittest.cc b/src/base/threading/simple_thread_unittest.cc
index 169e2d7..95404129 100644
--- a/src/base/threading/simple_thread_unittest.cc
+++ b/src/base/threading/simple_thread_unittest.cc
@@ -17,7 +17,7 @@
   SetIntRunner(int* ptr, int val) : ptr_(ptr), val_(val) { }
   virtual ~SetIntRunner() { }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     *ptr_ = val_;
   }
 
@@ -31,7 +31,7 @@
   explicit WaitEventRunner(WaitableEvent* event) : event_(event) { }
   virtual ~WaitEventRunner() { }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     EXPECT_FALSE(event_->IsSignaled());
     event_->Signal();
     EXPECT_TRUE(event_->IsSignaled());
@@ -43,7 +43,7 @@
 class SeqRunner : public DelegateSimpleThread::Delegate {
  public:
   explicit SeqRunner(AtomicSequenceNumber* seq) : seq_(seq) { }
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     seq_->GetNext();
   }
 
@@ -60,7 +60,7 @@
                    int total, WaitableEvent* event)
       : seq_(seq), total_(total), event_(event) { }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     if (seq_->GetNext() == total_) {
       event_->Signal();
     } else {
diff --git a/src/base/threading/thread.h b/src/base/threading/thread.h
index 0a99852..126e9e9 100644
--- a/src/base/threading/thread.h
+++ b/src/base/threading/thread.h
@@ -185,7 +185,7 @@
 #endif
 
   // PlatformThread::Delegate methods:
-  virtual void ThreadMain() OVERRIDE;
+  virtual void ThreadMain() override;
 
 #if defined(OS_WIN)
   // Whether this thread needs to initialize COM, and if so, in what mode.
diff --git a/src/base/threading/thread_checker_unittest.cc b/src/base/threading/thread_checker_unittest.cc
index 026cfd9..46469fa 100644
--- a/src/base/threading/thread_checker_unittest.cc
+++ b/src/base/threading/thread_checker_unittest.cc
@@ -52,7 +52,7 @@
         thread_checker_class_(thread_checker_class) {
   }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     thread_checker_class_->DoStuff();
   }
 
@@ -70,7 +70,7 @@
         thread_checker_class_(thread_checker_class) {
   }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     thread_checker_class_.reset();
   }
 
diff --git a/src/base/threading/thread_collision_warner.h b/src/base/threading/thread_collision_warner.h
index 2181cbd..53c65e3 100644
--- a/src/base/threading/thread_collision_warner.h
+++ b/src/base/threading/thread_collision_warner.h
@@ -138,7 +138,7 @@
 
 struct BASE_EXPORT DCheckAsserter : public AsserterBase {
   virtual ~DCheckAsserter() {}
-  virtual void warn() OVERRIDE;
+  virtual void warn() override;
 };
 
 class BASE_EXPORT ThreadCollisionWarner {
diff --git a/src/base/threading/thread_collision_warner_unittest.cc b/src/base/threading/thread_collision_warner_unittest.cc
index 48710a7..c7c7d0a 100644
--- a/src/base/threading/thread_collision_warner_unittest.cc
+++ b/src/base/threading/thread_collision_warner_unittest.cc
@@ -41,7 +41,7 @@
   AssertReporter()
       : failed_(false) {}
 
-  virtual void warn() OVERRIDE {
+  virtual void warn() override {
     failed_ = true;
   }
 
@@ -151,7 +151,7 @@
     explicit QueueUser(NonThreadSafeQueue& queue)
         : queue_(queue) {}
 
-    virtual void Run() OVERRIDE {
+    virtual void Run() override {
       queue_.push(0);
       queue_.pop();
     }
@@ -209,7 +209,7 @@
     explicit QueueUser(NonThreadSafeQueue& queue)
         : queue_(queue) {}
 
-    virtual void Run() OVERRIDE {
+    virtual void Run() override {
       queue_.push(0);
       queue_.pop();
     }
@@ -270,7 +270,7 @@
         : queue_(queue),
           lock_(lock) {}
 
-    virtual void Run() OVERRIDE {
+    virtual void Run() override {
       {
         base::AutoLock auto_lock(lock_);
         queue_.push(0);
@@ -344,7 +344,7 @@
         : queue_(queue),
           lock_(lock) {}
 
-    virtual void Run() OVERRIDE {
+    virtual void Run() override {
       {
         base::AutoLock auto_lock(lock_);
         queue_.push(0);
diff --git a/src/base/threading/thread_local_storage_unittest.cc b/src/base/threading/thread_local_storage_unittest.cc
index c613148..e62d782 100644
--- a/src/base/threading/thread_local_storage_unittest.cc
+++ b/src/base/threading/thread_local_storage_unittest.cc
@@ -35,7 +35,7 @@
 
   virtual ~ThreadLocalStorageRunner() {}
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     *tls_value_ptr_ = kInitialTlsValue;
     tls_slot.Set(tls_value_ptr_);
 
diff --git a/src/base/threading/thread_local_unittest.cc b/src/base/threading/thread_local_unittest.cc
index b125a48..9d0a7c9 100644
--- a/src/base/threading/thread_local_unittest.cc
+++ b/src/base/threading/thread_local_unittest.cc
@@ -37,7 +37,7 @@
 
   void set_value(ThreadLocalTesterBase* val) { val_ = val; }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     DCHECK(!done_->IsSignaled());
     tlp_->Set(val_);
     done_->Signal();
@@ -57,7 +57,7 @@
 
   void set_ptr(ThreadLocalTesterBase** ptr) { ptr_ = ptr; }
 
-  virtual void Run() OVERRIDE {
+  virtual void Run() override {
     DCHECK(!done_->IsSignaled());
     *ptr_ = tlp_->Get();
     done_->Signal();
diff --git a/src/base/threading/thread_unittest.cc b/src/base/threading/thread_unittest.cc
index 28696d9..391b04d 100644
--- a/src/base/threading/thread_unittest.cc
+++ b/src/base/threading/thread_unittest.cc
@@ -35,7 +35,7 @@
     Stop();
   }
 
-  virtual void Init() OVERRIDE {
+  virtual void Init() override {
     base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(500));
     init_called_ = true;
   }
@@ -74,11 +74,11 @@
     Stop();
   }
 
-  virtual void Init() OVERRIDE {
+  virtual void Init() override {
     event_list_->push_back(THREAD_EVENT_INIT);
   }
 
-  virtual void CleanUp() OVERRIDE {
+  virtual void CleanUp() override {
     event_list_->push_back(THREAD_EVENT_CLEANUP);
   }
 
@@ -96,7 +96,7 @@
   }
 
   // DestructionObserver implementation:
-  virtual void WillDestroyCurrentMessageLoop() OVERRIDE {
+  virtual void WillDestroyCurrentMessageLoop() override {
     event_list_->push_back(THREAD_EVENT_MESSAGE_LOOP_DESTROYED);
     event_list_ = NULL;
   }
diff --git a/src/base/threading/watchdog.h b/src/base/threading/watchdog.h
index 5b0b210..259f364 100644
--- a/src/base/threading/watchdog.h
+++ b/src/base/threading/watchdog.h
@@ -65,7 +65,7 @@
    public:
     explicit ThreadDelegate(Watchdog* watchdog) : watchdog_(watchdog) {
     }
-    virtual void ThreadMain() OVERRIDE;
+    virtual void ThreadMain() override;
    private:
     void SetThreadName() const;
 
diff --git a/src/base/threading/watchdog_unittest.cc b/src/base/threading/watchdog_unittest.cc
index 92ab02c..2774103 100644
--- a/src/base/threading/watchdog_unittest.cc
+++ b/src/base/threading/watchdog_unittest.cc
@@ -28,7 +28,7 @@
 
   virtual ~WatchdogCounter() {}
 
-  virtual void Alarm() OVERRIDE {
+  virtual void Alarm() override {
     alarm_counter_++;
     Watchdog::Alarm();
   }
@@ -43,7 +43,7 @@
 
 class WatchdogTest : public testing::Test {
  public:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
     Watchdog::ResetStaticData();
   }
 };
diff --git a/src/base/threading/worker_pool.cc b/src/base/threading/worker_pool.cc
index 9aa7ba5..26e89b9 100644
--- a/src/base/threading/worker_pool.cc
+++ b/src/base/threading/worker_pool.cc
@@ -22,7 +22,7 @@
 
  private:
   virtual bool PostTask(const tracked_objects::Location& from_here,
-                        const Closure& task) OVERRIDE {
+                        const Closure& task) override {
     return WorkerPool::PostTask(from_here, task, task_is_slow_);
   }
 
@@ -41,12 +41,12 @@
   // TaskRunner implementation
   virtual bool PostDelayedTask(const tracked_objects::Location& from_here,
                                const Closure& task,
-                               TimeDelta delay) OVERRIDE;
+                               TimeDelta delay) override;
 #if defined(COBALT)
   virtual bool PostBlockingTask(const tracked_objects::Location& from_here,
-                                const Closure& task) OVERRIDE;
+                                const Closure& task) override;
 #endif
-  virtual bool RunsTasksOnCurrentThread() const OVERRIDE;
+  virtual bool RunsTasksOnCurrentThread() const override;
 
  private:
   virtual ~WorkerPoolTaskRunner();
diff --git a/src/base/threading/worker_pool_posix.cc b/src/base/threading/worker_pool_posix.cc
index f15250f..c3c60ef 100644
--- a/src/base/threading/worker_pool_posix.cc
+++ b/src/base/threading/worker_pool_posix.cc
@@ -84,7 +84,7 @@
       : name_prefix_(name_prefix),
         pool_(pool) {}
 
-  virtual void ThreadMain() OVERRIDE;
+  virtual void ThreadMain() override;
 
  private:
   const std::string name_prefix_;
diff --git a/src/base/time_unittest.cc b/src/base/time_unittest.cc
index f1c0d54..cad726a 100644
--- a/src/base/time_unittest.cc
+++ b/src/base/time_unittest.cc
@@ -25,7 +25,7 @@
 // See also pr_time_unittests.cc
 class TimeTest : public testing::Test {
  protected:
-  virtual void SetUp() OVERRIDE {
+  virtual void SetUp() override {
 #if defined(OS_STARBOARD)
     // Since we don't have access to mktime, let's use time_helpers to do the
     // same thing in a portable way.
diff --git a/src/base/timer.cc b/src/base/timer.cc
index b2b7954..04b553e 100644
--- a/src/base/timer.cc
+++ b/src/base/timer.cc
@@ -236,9 +236,9 @@
     // Setup member variables and the next tasks before the current one runs as
     // we cannot access any member variables after calling task.Run().
     NewScheduledTaskInfo task_info = SetupNewScheduledTask(delay_);
-    base::Time task_start_time = base::Time::Now();
+    base::TimeTicks task_start_time = base::TimeTicks::Now();
     task.Run();
-    base::TimeDelta task_duration = base::Time::Now() - task_start_time;
+    base::TimeDelta task_duration = base::TimeTicks::Now() - task_start_time;
     if (task_duration >= delay_) {
       PostNewScheduledTask(task_info, base::TimeDelta::FromInternalValue(0));
     } else {
diff --git a/src/base/tools_sanity_unittest.cc b/src/base/tools_sanity_unittest.cc
index 074a13e..23f13f8 100644
--- a/src/base/tools_sanity_unittest.cc
+++ b/src/base/tools_sanity_unittest.cc
@@ -208,7 +208,7 @@
  public:
   explicit TOOLS_SANITY_TEST_CONCURRENT_THREAD(bool *value) : value_(value) {}
   virtual ~TOOLS_SANITY_TEST_CONCURRENT_THREAD() {}
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     *value_ = true;
 
     // Sleep for a few milliseconds so the two threads are more likely to live
@@ -224,7 +224,7 @@
  public:
   explicit ReleaseStoreThread(base::subtle::Atomic32 *value) : value_(value) {}
   virtual ~ReleaseStoreThread() {}
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     base::subtle::Release_Store(value_, kMagicValue);
 
     // Sleep for a few milliseconds so the two threads are more likely to live
@@ -240,7 +240,7 @@
  public:
   explicit AcquireLoadThread(base::subtle::Atomic32 *value) : value_(value) {}
   virtual ~AcquireLoadThread() {}
-  virtual void ThreadMain() OVERRIDE {
+  virtual void ThreadMain() override {
     // Wait for the other thread to make Release_Store
     PlatformThread::Sleep(TimeDelta::FromMilliseconds(100));
     base::subtle::Acquire_Load(value_);
diff --git a/src/base/values.h b/src/base/values.h
index e105818..3edfdcd 100644
--- a/src/base/values.h
+++ b/src/base/values.h
@@ -132,11 +132,11 @@
   virtual ~FundamentalValue();
 
   // Overridden from Value:
-  virtual bool GetAsBoolean(bool* out_value) const OVERRIDE;
-  virtual bool GetAsInteger(int* out_value) const OVERRIDE;
-  virtual bool GetAsDouble(double* out_value) const OVERRIDE;
-  virtual FundamentalValue* DeepCopy() const OVERRIDE;
-  virtual bool Equals(const Value* other) const OVERRIDE;
+  virtual bool GetAsBoolean(bool* out_value) const override;
+  virtual bool GetAsInteger(int* out_value) const override;
+  virtual bool GetAsDouble(double* out_value) const override;
+  virtual FundamentalValue* DeepCopy() const override;
+  virtual bool Equals(const Value* other) const override;
 
  private:
   union {
@@ -157,10 +157,10 @@
   virtual ~StringValue();
 
   // Overridden from Value:
-  virtual bool GetAsString(std::string* out_value) const OVERRIDE;
-  virtual bool GetAsString(string16* out_value) const OVERRIDE;
-  virtual StringValue* DeepCopy() const OVERRIDE;
-  virtual bool Equals(const Value* other) const OVERRIDE;
+  virtual bool GetAsString(std::string* out_value) const override;
+  virtual bool GetAsString(string16* out_value) const override;
+  virtual StringValue* DeepCopy() const override;
+  virtual bool Equals(const Value* other) const override;
 
  private:
   std::string value_;
@@ -186,8 +186,8 @@
   const char* GetBuffer() const { return buffer_; }
 
   // Overridden from Value:
-  virtual BinaryValue* DeepCopy() const OVERRIDE;
-  virtual bool Equals(const Value* other) const OVERRIDE;
+  virtual BinaryValue* DeepCopy() const override;
+  virtual bool Equals(const Value* other) const override;
 
  private:
   // Constructor is private so that only objects with valid buffer pointers
@@ -209,9 +209,9 @@
   virtual ~DictionaryValue();
 
   // Overridden from Value:
-  virtual bool GetAsDictionary(DictionaryValue** out_value) OVERRIDE;
+  virtual bool GetAsDictionary(DictionaryValue** out_value) override;
   virtual bool GetAsDictionary(
-      const DictionaryValue** out_value) const OVERRIDE;
+      const DictionaryValue** out_value) const override;
 
   // Returns true if the current dictionary has a value for the given key.
   bool HasKey(const std::string& key) const;
@@ -381,8 +381,8 @@
   };
 
   // Overridden from Value:
-  virtual DictionaryValue* DeepCopy() const OVERRIDE;
-  virtual bool Equals(const Value* other) const OVERRIDE;
+  virtual DictionaryValue* DeepCopy() const override;
+  virtual bool Equals(const Value* other) const override;
 
  private:
   ValueMap dictionary_;
@@ -489,10 +489,10 @@
   const_iterator end() const { return list_.end(); }
 
   // Overridden from Value:
-  virtual bool GetAsList(ListValue** out_value) OVERRIDE;
-  virtual bool GetAsList(const ListValue** out_value) const OVERRIDE;
-  virtual ListValue* DeepCopy() const OVERRIDE;
-  virtual bool Equals(const Value* other) const OVERRIDE;
+  virtual bool GetAsList(ListValue** out_value) override;
+  virtual bool GetAsList(const ListValue** out_value) const override;
+  virtual ListValue* DeepCopy() const override;
+  virtual bool Equals(const Value* other) const override;
 
  private:
   ValueVector list_;
diff --git a/src/cobalt/CHANGELOG.md b/src/cobalt/CHANGELOG.md
index aef6987..1d2cc6e 100644
--- a/src/cobalt/CHANGELOG.md
+++ b/src/cobalt/CHANGELOG.md
@@ -2,6 +2,19 @@
 
 This document records all notable changes made to Cobalt since the last release.
 
+## Version 14
+ - **Add support for document.hasFocus()**
+
+   While support for firing blur and focus events was implemented, querying
+   the current state via document.hasFocus() was not implemented until now.
+
+ - **Implemented Same Origin Policy and removed navigation whitelist**
+
+   - Added Same Origin Policy and Cross Origin Resource Sharing to vulnerable
+     code areas including XHR, script elements, link elements, style elements,
+     media elements and @font-face CSS rules.
+   - Removed hardcoded YouTube navigation whitelist in favor of SOP and CSP.
+
 ## Version 12
  - **Add support for touchpad not associated with a pointer**
 
@@ -131,4 +144,4 @@
 ## Version 9
  - **Improvements and Bug Fixes**
    - Non-fixed position elements given correct draw order without requiring
-     z-index.
\ No newline at end of file
+     z-index.
diff --git a/src/cobalt/accessibility/screen_reader.h b/src/cobalt/accessibility/screen_reader.h
index 542ed22..0c8a08b 100644
--- a/src/cobalt/accessibility/screen_reader.h
+++ b/src/cobalt/accessibility/screen_reader.h
@@ -40,9 +40,9 @@
  protected:
   ~ScreenReader();
   // dom::DocumentObserver overrides.
-  void OnLoad() OVERRIDE;
-  void OnMutation() OVERRIDE {}
-  void OnFocusChanged() OVERRIDE;
+  void OnLoad() override;
+  void OnMutation() override {}
+  void OnFocusChanged() override;
 
  private:
   typedef script::Sequence<scoped_refptr<dom::MutationRecord> >
diff --git a/src/cobalt/accessibility/screen_reader_tests.cc b/src/cobalt/accessibility/screen_reader_tests.cc
index 9974b6b..e6631ff 100644
--- a/src/cobalt/accessibility/screen_reader_tests.cc
+++ b/src/cobalt/accessibility/screen_reader_tests.cc
@@ -129,10 +129,6 @@
   base::WaitableEvent quit_event_;
   scoped_ptr<accessibility::ScreenReader> screen_reader_;
 };
-
-// Return a NULL SbWindow, since we do not need to pass a valid SbWindow to an
-// on screen keyboard.
-SbWindow GetNullSbWindow() { return NULL; }
 }  // namespace
 
 TEST_P(TextAlternativeTest, TextAlternativeTest) {
@@ -147,7 +143,10 @@
   EXPECT_EQ(GetParam().expected_result, ComputeTextAlternative(element));
 }
 
-TEST_P(LiveRegionMutationTest, LiveRegionMutationTest) {
+// This test broke  because LiveRegionMutationTest::CreateWindowAttribute()
+// returns a NULL script::Wrappable, which the javascript engine will attempt
+// to dereference.
+TEST_P(LiveRegionMutationTest, DISABLED_LiveRegionMutationTest) {
   GURL url(std::string("file:///cobalt/accessibility/testdata/live_region/" +
                        GetParam().html_file_name));
   const math::Size kDefaultViewportSize(1280, 720);
@@ -179,10 +178,9 @@
       base::Bind(&LiveRegionMutationTest::OnError, base::Unretained(this)),
       base::Bind(&LiveRegionMutationTest::OnClose, base::Unretained(this)),
       base::Closure(), /* window_minimize_callback */
-      base::Bind(&GetNullSbWindow), NULL /* can_play_type_handler */,
-      NULL /* web_media_player_factory */, &network_module,
-      kDefaultViewportSize, kDefaultVideoPixelRatio, &resource_provider,
-      kRefreshRate, web_module_options);
+      NULL /* can_play_type_handler */, NULL /* web_media_player_factory */,
+      &network_module, kDefaultViewportSize, kDefaultVideoPixelRatio,
+      &resource_provider, kRefreshRate, web_module_options);
 
   // Wait for the test to quit.
   quit_event_.Wait();
diff --git a/src/cobalt/accessibility/starboard_tts_engine.h b/src/cobalt/accessibility/starboard_tts_engine.h
index 140df21..61fa851 100644
--- a/src/cobalt/accessibility/starboard_tts_engine.h
+++ b/src/cobalt/accessibility/starboard_tts_engine.h
@@ -26,9 +26,9 @@
 // Implementation of TTSEngine using the Starboard Speech Synthesis API.
 class StarboardTTSEngine : public TTSEngine {
  public:
-  void SpeakNow(const std::string& text) OVERRIDE;
-  void Speak(const std::string& text) OVERRIDE;
-  ~StarboardTTSEngine() OVERRIDE {}
+  void SpeakNow(const std::string& text) override;
+  void Speak(const std::string& text) override;
+  ~StarboardTTSEngine() override {}
 };
 }  // namespace accessibility
 }  // namespace cobalt
diff --git a/src/cobalt/accessibility/tts_logger.h b/src/cobalt/accessibility/tts_logger.h
index 9d9ea3a..73f6580 100644
--- a/src/cobalt/accessibility/tts_logger.h
+++ b/src/cobalt/accessibility/tts_logger.h
@@ -25,12 +25,8 @@
 // TTSEngine implementation that just logs the text.
 class TTSLogger : public TTSEngine {
  public:
-  void SpeakNow(const std::string& text) OVERRIDE {
-    LogText(text);
-  }
-  void Speak(const std::string& text) OVERRIDE {
-    LogText(text);
-  }
+  void SpeakNow(const std::string& text) override { LogText(text); }
+  void Speak(const std::string& text) override { LogText(text); }
 
  private:
   void LogText(const std::string& text) {
diff --git a/src/cobalt/account/user_authorizer.h b/src/cobalt/account/user_authorizer.h
index a128c0b..863a122 100644
--- a/src/cobalt/account/user_authorizer.h
+++ b/src/cobalt/account/user_authorizer.h
@@ -73,6 +73,10 @@
   // On success, a scoped_ptr holding a valid AccessToken is returned.
   virtual scoped_ptr<AccessToken> RefreshAuthorization(SbUser user) = 0;
 
+  // Signals that the account manager is shutting down, and unblocks any pending
+  // request. Calling other methods after |Shutdown| may have no effect.
+  virtual void Shutdown() {}
+
   // Instantiates an instance of the platform-specific implementation.
   static UserAuthorizer* Create();
 
diff --git a/src/cobalt/audio/audio_buffer.cc b/src/cobalt/audio/audio_buffer.cc
index 38980c6..3f72c56 100644
--- a/src/cobalt/audio/audio_buffer.cc
+++ b/src/cobalt/audio/audio_buffer.cc
@@ -91,5 +91,10 @@
   return channels_int16_data_[channel_index];
 }
 
+void AudioBuffer::TraceMembers(script::Tracer* tracer) {
+  tracer->TraceItems(channels_data_);
+  tracer->TraceItems(channels_int16_data_);
+}
+
 }  // namespace audio
 }  // namespace cobalt
diff --git a/src/cobalt/audio/audio_buffer.h b/src/cobalt/audio/audio_buffer.h
index 0a9071c..e9ebea9 100644
--- a/src/cobalt/audio/audio_buffer.h
+++ b/src/cobalt/audio/audio_buffer.h
@@ -78,6 +78,7 @@
       uint32 channel_index, script::ExceptionState* exception_state) const;
 
   DEFINE_WRAPPABLE_TYPE(AudioBuffer);
+  void TraceMembers(script::Tracer* tracer) override;
 
  private:
   typedef std::vector<scoped_refptr<dom::Float32Array> > Float32ArrayVector;
diff --git a/src/cobalt/audio/audio_buffer_source_node.cc b/src/cobalt/audio/audio_buffer_source_node.cc
index 55aff8c..49ba2ad 100644
--- a/src/cobalt/audio/audio_buffer_source_node.cc
+++ b/src/cobalt/audio/audio_buffer_source_node.cc
@@ -148,5 +148,11 @@
   return scoped_ptr<ShellAudioBus>();
 }
 
+void AudioBufferSourceNode::TraceMembers(script::Tracer* tracer) {
+  AudioNode::TraceMembers(tracer);
+
+  tracer->Trace(buffer_);
+}
+
 }  // namespace audio
 }  // namespace cobalt
diff --git a/src/cobalt/audio/audio_buffer_source_node.h b/src/cobalt/audio/audio_buffer_source_node.h
index 1e2e615..b017abb 100644
--- a/src/cobalt/audio/audio_buffer_source_node.h
+++ b/src/cobalt/audio/audio_buffer_source_node.h
@@ -78,12 +78,13 @@
   }
 
   scoped_ptr<ShellAudioBus> PassAudioBusFromSource(
-      int32 number_of_frames, SampleType sample_type) OVERRIDE;
+      int32 number_of_frames, SampleType sample_type) override;
 
   DEFINE_WRAPPABLE_TYPE(AudioBufferSourceNode);
+  void TraceMembers(script::Tracer* tracer) override;
 
  protected:
-  ~AudioBufferSourceNode() OVERRIDE;
+  ~AudioBufferSourceNode() override;
 
  private:
   enum State {
diff --git a/src/cobalt/audio/audio_context.cc b/src/cobalt/audio/audio_context.cc
index 0a6075d..1399b4d 100644
--- a/src/cobalt/audio/audio_context.cc
+++ b/src/cobalt/audio/audio_context.cc
@@ -54,6 +54,12 @@
   return scoped_refptr<AudioBufferSourceNode>(new AudioBufferSourceNode(this));
 }
 
+void AudioContext::TraceMembers(script::Tracer* tracer) {
+  dom::EventTarget::TraceMembers(tracer);
+
+  tracer->Trace(destination_);
+}
+
 void AudioContext::DecodeAudioData(
     script::EnvironmentSettings* settings,
     const scoped_refptr<dom::ArrayBuffer>& audio_data,
diff --git a/src/cobalt/audio/audio_context.h b/src/cobalt/audio/audio_context.h
index 2e37fed..ac07c20 100644
--- a/src/cobalt/audio/audio_context.h
+++ b/src/cobalt/audio/audio_context.h
@@ -129,6 +129,7 @@
   const scoped_refptr<AudioLock>& audio_lock() const { return audio_lock_; }
 
   DEFINE_WRAPPABLE_TYPE(AudioContext);
+  void TraceMembers(script::Tracer* tracer) override;
 
  private:
   struct DecodeCallbackInfo {
@@ -160,7 +161,7 @@
   typedef base::hash_map<int, DecodeCallbackInfo*> DecodeCallbacks;
 
   // From EventTarget.
-  std::string GetDebugName() OVERRIDE { return "AudioContext"; }
+  std::string GetDebugName() override { return "AudioContext"; }
 
   void DecodeAudioDataInternal(scoped_ptr<DecodeCallbackInfo> info);
   void DecodeFinish(int callback_id, float sample_rate, int32 number_of_frames,
diff --git a/src/cobalt/audio/audio_destination_node.h b/src/cobalt/audio/audio_destination_node.h
index 5b649f2..eafebef 100644
--- a/src/cobalt/audio/audio_destination_node.h
+++ b/src/cobalt/audio/audio_destination_node.h
@@ -54,20 +54,20 @@
   uint32 max_channel_count() const { return max_channel_count_; }
 
   // From AudioNode.
-  void OnInputNodeConnected() OVERRIDE;
+  void OnInputNodeConnected() override;
   scoped_ptr<ShellAudioBus> PassAudioBusFromSource(int32 /*number_of_frames*/,
-                                                   SampleType) OVERRIDE {
+                                                   SampleType) override {
     NOTREACHED();
     return scoped_ptr<ShellAudioBus>();
   }
 
   // From AudioDevice::RenderCallback.
-  void FillAudioBus(ShellAudioBus* audio_bus, bool* silence) OVERRIDE;
+  void FillAudioBus(ShellAudioBus* audio_bus, bool* silence) override;
 
   DEFINE_WRAPPABLE_TYPE(AudioDestinationNode);
 
  protected:
-  ~AudioDestinationNode() OVERRIDE;
+  ~AudioDestinationNode() override;
 
  private:
   uint32 max_channel_count_;
diff --git a/src/cobalt/audio/audio_device.cc b/src/cobalt/audio/audio_device.cc
index 5d740ab..28d1bce 100644
--- a/src/cobalt/audio/audio_device.cc
+++ b/src/cobalt/audio/audio_device.cc
@@ -251,11 +251,11 @@
   virtual ~Impl();
 
   // ShellAudioStream implementation.
-  bool PauseRequested() const OVERRIDE;
-  bool PullFrames(uint32* offset_in_frame, uint32* total_frames) OVERRIDE;
-  void ConsumeFrames(uint32 frame_played) OVERRIDE;
-  const AudioParameters& GetAudioParameters() const OVERRIDE;
-  AudioBus* GetAudioBus() OVERRIDE;
+  bool PauseRequested() const override;
+  bool PullFrames(uint32* offset_in_frame, uint32* total_frames) override;
+  void ConsumeFrames(uint32 frame_played) override;
+  const AudioParameters& GetAudioParameters() const override;
+  AudioBus* GetAudioBus() override;
 
  private:
   typedef ::media::ShellAudioBus ShellAudioBus;
diff --git a/src/cobalt/audio/audio_file_reader_wav.h b/src/cobalt/audio/audio_file_reader_wav.h
index 2c7185e..5ae0e51 100644
--- a/src/cobalt/audio/audio_file_reader_wav.h
+++ b/src/cobalt/audio/audio_file_reader_wav.h
@@ -28,11 +28,11 @@
   static scoped_ptr<AudioFileReader> TryCreate(const uint8* data, size_t size,
                                                SampleType sample_type);
 
-  scoped_array<uint8> sample_data() OVERRIDE { return sample_data_.Pass(); }
-  float sample_rate() const OVERRIDE { return sample_rate_; }
-  int32 number_of_frames() const OVERRIDE { return number_of_frames_; }
-  int32 number_of_channels() const OVERRIDE { return number_of_channels_; }
-  SampleType sample_type() const OVERRIDE { return sample_type_; }
+  scoped_array<uint8> sample_data() override { return sample_data_.Pass(); }
+  float sample_rate() const override { return sample_rate_; }
+  int32 number_of_frames() const override { return number_of_frames_; }
+  int32 number_of_channels() const override { return number_of_channels_; }
+  SampleType sample_type() const override { return sample_type_; }
 
  private:
   AudioFileReaderWAV(const uint8* data, size_t size, SampleType sample_type);
diff --git a/src/cobalt/audio/audio_node.h b/src/cobalt/audio/audio_node.h
index 5e5f8e3..630013e 100644
--- a/src/cobalt/audio/audio_node.h
+++ b/src/cobalt/audio/audio_node.h
@@ -121,7 +121,7 @@
   DEFINE_WRAPPABLE_TYPE(AudioNode);
 
  protected:
-  ~AudioNode() OVERRIDE;
+  ~AudioNode() override;
 
   void AddInput(const scoped_refptr<AudioNodeInput>& input);
   void AddOutput(const scoped_refptr<AudioNodeOutput>& output);
@@ -137,7 +137,7 @@
   typedef std::vector<scoped_refptr<AudioNodeOutput> > AudioNodeOutputVector;
 
   // From EventTarget.
-  std::string GetDebugName() OVERRIDE { return "AudioNode"; }
+  std::string GetDebugName() override { return "AudioNode"; }
 
   AudioNodeInputVector inputs_;
   AudioNodeOutputVector outputs_;
diff --git a/src/cobalt/audio/audio_node_input_output_test.cc b/src/cobalt/audio/audio_node_input_output_test.cc
index d167bd9..612edaf 100644
--- a/src/cobalt/audio/audio_node_input_output_test.cc
+++ b/src/cobalt/audio/audio_node_input_output_test.cc
@@ -46,13 +46,13 @@
 
   // From AudioNode.
   scoped_ptr<ShellAudioBus> PassAudioBusFromSource(int32, /*number_of_frames*/
-                                                   SampleType) OVERRIDE {
+                                                   SampleType) override {
     NOTREACHED();
     return scoped_ptr<ShellAudioBus>();
   }
 
   // From AudioDevice::RenderCallback.
-  void FillAudioBus(ShellAudioBus* audio_bus, bool* silence) OVERRIDE {
+  void FillAudioBus(ShellAudioBus* audio_bus, bool* silence) override {
     AudioLock::AutoLock lock(audio_lock());
 
     // Destination node only has one input.
diff --git a/src/cobalt/base/c_val_test.cc b/src/cobalt/base/c_val_test.cc
index 9729480..7db3168 100644
--- a/src/cobalt/base/c_val_test.cc
+++ b/src/cobalt/base/c_val_test.cc
@@ -459,7 +459,7 @@
    public:
     TestOnChangedHook() : got_callback_(false) {}
     void OnValueChanged(const std::string& name,
-                        const base::CValGenericValue& value) OVERRIDE {
+                        const base::CValGenericValue& value) override {
       EXPECT_EQ(name, "S32");
       EXPECT_EQ(value.GetTypeId(), GetTypeId<int32_t>());
       EXPECT_EQ(value.IsNativeType<int32_t>(), true);
@@ -602,7 +602,7 @@
         thread_ready_event_(thread_ready_event),
         start_processing_event_(start_processing_event) {}
 
-  void Run() OVERRIDE {
+  void Run() override {
     thread_ready_event_->Signal();
     start_processing_event_->Wait();
 
@@ -640,7 +640,7 @@
         thread_ready_event_(thread_ready_event),
         start_processing_event_(start_processing_event) {}
 
-  void Run() OVERRIDE {
+  void Run() override {
     thread_ready_event_->Signal();
     start_processing_event_->Wait();
 
diff --git a/src/cobalt/base/clock.h b/src/cobalt/base/clock.h
index b3d418b..257c899 100644
--- a/src/cobalt/base/clock.h
+++ b/src/cobalt/base/clock.h
@@ -39,14 +39,39 @@
  public:
   SystemMonotonicClock() { origin_ = base::TimeTicks::HighResNow(); }
 
-  base::TimeDelta Now() OVERRIDE {
+  base::TimeDelta Now() override {
     return base::TimeTicks::HighResNow() - origin_;
   }
 
  private:
   base::TimeTicks origin_;
 
-  ~SystemMonotonicClock() OVERRIDE {}
+  ~SystemMonotonicClock() override {}
+};
+
+// The MinimumResolutionClock modifies the output of an existing clock by
+// clamping its minimum resolution to a predefined amount.  This is implemented
+// by rounding down the existing clock's time to the previous multiple of the
+// desired clock resolution.
+class MinimumResolutionClock : public Clock {
+ public:
+  MinimumResolutionClock(scoped_refptr<Clock> parent,
+                         const base::TimeDelta& min_resolution)
+      : parent_(parent),
+        min_resolution_in_microseconds_(min_resolution.InMicroseconds()) {
+    DCHECK(parent);
+  }
+
+  base::TimeDelta Now() override {
+    base::TimeDelta now = parent_->Now();
+    int64 microseconds = now.InMicroseconds();
+    return base::TimeDelta::FromMicroseconds(
+        microseconds - (microseconds % min_resolution_in_microseconds_));
+  }
+
+ private:
+  scoped_refptr<Clock> parent_;
+  const int64_t min_resolution_in_microseconds_;
 };
 
 // The OffsetClock takes a parent clock and an offset upon construction, and
@@ -59,12 +84,12 @@
     DCHECK(parent_);
   }
 
-  base::TimeDelta Now() OVERRIDE { return parent_->Now() - origin_; }
+  base::TimeDelta Now() override { return parent_->Now() - origin_; }
 
   base::TimeDelta origin() const { return origin_; }
 
  private:
-  ~OffsetClock() OVERRIDE {}
+  ~OffsetClock() override {}
 
   scoped_refptr<Clock> parent_;
   const base::TimeDelta origin_;
@@ -73,7 +98,7 @@
 // Simple clock that needs to be manually advanced.
 class ManualAdvanceClock : public base::Clock {
  public:
-  base::TimeDelta Now() OVERRIDE { return value_; }
+  base::TimeDelta Now() override { return value_; }
 
   void Advance(const base::TimeDelta& advance_amount) {
     DCHECK_GE(advance_amount, base::TimeDelta());
@@ -81,7 +106,7 @@
   }
 
  private:
-  ~ManualAdvanceClock() OVERRIDE {}
+  ~ManualAdvanceClock() override {}
 
   base::TimeDelta value_;
 };
diff --git a/src/cobalt/base/event.h b/src/cobalt/base/event.h
index b8ba6a6..1d76aa3 100644
--- a/src/cobalt/base/event.h
+++ b/src/cobalt/base/event.h
@@ -32,7 +32,7 @@
 
 #define BASE_EVENT_SUBCLASS(name)                                  \
   static base::TypeId TypeId() { return base::GetTypeId<name>(); } \
-  base::TypeId GetTypeId() const OVERRIDE { return TypeId(); }
+  base::TypeId GetTypeId() const override { return TypeId(); }
 
 }  // namespace base
 
diff --git a/src/cobalt/base/on_screen_keyboard_blurred_event.h b/src/cobalt/base/on_screen_keyboard_blurred_event.h
new file mode 100644
index 0000000..fc3ddd6
--- /dev/null
+++ b/src/cobalt/base/on_screen_keyboard_blurred_event.h
@@ -0,0 +1,37 @@
+// Copyright 2018 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_BASE_ON_SCREEN_KEYBOARD_BLURRED_EVENT_H_
+#define COBALT_BASE_ON_SCREEN_KEYBOARD_BLURRED_EVENT_H_
+
+#include "cobalt/base/event.h"
+#include "starboard/event.h"
+
+namespace base {
+
+class OnScreenKeyboardBlurredEvent : public Event {
+ public:
+  explicit OnScreenKeyboardBlurredEvent(int ticket) : ticket_(ticket) {}
+
+  int ticket() const { return ticket_; }
+
+  BASE_EVENT_SUBCLASS(OnScreenKeyboardBlurredEvent);
+
+ private:
+  int ticket_;
+};
+
+}  // namespace base
+
+#endif  // COBALT_BASE_ON_SCREEN_KEYBOARD_BLURRED_EVENT_H_
diff --git a/src/cobalt/base/on_screen_keyboard_focused_event.h b/src/cobalt/base/on_screen_keyboard_focused_event.h
new file mode 100644
index 0000000..359f65d
--- /dev/null
+++ b/src/cobalt/base/on_screen_keyboard_focused_event.h
@@ -0,0 +1,37 @@
+// Copyright 2018 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef COBALT_BASE_ON_SCREEN_KEYBOARD_FOCUSED_EVENT_H_
+#define COBALT_BASE_ON_SCREEN_KEYBOARD_FOCUSED_EVENT_H_
+
+#include "cobalt/base/event.h"
+#include "starboard/event.h"
+
+namespace base {
+
+class OnScreenKeyboardFocusedEvent : public Event {
+ public:
+  explicit OnScreenKeyboardFocusedEvent(int ticket) : ticket_(ticket) {}
+
+  int ticket() const { return ticket_; }
+
+  BASE_EVENT_SUBCLASS(OnScreenKeyboardFocusedEvent);
+
+ private:
+  int ticket_;
+};
+
+}  // namespace base
+
+#endif  // COBALT_BASE_ON_SCREEN_KEYBOARD_FOCUSED_EVENT_H_
diff --git a/src/cobalt/base/on_screen_keyboard_hidden_event.h b/src/cobalt/base/on_screen_keyboard_hidden_event.h
index 81539a9..a01e807 100644
--- a/src/cobalt/base/on_screen_keyboard_hidden_event.h
+++ b/src/cobalt/base/on_screen_keyboard_hidden_event.h
@@ -22,9 +22,14 @@
 
 class OnScreenKeyboardHiddenEvent : public Event {
  public:
-  OnScreenKeyboardHiddenEvent() {}
+  explicit OnScreenKeyboardHiddenEvent(int ticket) : ticket_(ticket) {}
+
+  int ticket() const { return ticket_; }
 
   BASE_EVENT_SUBCLASS(OnScreenKeyboardHiddenEvent);
+
+ private:
+  int ticket_;
 };
 
 }  // namespace base
diff --git a/src/cobalt/base/on_screen_keyboard_shown_event.h b/src/cobalt/base/on_screen_keyboard_shown_event.h
index b48f76a..fbcfc97 100644
--- a/src/cobalt/base/on_screen_keyboard_shown_event.h
+++ b/src/cobalt/base/on_screen_keyboard_shown_event.h
@@ -22,9 +22,14 @@
 
 class OnScreenKeyboardShownEvent : public Event {
  public:
-  OnScreenKeyboardShownEvent() {}
+  explicit OnScreenKeyboardShownEvent(int ticket) : ticket_(ticket) {}
+
+  int ticket() const { return ticket_; }
 
   BASE_EVENT_SUBCLASS(OnScreenKeyboardShownEvent);
+
+ private:
+  int ticket_;
 };
 
 }  // namespace base
diff --git a/src/cobalt/base/polymorphic_equatable.h b/src/cobalt/base/polymorphic_equatable.h
index f74bb7c..c9c7a42 100644
--- a/src/cobalt/base/polymorphic_equatable.h
+++ b/src/cobalt/base/polymorphic_equatable.h
@@ -39,16 +39,16 @@
 // PolymorphicEquatable type is unknown.  For any class T that is intended to be
 // a descendant of PolymorphicEquatable, it should call this macro in the public
 // section of its class declaration.
-#define DEFINE_POLYMORPHIC_EQUATABLE_TYPE(DerivedClassType)                   \
-  bool Equals(const PolymorphicEquatable& other) const OVERRIDE {             \
-    return base::GetTypeId<DerivedClassType>() == other.GetTypeId() &&        \
-           *this ==                                                           \
-           *base::polymorphic_downcast<const DerivedClassType*>(&other);      \
-  }                                                                           \
-                                                                              \
-  base::TypeId GetTypeId() const OVERRIDE {                                   \
-    return base::GetTypeId<DerivedClassType>();                               \
-  }                                                                           \
+#define DEFINE_POLYMORPHIC_EQUATABLE_TYPE(DerivedClassType)                  \
+  bool Equals(const PolymorphicEquatable& other) const override {            \
+    return base::GetTypeId<DerivedClassType>() == other.GetTypeId() &&       \
+           *this ==                                                          \
+               *base::polymorphic_downcast<const DerivedClassType*>(&other); \
+  }                                                                          \
+                                                                             \
+  base::TypeId GetTypeId() const override {                                  \
+    return base::GetTypeId<DerivedClassType>();                              \
+  }
 
 }  // namespace base
 
diff --git a/src/cobalt/bindings/contexts.py b/src/cobalt/bindings/contexts.py
index f1b9381..061a44d 100644
--- a/src/cobalt/bindings/contexts.py
+++ b/src/cobalt/bindings/contexts.py
@@ -32,6 +32,10 @@
 from v8_interface import method_overloads_by_name
 
 
+def is_date_type(idl_type):
+  return str(idl_type) == 'Date'
+
+
 def is_object_type(idl_type):
   return str(idl_type) == 'object'
 
@@ -266,6 +270,8 @@
       cobalt_type = self.idl_sequence_type_to_cobalt(idl_type)
     elif idl_type.name == 'void':
       cobalt_type = 'void'
+    elif is_date_type(idl_type):
+      cobalt_type = 'base::Time'
     elif is_object_type(idl_type):
       cobalt_type = '::cobalt::script::ValueHandle'
     elif is_any_type(idl_type):
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/derived_dictionary.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/derived_dictionary.h
index cd27ab6..beb3930 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/derived_dictionary.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/derived_dictionary.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h
index 02dbce6..b4737b0 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.cc
index 8d8e5b6..195c255 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::AnonymousIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousIndexedGetterInterface;
@@ -87,8 +90,13 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
 bool IsSupportedIndexProperty(JSContext* context, JS::HandleObject object,
                               uint32_t index) {
   WrapperPrivate* wrapper_private =
@@ -145,6 +153,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetIndexedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -184,6 +194,8 @@
   }
 }
 
+
+
 class MozjsAnonymousIndexedGetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsAnonymousIndexedGetterInterfaceHandler()
@@ -202,6 +214,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsAnonymousIndexedGetterInterfaceHandler::indexed_property_hooks = {
   IsSupportedIndexProperty,
@@ -214,6 +227,14 @@
 static base::LazyInstance<MozjsAnonymousIndexedGetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "AnonymousIndexedGetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -323,6 +344,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "length",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -337,6 +359,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -377,17 +400,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "AnonymousIndexedGetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "AnonymousIndexedGetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -493,8 +524,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.h
index a9d3262..4eece3b 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.cc
index f058a0f..b8dcd0c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::AnonymousNamedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousNamedGetterInterface;
@@ -87,8 +90,10 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
 bool IsSupportedNamedProperty(JSContext* context, JS::HandleObject object,
                               const std::string& property_name) {
   WrapperPrivate* wrapper_private =
@@ -145,6 +150,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetNamedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -186,6 +193,11 @@
   }
 }
 
+
+
+
+
+
 class MozjsAnonymousNamedGetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsAnonymousNamedGetterInterfaceHandler()
@@ -204,6 +216,7 @@
   SetNamedProperty,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsAnonymousNamedGetterInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -216,6 +229,14 @@
 static base::LazyInstance<MozjsAnonymousNamedGetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "AnonymousNamedGetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -277,6 +298,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -285,6 +307,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -325,17 +348,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "AnonymousNamedGetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "AnonymousNamedGetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -441,8 +472,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.h
index 898685e..1dbb74e 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.cc
index 5bae384..5440df3 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::AnonymousNamedIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousNamedIndexedGetterInterface;
@@ -87,8 +90,10 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
 bool IsSupportedNamedProperty(JSContext* context, JS::HandleObject object,
                               const std::string& property_name) {
   WrapperPrivate* wrapper_private =
@@ -145,6 +150,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetNamedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -186,6 +193,9 @@
   }
 }
 
+
+
+
 bool IsSupportedIndexProperty(JSContext* context, JS::HandleObject object,
                               uint32_t index) {
   WrapperPrivate* wrapper_private =
@@ -242,6 +252,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetIndexedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -281,6 +293,8 @@
   }
 }
 
+
+
 class MozjsAnonymousNamedIndexedGetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsAnonymousNamedIndexedGetterInterfaceHandler()
@@ -299,6 +313,7 @@
   SetNamedProperty,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsAnonymousNamedIndexedGetterInterfaceHandler::indexed_property_hooks = {
   IsSupportedIndexProperty,
@@ -311,6 +326,14 @@
 static base::LazyInstance<MozjsAnonymousNamedIndexedGetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "AnonymousNamedIndexedGetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -420,6 +443,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "length",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -434,6 +458,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -474,17 +499,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "AnonymousNamedIndexedGetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "AnonymousNamedIndexedGetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -590,8 +623,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.h
index 9af9715..d81008d 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_anonymous_named_indexed_getter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.cc
index b873842..62edaad 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsArbitraryInterfaceHandler : public ProxyHandler {
  public:
   MozjsArbitraryInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsArbitraryInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -278,6 +291,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_arbitraryFunction(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -327,6 +341,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "arbitraryProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -344,6 +359,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -384,17 +400,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ArbitraryInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ArbitraryInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -509,8 +533,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -523,6 +549,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.h
index d4eb685..d7875db 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_arbitrary_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.cc
index 3277ead..5a2159e 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::BaseInterface;
 using cobalt::bindings::testing::MozjsBaseInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsBaseInterfaceHandler : public ProxyHandler {
  public:
   MozjsBaseInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsBaseInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -226,6 +239,7 @@
 }
 
 
+
 bool fcn_baseOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -275,6 +289,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "baseAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -292,6 +307,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -332,17 +348,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "BaseInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "BaseInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -457,8 +481,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -471,6 +497,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.h
index f3428d9..b86268dd 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_base_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.cc
index 35f47c0..717325e 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::BooleanTypeTestInterface;
 using cobalt::bindings::testing::MozjsBooleanTypeTestInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsBooleanTypeTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsBooleanTypeTestInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsBooleanTypeTestInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsBooleanTypeTestInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "BooleanTypeTestInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -277,6 +296,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_booleanArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -341,6 +361,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_booleanReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -396,6 +417,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "booleanProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -416,6 +438,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -456,17 +479,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "BooleanTypeTestInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "BooleanTypeTestInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -572,8 +603,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.h
index f4fdff0..8fa6727 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_boolean_type_test_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.cc
index 129215d..d27a9aa 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::CallbackFunctionInterface;
 using cobalt::bindings::testing::MozjsCallbackFunctionInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsCallbackFunctionInterfaceHandler : public ProxyHandler {
  public:
   MozjsCallbackFunctionInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsCallbackFunctionInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsCallbackFunctionInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "CallbackFunctionInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -381,6 +400,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_takesFunctionThatReturnsString(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -445,6 +465,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_takesFunctionWithNullableParameters(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -509,6 +530,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_takesFunctionWithOneParameter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -573,6 +595,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_takesFunctionWithSeveralParameters(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -637,6 +660,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_takesVoidFunction(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -704,6 +728,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "callbackAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -739,6 +764,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -779,17 +805,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "CallbackFunctionInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "CallbackFunctionInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -895,8 +929,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.h
index e5518cc..1a6f3cd 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_function_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.cc
index ff95770..b430f43 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::CallbackInterfaceInterface;
 using cobalt::bindings::testing::MozjsCallbackInterfaceInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsCallbackInterfaceInterfaceHandler : public ProxyHandler {
  public:
   MozjsCallbackInterfaceInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsCallbackInterfaceInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsCallbackInterfaceInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "CallbackInterfaceInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -281,6 +300,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_registerCallback(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -345,6 +365,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_someOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -394,6 +415,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "callbackAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -414,6 +436,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -454,17 +477,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "CallbackInterfaceInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "CallbackInterfaceInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -570,8 +601,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.h
index 52691b3..b871871 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_callback_interface_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.cc
index 5149de4..07111cf 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ConditionalInterface;
 using cobalt::bindings::testing::MozjsConditionalInterface;
@@ -89,8 +92,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsConditionalInterfaceHandler : public ProxyHandler {
  public:
   MozjsConditionalInterfaceHandler()
@@ -109,6 +119,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsConditionalInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -121,6 +132,14 @@
 static base::LazyInstance<MozjsConditionalInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "ConditionalInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -384,6 +403,7 @@
 
 #endif  // NO_ENABLE_CONDITIONAL_PROPERTY
 #if defined(NO_ENABLE_CONDITIONAL_PROPERTY)
+
 bool fcn_disabledOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -432,6 +452,7 @@
 
 #endif  // NO_ENABLE_CONDITIONAL_PROPERTY
 #if defined(ENABLE_CONDITIONAL_PROPERTY)
+
 bool fcn_enabledOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -482,6 +503,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
 #if defined(ENABLE_CONDITIONAL_PROPERTY)
   {  // Read/Write property
     "enabledAttribute",
@@ -502,16 +524,12 @@
 };
 
 const JSFunctionSpec prototype_functions[] = {
-
 #if defined(NO_ENABLE_CONDITIONAL_PROPERTY)
-
   JS_FNSPEC(
       "disabledOperation", fcn_disabledOperation, NULL,
       0, JSPROP_ENUMERATE, NULL),
 #endif  // NO_ENABLE_CONDITIONAL_PROPERTY
-
 #if defined(ENABLE_CONDITIONAL_PROPERTY)
-
   JS_FNSPEC(
       "enabledOperation", fcn_enabledOperation, NULL,
       0, JSPROP_ENUMERATE, NULL),
@@ -520,6 +538,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -560,17 +579,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ConditionalInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ConditionalInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -676,8 +703,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.h
index c6121a0..d827418 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_conditional_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.cc
index eb073de..4f0a731 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ConstantsInterface;
 using cobalt::bindings::testing::MozjsConstantsInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsConstantsInterfaceHandler : public ProxyHandler {
  public:
   MozjsConstantsInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsConstantsInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,13 @@
 static base::LazyInstance<MozjsConstantsInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "ConstantsInterface is not constructible.");
+  return false;
+}
+
 bool get_INTEGER_CONSTANT(
     JSContext* context, unsigned argc, JS::Value* vp) {
   COMPILE_ASSERT(ConstantsInterface::kIntegerConstant == 5,
@@ -138,7 +156,6 @@
   }
   return !exception_state.is_exception_set();
 }
-
 bool get_DOUBLE_CONSTANT(
     JSContext* context, unsigned argc, JS::Value* vp) {
   DCHECK_EQ(2.718, ConstantsInterface::kDoubleConstant) <<
@@ -233,6 +250,7 @@
       { { &get_DOUBLE_CONSTANT, NULL } },
       JSNATIVE_WRAPPER(NULL)
   },
+
   JS_PS_END
 };
 
@@ -247,7 +265,6 @@
     { { &get_INTEGER_CONSTANT, NULL } },
     JSNATIVE_WRAPPER(NULL),
   },
-
   {
     "DOUBLE_CONSTANT",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -295,17 +312,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ConstantsInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ConstantsInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -411,8 +436,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.h
index 524ce81..dc2c614 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constants_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.cc
index 59b6267..be520b3 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ConstructorInterface;
 using cobalt::bindings::testing::MozjsConstructorInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsConstructorInterfaceHandler : public ProxyHandler {
  public:
   MozjsConstructorInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsConstructorInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -181,6 +194,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -189,6 +203,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -229,17 +244,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ConstructorInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ConstructorInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -354,8 +377,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 bool Constructor1(
     JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
@@ -369,7 +393,6 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
-
 bool Constructor2(
     JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
@@ -431,6 +454,8 @@
   exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
   return false;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.h
index dc1bf13..9d6115c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.cc
index 6d4747e..f99a86c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ConstructorWithArgumentsInterface;
 using cobalt::bindings::testing::MozjsConstructorWithArgumentsInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsConstructorWithArgumentsInterfaceHandler : public ProxyHandler {
  public:
   MozjsConstructorWithArgumentsInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsConstructorWithArgumentsInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -325,6 +338,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "longArg",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -351,6 +365,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -391,17 +406,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ConstructorWithArgumentsInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      2,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ConstructorWithArgumentsInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -516,8 +539,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -576,6 +601,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.h
index 242d58c..b87047f 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_constructor_with_arguments_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_dictionary.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_dictionary.cc
index de2c713..68c45e7 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_dictionary.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_dictionary.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.cc
index 4e37f83..beeed87 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::DerivedGetterSetterInterface;
 using cobalt::bindings::testing::MozjsDerivedGetterSetterInterface;
@@ -91,8 +94,10 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
 bool IsSupportedNamedProperty(JSContext* context, JS::HandleObject object,
                               const std::string& property_name) {
   WrapperPrivate* wrapper_private =
@@ -149,6 +154,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetNamedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -190,6 +197,9 @@
   }
 }
 
+
+
+
 bool IsSupportedIndexProperty(JSContext* context, JS::HandleObject object,
                               uint32_t index) {
   WrapperPrivate* wrapper_private =
@@ -246,6 +256,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetIndexedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -285,6 +297,8 @@
   }
 }
 
+
+
 class MozjsDerivedGetterSetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsDerivedGetterSetterInterfaceHandler()
@@ -303,6 +317,7 @@
   SetNamedProperty,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsDerivedGetterSetterInterfaceHandler::indexed_property_hooks = {
   IsSupportedIndexProperty,
@@ -315,6 +330,14 @@
 static base::LazyInstance<MozjsDerivedGetterSetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "DerivedGetterSetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -521,6 +544,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_derivedIndexedGetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -591,6 +615,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_derivedIndexedSetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -667,6 +692,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_operationOnDerivedClass(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -716,6 +742,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "length",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -745,6 +772,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -785,17 +813,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "DerivedGetterSetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "DerivedGetterSetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -901,8 +937,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.h
index 7bfb9f0..f51f744 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_getter_setter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.cc
index 6f9fb06..56b576d 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::DerivedInterface;
 using cobalt::bindings::testing::MozjsDerivedInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsDerivedInterfaceHandler : public ProxyHandler {
  public:
   MozjsDerivedInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsDerivedInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -124,6 +135,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -230,6 +243,7 @@
 }
 
 
+
 bool fcn_derivedOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -279,6 +293,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "derivedAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -296,6 +311,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -336,17 +352,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "DerivedInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "DerivedInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -461,8 +485,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -475,6 +501,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.h
index 8a66dc2..bc52580 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_derived_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.cc
index 8a170b0..af42eb9 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -50,6 +52,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::DictionaryInterface;
 using cobalt::bindings::testing::MozjsDictionaryInterface;
@@ -93,8 +96,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsDictionaryInterfaceHandler : public ProxyHandler {
  public:
   MozjsDictionaryInterfaceHandler()
@@ -113,6 +123,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsDictionaryInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -125,6 +136,14 @@
 static base::LazyInstance<MozjsDictionaryInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "DictionaryInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -283,6 +302,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_derivedDictionaryOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -347,6 +367,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_dictionaryOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -411,6 +432,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_testOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -478,6 +500,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "dictionarySequence",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -501,6 +524,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -541,17 +565,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "DictionaryInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "DictionaryInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -657,8 +689,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.h
index a84a61a..df1101e 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_with_dictionary_member.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_with_dictionary_member.cc
index 5d193d4..e4b23a6 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_with_dictionary_member.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dictionary_with_dictionary_member.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.cc
index 6d32fdc..be0503a 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::DisabledInterface;
 using cobalt::bindings::testing::MozjsDisabledInterface;
@@ -89,8 +92,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsDisabledInterfaceHandler : public ProxyHandler {
  public:
   MozjsDisabledInterfaceHandler()
@@ -109,6 +119,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsDisabledInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -121,6 +132,14 @@
 static base::LazyInstance<MozjsDisabledInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "DisabledInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -279,6 +298,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_disabledFunction(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -328,6 +348,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "disabledProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -345,6 +366,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -385,17 +407,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "DisabledInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "DisabledInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -501,8 +531,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.h
index 6c78cb5..b07b77d 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_disabled_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.cc
index 8958824..721d4ad 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::DOMStringTestInterface;
 using cobalt::bindings::testing::MozjsDOMStringTestInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsDOMStringTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsDOMStringTestInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsDOMStringTestInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsDOMStringTestInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "DOMStringTestInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -676,6 +695,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "property",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -720,6 +740,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -760,17 +781,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "DOMStringTestInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "DOMStringTestInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -876,8 +905,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.h
index 593f312..4cce520 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_dom_string_test_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.cc
index d8c8ddf..b6010a8 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -48,6 +50,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::EnumerationInterface;
 using cobalt::bindings::testing::MozjsEnumerationInterface;
@@ -89,8 +92,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsEnumerationInterfaceHandler : public ProxyHandler {
  public:
   MozjsEnumerationInterfaceHandler()
@@ -109,6 +119,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsEnumerationInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -122,6 +133,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -280,6 +293,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_optionalEnumWithDefault(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -345,6 +359,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "enumProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -362,6 +377,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -402,17 +418,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "EnumerationInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "EnumerationInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -527,8 +551,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -541,6 +567,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.h
index a628035..5b0bf43 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_enumeration_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.cc
index 5d41a65..93cc11b 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -48,6 +50,7 @@
 #include "third_party/mozjs-45/js/src/jsexn.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ExceptionObjectInterface;
 using cobalt::bindings::testing::MozjsExceptionObjectInterface;
@@ -88,8 +91,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsExceptionObjectInterfaceHandler : public ProxyHandler {
  public:
   MozjsExceptionObjectInterfaceHandler()
@@ -108,6 +118,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsExceptionObjectInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,14 @@
 static base::LazyInstance<MozjsExceptionObjectInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "ExceptionObjectInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -277,6 +296,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "error",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -297,6 +317,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -340,17 +361,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ExceptionObjectInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ExceptionObjectInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -456,8 +485,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.h
index 356189f..53e681f 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exception_object_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.cc
index ae894b0..5b2e7c3 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ExceptionsInterface;
 using cobalt::bindings::testing::MozjsExceptionsInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsExceptionsInterfaceHandler : public ProxyHandler {
  public:
   MozjsExceptionsInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsExceptionsInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -278,6 +291,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_functionThrowsException(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -327,6 +341,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "attributeThrowsException",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -344,6 +359,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -384,17 +400,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ExceptionsInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ExceptionsInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -509,8 +533,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -527,6 +553,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.h
index 405714a..eb0102c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_exceptions_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.cc
index 1e0ef66..fd4f75c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ExtendedIDLAttributesInterface;
 using cobalt::bindings::testing::MozjsExtendedIDLAttributesInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsExtendedIDLAttributesInterfaceHandler : public ProxyHandler {
  public:
   MozjsExtendedIDLAttributesInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsExtendedIDLAttributesInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsExtendedIDLAttributesInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "ExtendedIDLAttributesInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -277,6 +296,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_callWithSettings(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -325,6 +345,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_clampArgument(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -392,6 +413,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "default",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -412,6 +434,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -452,17 +475,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ExtendedIDLAttributesInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ExtendedIDLAttributesInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -568,8 +599,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.h
index d514e24..099629f 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_extended_idl_attributes_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.cc
index bc23f28..29c0d00 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::GarbageCollectionTestInterface;
 using cobalt::bindings::testing::MozjsGarbageCollectionTestInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsGarbageCollectionTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsGarbageCollectionTestInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsGarbageCollectionTestInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -124,6 +135,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -385,6 +398,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "previous",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -405,6 +419,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -445,17 +460,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "GarbageCollectionTestInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "GarbageCollectionTestInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -570,8 +593,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -584,6 +609,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.h
index eab1daf..a3f6063 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_garbage_collection_test_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.cc
index bd1c4f6..4d46379 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::GlobalInterfaceParent;
 using cobalt::bindings::testing::MozjsGlobalInterfaceParent;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsGlobalInterfaceParentHandler : public ProxyHandler {
  public:
   MozjsGlobalInterfaceParentHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsGlobalInterfaceParentHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsGlobalInterfaceParentHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "GlobalInterfaceParent is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -177,6 +196,7 @@
     NULL,
 };
 
+
 bool fcn_parentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -226,6 +246,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -237,6 +258,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -277,17 +299,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "GlobalInterfaceParent";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "GlobalInterfaceParent";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -393,8 +423,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.h
index 9356695..b585ff4 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_global_interface_parent.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.cc
index 77a6cac..87f1bdf 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::IndexedGetterInterface;
 using cobalt::bindings::testing::MozjsIndexedGetterInterface;
@@ -87,8 +90,13 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
 bool IsSupportedIndexProperty(JSContext* context, JS::HandleObject object,
                               uint32_t index) {
   WrapperPrivate* wrapper_private =
@@ -145,6 +153,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetIndexedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -184,6 +194,8 @@
   }
 }
 
+
+
 bool DeleteIndexedProperty(
     JSContext* context, JS::HandleObject object, uint32_t index) {
   MozjsExceptionState exception_state(context);
@@ -199,6 +211,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 class MozjsIndexedGetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsIndexedGetterInterfaceHandler()
@@ -217,6 +230,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsIndexedGetterInterfaceHandler::indexed_property_hooks = {
   IsSupportedIndexProperty,
@@ -229,6 +243,14 @@
 static base::LazyInstance<MozjsIndexedGetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "IndexedGetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -335,6 +357,7 @@
 }
 
 
+
 bool fcn_indexedDeleter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -399,6 +422,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_indexedGetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -469,6 +493,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_indexedSetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -548,6 +573,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "length",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -571,6 +597,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -611,17 +638,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "IndexedGetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "IndexedGetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -727,8 +762,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.h
index e19c857..a27b541 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_indexed_getter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.cc
index 941f391..0253e92 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::InterfaceWithAny;
 using cobalt::bindings::testing::MozjsInterfaceWithAny;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsInterfaceWithAnyHandler : public ProxyHandler {
  public:
   MozjsInterfaceWithAnyHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsInterfaceWithAnyHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -178,6 +191,7 @@
     Constructor,
 };
 
+
 bool fcn_getAny(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -230,6 +244,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setAny(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -297,6 +312,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -311,6 +327,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -351,17 +368,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "InterfaceWithAny";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "InterfaceWithAny";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -476,8 +501,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -490,6 +517,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.h
index 3eb84a4..dbcb260 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.cc
index 7c1d349..4e4587a 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::InterfaceWithAnyDictionary;
 using cobalt::bindings::testing::MozjsInterfaceWithAnyDictionary;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsInterfaceWithAnyDictionaryHandler : public ProxyHandler {
  public:
   MozjsInterfaceWithAnyDictionaryHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsInterfaceWithAnyDictionaryHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -178,6 +191,7 @@
     Constructor,
 };
 
+
 bool fcn_getAny(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -230,6 +244,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_hasAny(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -282,6 +297,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_hasAnyDefault(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -334,6 +350,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setAny(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -401,6 +418,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -421,6 +439,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -461,17 +480,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "InterfaceWithAnyDictionary";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "InterfaceWithAnyDictionary";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -586,8 +613,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -600,6 +629,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.h
index 8efc06e..78f43b1 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_any_dictionary.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_date.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_date.cc
new file mode 100644
index 0000000..165ab40
--- /dev/null
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_date.cc
@@ -0,0 +1,529 @@
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// clang-format off
+
+// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY!
+// Auto-generated from template: bindings/mozjs45/templates/interface.cc.template
+
+#include "cobalt/bindings/testing/mozjs_interface_with_date.h"
+
+#include "base/debug/trace_event.h"
+#include "cobalt/base/polymorphic_downcast.h"
+#include "cobalt/script/global_environment.h"
+#include "cobalt/script/script_value.h"
+#include "cobalt/script/value_handle.h"
+
+#include "mozjs_gen_type_conversion.h"
+
+#include "base/lazy_instance.h"
+#include "cobalt/script/exception_state.h"
+#include "cobalt/script/mozjs-45/callback_function_conversion.h"
+#include "cobalt/script/mozjs-45/conversion_helpers.h"
+#include "cobalt/script/mozjs-45/mozjs_callback_function.h"
+#include "cobalt/script/mozjs-45/mozjs_exception_state.h"
+#include "cobalt/script/mozjs-45/mozjs_global_environment.h"
+#include "cobalt/script/mozjs-45/mozjs_property_enumerator.h"
+#include "cobalt/script/mozjs-45/mozjs_user_object_holder.h"
+#include "cobalt/script/mozjs-45/mozjs_value_handle.h"
+#include "cobalt/script/mozjs-45/native_promise.h"
+#include "cobalt/script/mozjs-45/proxy_handler.h"
+#include "cobalt/script/mozjs-45/type_traits.h"
+#include "cobalt/script/mozjs-45/wrapper_factory.h"
+#include "cobalt/script/mozjs-45/wrapper_private.h"
+#include "cobalt/script/property_enumerator.h"
+#include "cobalt/script/sequence.h"
+#include "third_party/mozjs-45/js/src/jsapi.h"
+#include "third_party/mozjs-45/js/src/jsfriendapi.h"
+
+
+namespace {
+using cobalt::bindings::testing::InterfaceWithDate;
+using cobalt::bindings::testing::MozjsInterfaceWithDate;
+using cobalt::script::CallbackInterfaceTraits;
+using cobalt::script::GlobalEnvironment;
+using cobalt::script::ScriptValue;
+using cobalt::script::ValueHandle;
+using cobalt::script::ValueHandle;
+using cobalt::script::ValueHandleHolder;
+using cobalt::script::Wrappable;
+
+using cobalt::script::CallbackFunction;
+using cobalt::script::CallbackInterfaceTraits;
+using cobalt::script::ExceptionState;
+using cobalt::script::Wrappable;
+using cobalt::script::mozjs::FromJSValue;
+using cobalt::script::mozjs::InterfaceData;
+using cobalt::script::mozjs::MozjsCallbackFunction;
+using cobalt::script::mozjs::MozjsExceptionState;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
+using cobalt::script::mozjs::MozjsPropertyEnumerator;
+using cobalt::script::mozjs::MozjsUserObjectHolder;
+using cobalt::script::mozjs::ProxyHandler;
+using cobalt::script::mozjs::ToJSValue;
+using cobalt::script::mozjs::TypeTraits;
+using cobalt::script::mozjs::WrapperFactory;
+using cobalt::script::mozjs::WrapperPrivate;
+using cobalt::script::mozjs::kConversionFlagClamped;
+using cobalt::script::mozjs::kConversionFlagNullable;
+using cobalt::script::mozjs::kConversionFlagRestricted;
+using cobalt::script::mozjs::kConversionFlagTreatNullAsEmptyString;
+using cobalt::script::mozjs::kConversionFlagTreatUndefinedAsEmptyString;
+using cobalt::script::mozjs::kConversionFlagObjectOnly;
+using cobalt::script::mozjs::kNoConversionFlags;
+}  // namespace
+
+namespace cobalt {
+namespace bindings {
+namespace testing {
+
+
+namespace {
+
+
+
+
+
+
+
+class MozjsInterfaceWithDateHandler : public ProxyHandler {
+ public:
+  MozjsInterfaceWithDateHandler()
+      : ProxyHandler(indexed_property_hooks, named_property_hooks) {}
+
+ private:
+  static NamedPropertyHooks named_property_hooks;
+  static IndexedPropertyHooks indexed_property_hooks;
+};
+
+ProxyHandler::NamedPropertyHooks
+MozjsInterfaceWithDateHandler::named_property_hooks = {
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+};
+
+ProxyHandler::IndexedPropertyHooks
+MozjsInterfaceWithDateHandler::indexed_property_hooks = {
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+  NULL,
+};
+
+static base::LazyInstance<MozjsInterfaceWithDateHandler>
+    proxy_handler;
+
+bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
+bool HasInstance(JSContext *context, JS::HandleObject type,
+                   JS::MutableHandleValue vp, bool *success) {
+  JS::RootedObject global_object(
+      context, JS_GetGlobalForObject(context, type));
+  DCHECK(global_object);
+
+  JS::RootedObject prototype(
+      context, MozjsInterfaceWithDate::GetPrototype(context, global_object));
+
+  // |IsDelegate| walks the prototype chain of an object returning true if
+  // .prototype is found.
+  bool is_delegate;
+  if (!IsDelegate(context, prototype, vp, &is_delegate)) {
+    *success = false;
+    return false;
+  }
+
+  *success = is_delegate;
+  return true;
+}
+
+const JSClass instance_class_definition = {
+    "InterfaceWithDate",
+    0 | JSCLASS_HAS_PRIVATE,
+    NULL,  // addProperty
+    NULL,  // delProperty
+    NULL,  // getProperty
+    NULL,  // setProperty
+    NULL,  // enumerate
+    NULL,  // resolve
+    NULL,  // mayResolve
+    &WrapperPrivate::Finalizer,  // finalize
+    NULL,  // call
+    NULL,  // hasInstance
+    NULL,  // construct
+    &WrapperPrivate::Trace,  // trace
+};
+
+const JSClass prototype_class_definition = {
+    "InterfaceWithDatePrototype",
+};
+
+const JSClass interface_object_class_definition = {
+    "InterfaceWithDateConstructor",
+    0,
+    NULL,  // addProperty
+    NULL,  // delProperty
+    NULL,  // getProperty
+    NULL,  // setProperty
+    NULL,  // enumerate
+    NULL,  // resolve
+    NULL,  // mayResolve
+    NULL,  // finalize
+    NULL,  // call
+    &HasInstance,
+    Constructor,
+};
+
+
+bool fcn_getDate(
+    JSContext* context, uint32_t argc, JS::Value *vp) {
+  JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
+  // Compute the 'this' value.
+  JS::RootedValue this_value(context, JS_ComputeThis(context, vp));
+  // 'this' should be an object.
+  JS::RootedObject object(context);
+  if (JS_TypeOfValue(context, this_value) != JSTYPE_OBJECT) {
+    return false;
+  }
+  if (!JS_ValueToObject(context, this_value, &object)) {
+    NOTREACHED();
+    return false;
+  }
+  const JSClass* proto_class =
+      MozjsInterfaceWithDate::PrototypeClass(context);
+  if (proto_class == JS_GetClass(object)) {
+    // Simply returns true if the object is this class's prototype object.
+    // There is no need to return any value due to the object is not a platform
+    // object. The execution reaches here when Object.getOwnPropertyDescriptor
+    // gets called on native object prototypes.
+    return true;
+  }
+
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<InterfaceWithDate>())) {
+    MozjsExceptionState exception(context);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return false;
+  }
+  MozjsExceptionState exception_state(context);
+  JS::RootedValue result_value(context);
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromObject(context, object);
+  InterfaceWithDate* impl =
+      wrapper_private->wrappable<InterfaceWithDate>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(context,
+              impl->GetDate(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    args.rval().set(result_value);
+  }
+  return !exception_state.is_exception_set();
+}
+
+
+bool fcn_setDate(
+    JSContext* context, uint32_t argc, JS::Value *vp) {
+  JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
+  // Compute the 'this' value.
+  JS::RootedValue this_value(context, JS_ComputeThis(context, vp));
+  // 'this' should be an object.
+  JS::RootedObject object(context);
+  if (JS_TypeOfValue(context, this_value) != JSTYPE_OBJECT) {
+    return false;
+  }
+  if (!JS_ValueToObject(context, this_value, &object)) {
+    NOTREACHED();
+    return false;
+  }
+  const JSClass* proto_class =
+      MozjsInterfaceWithDate::PrototypeClass(context);
+  if (proto_class == JS_GetClass(object)) {
+    // Simply returns true if the object is this class's prototype object.
+    // There is no need to return any value due to the object is not a platform
+    // object. The execution reaches here when Object.getOwnPropertyDescriptor
+    // gets called on native object prototypes.
+    return true;
+  }
+
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<InterfaceWithDate>())) {
+    MozjsExceptionState exception(context);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return false;
+  }
+  MozjsExceptionState exception_state(context);
+  JS::RootedValue result_value(context);
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromObject(context, object);
+  InterfaceWithDate* impl =
+      wrapper_private->wrappable<InterfaceWithDate>().get();
+  const size_t kMinArguments = 1;
+  if (args.length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return false;
+  }
+  // Non-optional arguments
+  TypeTraits<base::Time >::ConversionType date;
+
+  DCHECK_LT(0, args.length());
+  JS::RootedValue non_optional_value0(
+      context, args[0]);
+  FromJSValue(context,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &date);
+  if (exception_state.is_exception_set()) {
+    return false;
+  }
+
+  impl->SetDate(date);
+  result_value.set(JS::UndefinedHandleValue);
+  return !exception_state.is_exception_set();
+}
+
+
+
+const JSPropertySpec prototype_properties[] = {
+
+  JS_PS_END
+};
+
+const JSFunctionSpec prototype_functions[] = {
+  JS_FNSPEC(
+      "getDate", fcn_getDate, NULL,
+      0, JSPROP_ENUMERATE, NULL),
+  JS_FNSPEC(
+      "setDate", fcn_setDate, NULL,
+      1, JSPROP_ENUMERATE, NULL),
+  JS_FS_END
+};
+
+const JSPropertySpec interface_object_properties[] = {
+
+  JS_PS_END
+};
+
+const JSFunctionSpec interface_object_functions[] = {
+  JS_FS_END
+};
+
+const JSPropertySpec own_properties[] = {
+  JS_PS_END
+};
+
+void InitializePrototypeAndInterfaceObject(
+    InterfaceData* interface_data, JSContext* context,
+    JS::HandleObject global_object) {
+  DCHECK(!interface_data->prototype);
+  DCHECK(!interface_data->interface_object);
+  DCHECK(JS_IsGlobalObject(global_object));
+
+  JS::RootedObject parent_prototype(
+      context, JS_GetObjectPrototype(context, global_object));
+  DCHECK(parent_prototype);
+
+  interface_data->prototype = JS_NewObjectWithGivenProto(
+    context, &prototype_class_definition, parent_prototype
+  );
+
+  JS::RootedObject rooted_prototype(context, interface_data->prototype);
+  bool success = JS_DefineProperties(
+      context,
+      rooted_prototype,
+      prototype_properties);
+
+  DCHECK(success);
+  success = JS_DefineFunctions(
+      context, rooted_prototype, prototype_functions);
+  DCHECK(success);
+
+  JS::RootedObject function_prototype(
+      context, JS_GetFunctionPrototype(context, global_object));
+  DCHECK(function_prototype);
+
+  const char name[] =
+      "InterfaceWithDate";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
+
+  // Add the InterfaceObject.name property.
+  JS::RootedObject rooted_interface_object(
+      context, interface_data->interface_object);
+  JS::RootedValue name_value(context);
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
+  name_value.setString(JS_NewStringCopyZ(context, name));
+  success = JS_DefineProperty(
+      context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
+      NULL, NULL);
+  DCHECK(success);
+
+  // Add the InterfaceObject.length property. It is set to the length of the
+  // shortest argument list of all overload constructors.
+  JS::RootedValue length_value(context);
+  length_value.setInt32(0);
+  success = JS_DefineProperty(
+      context, rooted_interface_object, "length", length_value,
+      JSPROP_READONLY, NULL, NULL);
+  DCHECK(success);
+
+  // Define interface object properties (including constants).
+  success = JS_DefineProperties(context, rooted_interface_object,
+                                interface_object_properties);
+  DCHECK(success);
+  // Define interface object functions (static).
+  success = JS_DefineFunctions(context, rooted_interface_object,
+                               interface_object_functions);
+  DCHECK(success);
+
+  // Set the Prototype.constructor and Constructor.prototype properties.
+  DCHECK(interface_data->interface_object);
+  DCHECK(interface_data->prototype);
+  success = JS_LinkConstructorAndPrototype(
+      context,
+      rooted_interface_object,
+      rooted_prototype);
+  DCHECK(success);
+}
+
+inline InterfaceData* GetInterfaceData(JSContext* context) {
+  const int kInterfaceUniqueId = 29;
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+  // By convention, the |MozjsGlobalEnvironment| that we are associated with
+  // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
+  // for it to be there in the first place, and could not have conflicted with
+  // any other interface.
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
+}
+
+}  // namespace
+
+// static
+JSObject* MozjsInterfaceWithDate::CreateProxy(
+    JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
+  JS::RootedObject global_object(
+      context,
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
+  DCHECK(global_object);
+
+  InterfaceData* interface_data = GetInterfaceData(context);
+  JS::RootedObject prototype(context, GetPrototype(context, global_object));
+  DCHECK(prototype);
+  JS::RootedObject new_object(
+      context,
+      JS_NewObjectWithGivenProto(
+          context, &instance_class_definition, prototype));
+  DCHECK(new_object);
+  JS::RootedObject proxy(context,
+      ProxyHandler::NewProxy(
+          context, proxy_handler.Pointer(), new_object, prototype));
+  WrapperPrivate::AddPrivateData(context, proxy, wrappable);
+  return proxy;
+}
+
+// static
+const JSClass* MozjsInterfaceWithDate::PrototypeClass(
+      JSContext* context) {
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
+  JS::RootedObject global_object(
+      context,
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
+  DCHECK(global_object);
+
+  JS::RootedObject prototype(context, GetPrototype(context, global_object));
+  const JSClass* proto_class = JS_GetClass(prototype);
+  return proto_class;
+}
+
+// static
+JSObject* MozjsInterfaceWithDate::GetPrototype(
+    JSContext* context, JS::HandleObject global_object) {
+  DCHECK(JS_IsGlobalObject(global_object));
+
+  InterfaceData* interface_data = GetInterfaceData(context);
+  if (!interface_data->prototype) {
+    // Create new prototype that has all the props and methods
+    InitializePrototypeAndInterfaceObject(
+        interface_data, context, global_object);
+  }
+  DCHECK(interface_data->prototype);
+  return interface_data->prototype;
+}
+
+// static
+JSObject* MozjsInterfaceWithDate::GetInterfaceObject(
+    JSContext* context, JS::HandleObject global_object) {
+  DCHECK(JS_IsGlobalObject(global_object));
+
+  InterfaceData* interface_data = GetInterfaceData(context);
+  if (!interface_data->interface_object) {
+    InitializePrototypeAndInterfaceObject(
+        interface_data, context, global_object);
+  }
+  DCHECK(interface_data->interface_object);
+  return interface_data->interface_object;
+}
+
+namespace {
+
+
+
+bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception_state(context);
+  JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
+
+  scoped_refptr<InterfaceWithDate> new_object =
+      new InterfaceWithDate();
+  JS::RootedValue result_value(context);
+  ToJSValue(context, new_object, &result_value);
+  DCHECK(result_value.isObject());
+  args.rval().setObject(result_value.toObject());
+  return true;
+}
+
+
+}  // namespace
+
+
+}  // namespace testing
+}  // namespace bindings
+}  // namespace cobalt
+
+
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_date.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_date.h
new file mode 100644
index 0000000..859d1bc
--- /dev/null
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_date.h
@@ -0,0 +1,52 @@
+// Copyright 2018 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+// clang-format off
+
+// This file has been auto-generated by bindings/code_generator_cobalt.py. DO NOT MODIFY!
+// Auto-generated from template: bindings/mozjs45/templates/interface.h.template
+
+#ifndef MozjsInterfaceWithDate_h
+#define MozjsInterfaceWithDate_h
+
+#include "base/hash_tables.h"
+#include "base/lazy_instance.h"
+#include "base/memory/ref_counted.h"
+#include "base/threading/thread_checker.h"
+#include "cobalt/base/polymorphic_downcast.h"
+#include "cobalt/script/wrappable.h"
+#include "cobalt/bindings/testing/interface_with_date.h"
+
+#include "third_party/mozjs-45/js/src/jsapi.h"
+
+namespace cobalt {
+namespace bindings {
+namespace testing {
+
+class MozjsInterfaceWithDate {
+ public:
+  static JSObject* CreateProxy(JSContext* context,
+      const scoped_refptr<script::Wrappable>& wrappable);
+  static const JSClass* PrototypeClass(JSContext* context);
+  static JSObject* GetPrototype(JSContext* context,
+                                JS::HandleObject global_object);
+  static JSObject* GetInterfaceObject(JSContext* context,
+                                      JS::HandleObject global_object);
+};
+
+}  // namespace testing
+}  // namespace bindings
+}  // namespace cobalt
+
+#endif  // MozjsInterfaceWithDate_h
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.cc
index 69406e6..6961c4b 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::InterfaceWithUnsupportedProperties;
 using cobalt::bindings::testing::MozjsInterfaceWithUnsupportedProperties;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsInterfaceWithUnsupportedPropertiesHandler : public ProxyHandler {
  public:
   MozjsInterfaceWithUnsupportedPropertiesHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsInterfaceWithUnsupportedPropertiesHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsInterfaceWithUnsupportedPropertiesHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "InterfaceWithUnsupportedProperties is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -228,6 +247,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "supportedAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -242,6 +262,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -282,17 +303,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "InterfaceWithUnsupportedProperties";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "InterfaceWithUnsupportedProperties";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -319,7 +348,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 29;
+  const int kInterfaceUniqueId = 30;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -398,8 +427,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.h
index 0a3ed0e..09defa1 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.cc
index e1f0dd7..c097e06 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NamedConstructorInterface;
 using cobalt::bindings::testing::MozjsNamedConstructorInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsNamedConstructorInterfaceHandler : public ProxyHandler {
  public:
   MozjsNamedConstructorInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNamedConstructorInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -120,6 +131,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -181,6 +194,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -189,6 +203,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -229,17 +244,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "SomeNamedConstructor";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "SomeNamedConstructor";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -275,7 +298,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 30;
+  const int kInterfaceUniqueId = 31;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -354,8 +377,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -368,6 +393,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.h
index 6878674..73447e5 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_constructor_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.cc
index 1ebe67d..90ae15d 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NamedGetterInterface;
 using cobalt::bindings::testing::MozjsNamedGetterInterface;
@@ -87,8 +90,10 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
 bool IsSupportedNamedProperty(JSContext* context, JS::HandleObject object,
                               const std::string& property_name) {
   WrapperPrivate* wrapper_private =
@@ -145,6 +150,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetNamedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -186,6 +193,8 @@
   }
 }
 
+
+
 bool DeleteNamedProperty(JSContext* context, JS::HandleObject object,
                          const std::string& property_name) {
   MozjsExceptionState exception_state(context);
@@ -201,6 +210,10 @@
   return !exception_state.is_exception_set();
 }
 
+
+
+
+
 class MozjsNamedGetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsNamedGetterInterfaceHandler()
@@ -219,6 +232,7 @@
   SetNamedProperty,
   DeleteNamedProperty,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNamedGetterInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -231,6 +245,14 @@
 static base::LazyInstance<MozjsNamedGetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NamedGetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -289,6 +311,7 @@
     NULL,
 };
 
+
 bool fcn_namedDeleter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -353,6 +376,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_namedGetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -423,6 +447,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_namedSetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -502,6 +527,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -519,6 +545,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -559,17 +586,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "NamedGetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "NamedGetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -596,7 +631,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 31;
+  const int kInterfaceUniqueId = 32;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -675,8 +710,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.h
index ad39584..411367d 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_getter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.cc
index fe2a9a0..6d5a610 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NamedIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsNamedIndexedGetterInterface;
@@ -87,8 +90,10 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
 bool IsSupportedNamedProperty(JSContext* context, JS::HandleObject object,
                               const std::string& property_name) {
   WrapperPrivate* wrapper_private =
@@ -145,6 +150,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetNamedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -186,6 +193,9 @@
   }
 }
 
+
+
+
 bool IsSupportedIndexProperty(JSContext* context, JS::HandleObject object,
                               uint32_t index) {
   WrapperPrivate* wrapper_private =
@@ -242,6 +252,8 @@
   return !exception_state.is_exception_set();
 }
 
+
+
 bool SetIndexedProperty(
   JSContext* context, JS::HandleObject object, JS::HandleId id,
   JS::MutableHandleValue vp, JS::ObjectOpResult& object_op_result) {
@@ -281,6 +293,8 @@
   }
 }
 
+
+
 class MozjsNamedIndexedGetterInterfaceHandler : public ProxyHandler {
  public:
   MozjsNamedIndexedGetterInterfaceHandler()
@@ -299,6 +313,7 @@
   SetNamedProperty,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNamedIndexedGetterInterfaceHandler::indexed_property_hooks = {
   IsSupportedIndexProperty,
@@ -311,6 +326,14 @@
 static base::LazyInstance<MozjsNamedIndexedGetterInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NamedIndexedGetterInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -517,6 +540,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_indexedGetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -587,6 +611,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_indexedSetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -663,6 +688,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_namedGetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -733,6 +759,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_namedSetter(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -809,6 +836,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_operationOnBaseClass(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -858,6 +886,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Readonly attribute
     "length",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -893,6 +922,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -933,17 +963,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "NamedIndexedGetterInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "NamedIndexedGetterInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -970,7 +1008,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 32;
+  const int kInterfaceUniqueId = 33;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -1049,8 +1087,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.h
index 7b0a4cc..33396d5 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_named_indexed_getter_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.cc
index 55d4725..04cc839 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NestedPutForwardsInterface;
 using cobalt::bindings::testing::MozjsNestedPutForwardsInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsNestedPutForwardsInterfaceHandler : public ProxyHandler {
  public:
   MozjsNestedPutForwardsInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNestedPutForwardsInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsNestedPutForwardsInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NestedPutForwardsInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -306,6 +325,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "nestedForwardingAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -320,6 +340,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -360,17 +381,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "NestedPutForwardsInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "NestedPutForwardsInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -397,7 +426,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 33;
+  const int kInterfaceUniqueId = 34;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -476,8 +505,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.h
index 24d94ce..5cf39ea 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nested_put_forwards_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.cc
index c02f954..2b3459a 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NoConstructorInterface;
 using cobalt::bindings::testing::MozjsNoConstructorInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsNoConstructorInterfaceHandler : public ProxyHandler {
  public:
   MozjsNoConstructorInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNoConstructorInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsNoConstructorInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NoConstructorInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -180,6 +199,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -188,6 +208,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -228,17 +249,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "NoConstructorInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "NoConstructorInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -265,7 +294,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 34;
+  const int kInterfaceUniqueId = 35;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -344,8 +373,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.h
index 311f249..5885a43 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_constructor_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.cc
index 354cf74..15b0fdf 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NoInterfaceObjectInterface;
 using cobalt::bindings::testing::MozjsNoInterfaceObjectInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsNoInterfaceObjectInterfaceHandler : public ProxyHandler {
  public:
   MozjsNoInterfaceObjectInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNoInterfaceObjectInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsNoInterfaceObjectInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NoInterfaceObjectInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -180,6 +199,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -188,6 +208,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -228,7 +249,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 35;
+  const int kInterfaceUniqueId = 36;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -295,6 +316,8 @@
 
 
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.h
index 150a9c3..003cf59 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_no_interface_object_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.cc
index 6b1d665..89b0ac0 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NullableTypesTestInterface;
 using cobalt::bindings::testing::MozjsNullableTypesTestInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsNullableTypesTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsNullableTypesTestInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNullableTypesTestInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsNullableTypesTestInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NullableTypesTestInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -581,6 +600,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableBooleanArgument(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -645,6 +665,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableBooleanOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -697,6 +718,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableNumericArgument(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -761,6 +783,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableNumericOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -813,6 +836,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableObjectArgument(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -877,6 +901,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableObjectOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -929,6 +954,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableStringArgument(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -993,6 +1019,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_nullableStringOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1048,6 +1075,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "nullableBooleanProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -1104,6 +1132,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -1144,17 +1173,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "NullableTypesTestInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "NullableTypesTestInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -1181,7 +1218,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 36;
+  const int kInterfaceUniqueId = 37;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -1260,8 +1297,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.h
index 22e7e83..9fc947f 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_nullable_types_test_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.cc
index 561aeaa..d86cd37 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::NumericTypesTestInterface;
 using cobalt::bindings::testing::MozjsNumericTypesTestInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsNumericTypesTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsNumericTypesTestInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsNumericTypesTestInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsNumericTypesTestInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "NumericTypesTestInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -1977,6 +1996,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_byteArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2041,6 +2061,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_byteReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2093,6 +2114,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_doubleArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2157,6 +2179,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_doubleReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2209,6 +2232,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_longArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2273,6 +2297,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_longLongArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2337,6 +2362,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_longLongReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2389,6 +2415,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_longReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2441,6 +2468,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_octetArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2505,6 +2533,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_octetReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2557,6 +2586,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_shortArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2621,6 +2651,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_shortReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2673,6 +2704,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unrestrictedDoubleArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2737,6 +2769,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unrestrictedDoubleReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2789,6 +2822,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unsignedLongArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2853,6 +2887,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unsignedLongLongArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2917,6 +2952,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unsignedLongLongReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -2969,6 +3005,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unsignedLongReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -3021,6 +3058,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unsignedShortArgumentOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -3085,6 +3123,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_unsignedShortReturnOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -3140,6 +3179,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "byteProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -3316,6 +3356,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -3356,17 +3397,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "NumericTypesTestInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "NumericTypesTestInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -3393,7 +3442,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 37;
+  const int kInterfaceUniqueId = 38;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -3472,8 +3521,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.h
index cba6d3e..4f24c48 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_numeric_types_test_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.cc
index b800056..9e10cc0 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -53,6 +55,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::ObjectTypeBindingsInterface;
 using cobalt::bindings::testing::MozjsObjectTypeBindingsInterface;
@@ -99,8 +102,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsObjectTypeBindingsInterfaceHandler : public ProxyHandler {
  public:
   MozjsObjectTypeBindingsInterfaceHandler()
@@ -119,6 +129,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsObjectTypeBindingsInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -131,6 +142,14 @@
 static base::LazyInstance<MozjsObjectTypeBindingsInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "ObjectTypeBindingsInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -540,6 +559,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "arbitraryObject",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -572,6 +592,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -612,17 +633,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "ObjectTypeBindingsInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "ObjectTypeBindingsInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -649,7 +678,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 38;
+  const int kInterfaceUniqueId = 39;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -728,8 +757,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.h
index 3707a86..ed6db0a 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_object_type_bindings_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.cc
index 607f7e8..6021a3f 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::OperationsTestInterface;
 using cobalt::bindings::testing::MozjsOperationsTestInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsOperationsTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsOperationsTestInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsOperationsTestInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsOperationsTestInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "OperationsTestInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -181,6 +200,7 @@
     NULL,
 };
 
+
 bool fcn_longFunctionNoArgs(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -233,6 +253,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_objectFunctionNoArgs(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -285,6 +306,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_optionalArgumentWithDefault(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -347,6 +369,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_optionalArguments(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -463,6 +486,7 @@
   }
 }
 
+
 bool fcn_optionalNullableArgumentsWithDefaults(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -584,7 +608,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool fcn_overloadedFunction2(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -648,7 +671,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool fcn_overloadedFunction3(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -712,7 +734,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool fcn_overloadedFunction4(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -800,7 +821,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool fcn_overloadedFunction5(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1022,7 +1042,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool fcn_overloadedNullable2(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1121,6 +1140,7 @@
   return false;
 }
 
+
 bool fcn_stringFunctionNoArgs(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1173,6 +1193,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_variadicPrimitiveArguments(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1239,6 +1260,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_variadicStringArgumentsAfterOptionalArgument(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1343,6 +1365,7 @@
   }
 }
 
+
 bool fcn_voidFunctionLongArg(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1407,6 +1430,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_voidFunctionNoArgs(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1453,6 +1477,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_voidFunctionObjectArg(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1517,6 +1542,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_voidFunctionStringArg(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1610,7 +1636,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool staticfcn_overloadedFunction2(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1687,6 +1712,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -1737,6 +1763,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -1780,17 +1807,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "OperationsTestInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "OperationsTestInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -1817,7 +1852,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 39;
+  const int kInterfaceUniqueId = 40;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -1896,8 +1931,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.h
index fda3317..07b1bac 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_operations_test_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.cc
index c720acf..b0dfda6 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::PromiseInterface;
 using cobalt::bindings::testing::MozjsPromiseInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsPromiseInterfaceHandler : public ProxyHandler {
  public:
   MozjsPromiseInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsPromiseInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsPromiseInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "PromiseInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -177,6 +196,7 @@
     NULL,
 };
 
+
 bool fcn_onSuccess(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -223,6 +243,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_returnBooleanPromise(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -275,6 +296,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_returnInterfacePromise(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -327,6 +349,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_returnStringPromise(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -379,6 +402,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_returnVoidPromise(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -434,6 +458,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -457,6 +482,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -497,17 +523,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "PromiseInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "PromiseInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -534,7 +568,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 40;
+  const int kInterfaceUniqueId = 41;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -613,8 +647,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.h
index 1b8d2f1..37ee79b 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_promise_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.cc
index f3ffe60..6f4c4f8 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::PutForwardsInterface;
 using cobalt::bindings::testing::MozjsPutForwardsInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsPutForwardsInterfaceHandler : public ProxyHandler {
  public:
   MozjsPutForwardsInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsPutForwardsInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsPutForwardsInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "PutForwardsInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -359,6 +378,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "forwardingAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -373,11 +393,12 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   {  // Static read/write attribute.
-      "staticForwardingAttribute",
-      JSPROP_SHARED | JSPROP_ENUMERATE,
-      { { &staticget_staticForwardingAttribute, NULL } },
-      { { &staticset_staticForwardingAttribute, NULL } },
+    "staticForwardingAttribute",
+    JSPROP_SHARED | JSPROP_ENUMERATE,
+    { { &staticget_staticForwardingAttribute, NULL } },
+    { { &staticset_staticForwardingAttribute, NULL } },
   },
   JS_PS_END
 };
@@ -419,17 +440,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "PutForwardsInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "PutForwardsInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -456,7 +485,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 41;
+  const int kInterfaceUniqueId = 42;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -535,8 +564,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.h
index 1a0e916..9b66d37 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_put_forwards_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.cc
index 81f0938..e55a911 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::SequenceUser;
 using cobalt::bindings::testing::MozjsSequenceUser;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsSequenceUserHandler : public ProxyHandler {
  public:
   MozjsSequenceUserHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsSequenceUserHandler::indexed_property_hooks = {
   NULL,
@@ -124,6 +135,8 @@
     proxy_handler;
 
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp);
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -182,6 +195,7 @@
     Constructor,
 };
 
+
 bool fcn_getInterfaceSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -234,6 +248,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getInterfaceSequenceSequenceSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -286,6 +301,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getLongSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -338,6 +354,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getStringSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -390,6 +407,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getStringSequenceSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -442,6 +460,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getUnionOfStringAndStringSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -494,6 +513,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getUnionSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -546,6 +566,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setInterfaceSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -610,6 +631,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setInterfaceSequenceSequenceSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -674,6 +696,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setLongSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -738,6 +761,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setStringSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -802,6 +826,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setStringSequenceSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -866,6 +891,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setUnionOfStringAndStringSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -930,6 +956,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setUnionSequence(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -997,6 +1024,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -1047,6 +1075,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -1087,17 +1116,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "SequenceUser";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      Constructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "SequenceUser";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -1133,7 +1170,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 42;
+  const int kInterfaceUniqueId = 43;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -1212,8 +1249,10 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
+
 bool Constructor(JSContext* context, unsigned int argc, JS::Value* vp) {
   MozjsExceptionState exception_state(context);
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -1226,6 +1265,8 @@
   args.rval().setObject(result_value.toObject());
   return true;
 }
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.h
index ad9ac5d..953bfd6 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_sequence_user.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.cc
index c12d824..afdd09c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.cc
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.h
index 9be2024..01fdd20 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_single_operation_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -40,7 +40,7 @@
   base::optional<int32_t > HandleCallback(
       const scoped_refptr<script::Wrappable>& callback_this,
       const scoped_refptr<ArbitraryInterface>& value,
-      bool* had_exception) const OVERRIDE;
+      bool* had_exception) const override;
   JSObject* handle() const { return implementing_object_.GetObject(); }
   const JS::Value& value() const { return implementing_object_.GetValue(); }
   bool WasCollected() const { return implementing_object_.WasCollected(); }
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.cc
index 2dabdcc..2e3a926 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -49,6 +51,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::StaticPropertiesInterface;
 using cobalt::bindings::testing::MozjsStaticPropertiesInterface;
@@ -91,8 +94,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsStaticPropertiesInterfaceHandler : public ProxyHandler {
  public:
   MozjsStaticPropertiesInterfaceHandler()
@@ -111,6 +121,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsStaticPropertiesInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -123,6 +134,14 @@
 static base::LazyInstance<MozjsStaticPropertiesInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "StaticPropertiesInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -245,7 +264,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool staticfcn_staticFunction2(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -275,7 +293,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool staticfcn_staticFunction3(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -305,7 +322,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool staticfcn_staticFunction4(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -359,7 +375,6 @@
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
-
 bool staticfcn_staticFunction5(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -487,6 +502,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -495,11 +511,12 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   {  // Static read/write attribute.
-      "staticAttribute",
-      JSPROP_SHARED | JSPROP_ENUMERATE,
-      { { &staticget_staticAttribute, NULL } },
-      { { &staticset_staticAttribute, NULL } },
+    "staticAttribute",
+    JSPROP_SHARED | JSPROP_ENUMERATE,
+    { { &staticget_staticAttribute, NULL } },
+    { { &staticset_staticAttribute, NULL } },
   },
   JS_PS_END
 };
@@ -544,17 +561,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "StaticPropertiesInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "StaticPropertiesInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -581,7 +606,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 44;
+  const int kInterfaceUniqueId = 45;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -660,8 +685,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.h
index 35eceb6..143c91a 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_static_properties_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.cc
index 8992fff..5d81015 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::StringifierAnonymousOperationInterface;
 using cobalt::bindings::testing::MozjsStringifierAnonymousOperationInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsStringifierAnonymousOperationInterfaceHandler : public ProxyHandler {
  public:
   MozjsStringifierAnonymousOperationInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsStringifierAnonymousOperationInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsStringifierAnonymousOperationInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "StringifierAnonymousOperationInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -238,8 +257,8 @@
   return true;
 }
 
-
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -249,6 +268,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -289,17 +309,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "StringifierAnonymousOperationInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "StringifierAnonymousOperationInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -326,7 +354,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 45;
+  const int kInterfaceUniqueId = 46;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -405,8 +433,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.h
index ade9f87..43f0b10 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_anonymous_operation_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.cc
index 4cfb373..27051e7 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::StringifierAttributeInterface;
 using cobalt::bindings::testing::MozjsStringifierAttributeInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsStringifierAttributeInterfaceHandler : public ProxyHandler {
  public:
   MozjsStringifierAttributeInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsStringifierAttributeInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsStringifierAttributeInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "StringifierAttributeInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -338,8 +357,8 @@
   return true;
 }
 
-
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "theStringifierAttribute",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -355,6 +374,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -395,17 +415,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "StringifierAttributeInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "StringifierAttributeInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -432,7 +460,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 46;
+  const int kInterfaceUniqueId = 47;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -511,8 +539,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.h
index 077f483..ab1e5f3 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_attribute_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.cc
index c537e6e..b041ca5 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::StringifierOperationInterface;
 using cobalt::bindings::testing::MozjsStringifierOperationInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsStringifierOperationInterfaceHandler : public ProxyHandler {
  public:
   MozjsStringifierOperationInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsStringifierOperationInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsStringifierOperationInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "StringifierOperationInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -177,6 +196,7 @@
     NULL,
 };
 
+
 bool fcn_theStringifierOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -290,8 +310,8 @@
   return true;
 }
 
-
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -304,6 +324,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -344,17 +365,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "StringifierOperationInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "StringifierOperationInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -381,7 +410,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 47;
+  const int kInterfaceUniqueId = 48;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -460,8 +489,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.h
index 689b56d..7b0d328 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_stringifier_operation_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.cc
index 7b49c6e..6337cbc 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -47,6 +49,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::TargetInterface;
 using cobalt::bindings::testing::MozjsTargetInterface;
@@ -87,8 +90,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsTargetInterfaceHandler : public ProxyHandler {
  public:
   MozjsTargetInterfaceHandler()
@@ -107,6 +117,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsTargetInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -119,6 +130,14 @@
 static base::LazyInstance<MozjsTargetInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "TargetInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -177,6 +196,7 @@
     NULL,
 };
 
+
 bool fcn_implementedInterfaceFunction(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -223,6 +243,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_partialInterfaceFunction(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -272,6 +293,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   JS_PS_END
 };
 
@@ -286,6 +308,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -326,17 +349,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "TargetInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "TargetInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -363,7 +394,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 48;
+  const int kInterfaceUniqueId = 49;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -442,8 +473,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.h
index 3ece885..6930f3e 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_target_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_dictionary.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_dictionary.cc
index 7e2bae0..9e98c40 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_dictionary.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_dictionary.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_enum.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_enum.cc
index 7aa9e08..a859d1c 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_enum.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_test_enum.cc
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.cc
index 7a46163..673f84e 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -51,6 +53,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::UnionTypesInterface;
 using cobalt::bindings::testing::MozjsUnionTypesInterface;
@@ -95,8 +98,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsUnionTypesInterfaceHandler : public ProxyHandler {
  public:
   MozjsUnionTypesInterfaceHandler()
@@ -115,6 +125,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsUnionTypesInterfaceHandler::indexed_property_hooks = {
   NULL,
@@ -127,6 +138,14 @@
 static base::LazyInstance<MozjsUnionTypesInterfaceHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "UnionTypesInterface is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -588,6 +607,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "unionProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -620,6 +640,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -660,17 +681,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "UnionTypesInterface";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "UnionTypesInterface";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -697,7 +726,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 50;
+  const int kInterfaceUniqueId = 51;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -776,8 +805,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.h
index 4a9550e..78c1264 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_union_types_interface.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.cc b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.cc
index c31604c..4a585c6 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.cc
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.cc
@@ -1,4 +1,6 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+
+
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -51,6 +53,7 @@
 #include "cobalt/bindings/testing/indexed_getter_interface.h"
 #include "cobalt/bindings/testing/interface_with_any.h"
 #include "cobalt/bindings/testing/interface_with_any_dictionary.h"
+#include "cobalt/bindings/testing/interface_with_date.h"
 #include "cobalt/bindings/testing/interface_with_unsupported_properties.h"
 #include "cobalt/bindings/testing/mozjs_anonymous_indexed_getter_interface.h"
 #include "cobalt/bindings/testing/mozjs_anonymous_named_getter_interface.h"
@@ -79,6 +82,7 @@
 #include "cobalt/bindings/testing/mozjs_indexed_getter_interface.h"
 #include "cobalt/bindings/testing/mozjs_interface_with_any.h"
 #include "cobalt/bindings/testing/mozjs_interface_with_any_dictionary.h"
+#include "cobalt/bindings/testing/mozjs_interface_with_date.h"
 #include "cobalt/bindings/testing/mozjs_interface_with_unsupported_properties.h"
 #include "cobalt/bindings/testing/mozjs_named_constructor_interface.h"
 #include "cobalt/bindings/testing/mozjs_named_getter_interface.h"
@@ -145,6 +149,7 @@
 #include "third_party/mozjs-45/js/src/jsapi.h"
 #include "third_party/mozjs-45/js/src/jsfriendapi.h"
 
+
 namespace {
 using cobalt::bindings::testing::Window;
 using cobalt::bindings::testing::MozjsWindow;
@@ -179,6 +184,7 @@
 using cobalt::bindings::testing::IndexedGetterInterface;
 using cobalt::bindings::testing::InterfaceWithAny;
 using cobalt::bindings::testing::InterfaceWithAnyDictionary;
+using cobalt::bindings::testing::InterfaceWithDate;
 using cobalt::bindings::testing::InterfaceWithUnsupportedProperties;
 using cobalt::bindings::testing::MozjsAnonymousIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousNamedGetterInterface;
@@ -211,6 +217,7 @@
 using cobalt::bindings::testing::MozjsIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsInterfaceWithAny;
 using cobalt::bindings::testing::MozjsInterfaceWithAnyDictionary;
+using cobalt::bindings::testing::MozjsInterfaceWithDate;
 using cobalt::bindings::testing::MozjsInterfaceWithUnsupportedProperties;
 using cobalt::bindings::testing::MozjsNamedConstructorInterface;
 using cobalt::bindings::testing::MozjsNamedGetterInterface;
@@ -296,8 +303,15 @@
 namespace bindings {
 namespace testing {
 
+
 namespace {
 
+
+
+
+
+
+
 class MozjsWindowHandler : public ProxyHandler {
  public:
   MozjsWindowHandler()
@@ -316,6 +330,7 @@
   NULL,
   NULL,
 };
+
 ProxyHandler::IndexedPropertyHooks
 MozjsWindowHandler::indexed_property_hooks = {
   NULL,
@@ -328,6 +343,14 @@
 static base::LazyInstance<MozjsWindowHandler>
     proxy_handler;
 
+bool DummyConstructor(JSContext* context, unsigned int argc, JS::Value* vp) {
+  MozjsExceptionState exception(context);
+  exception.SetSimpleException(
+      script::kTypeError, "Window is not constructible.");
+  return false;
+}
+
+
 bool HasInstance(JSContext *context, JS::HandleObject type,
                    JS::MutableHandleValue vp, bool *success) {
   JS::RootedObject global_object(
@@ -634,6 +657,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_getStackTrace(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -688,6 +712,7 @@
   return !exception_state.is_exception_set();
 }
 
+
 bool fcn_setTimeout(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -795,6 +820,7 @@
   }
 }
 
+
 bool fcn_windowOperation(
     JSContext* context, uint32_t argc, JS::Value *vp) {
   JS::CallArgs args = JS::CallArgsFromVp(argc, vp);
@@ -844,6 +870,7 @@
 
 
 const JSPropertySpec prototype_properties[] = {
+
   {  // Read/Write property
     "windowProperty",
     JSPROP_SHARED | JSPROP_ENUMERATE,
@@ -879,6 +906,7 @@
 };
 
 const JSPropertySpec interface_object_properties[] = {
+
   JS_PS_END
 };
 
@@ -919,17 +947,25 @@
   JS::RootedObject function_prototype(
       context, JS_GetFunctionPrototype(context, global_object));
   DCHECK(function_prototype);
-  // Create the Interface object.
-  interface_data->interface_object = JS_NewObjectWithGivenProto(
-      context, &interface_object_class_definition,
-      function_prototype);
+
+  const char name[] =
+      "Window";
+
+  JSFunction* function = js::NewFunctionWithReserved(
+      context,
+      DummyConstructor,
+      0,
+      JSFUN_CONSTRUCTOR,
+      name);
+  interface_data->interface_object = JS_GetFunctionObject(function);
 
   // Add the InterfaceObject.name property.
   JS::RootedObject rooted_interface_object(
       context, interface_data->interface_object);
   JS::RootedValue name_value(context);
-  const char name[] =
-      "Window";
+
+  js::SetPrototype(context, rooted_interface_object, function_prototype);
+
   name_value.setString(JS_NewStringCopyZ(context, name));
   success = JS_DefineProperty(
       context, rooted_interface_object, "name", name_value, JSPROP_READONLY,
@@ -956,7 +992,7 @@
 }
 
 inline InterfaceData* GetInterfaceData(JSContext* context) {
-  const int kInterfaceUniqueId = 52;
+  const int kInterfaceUniqueId = 53;
   MozjsGlobalEnvironment* global_environment =
       static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // By convention, the |MozjsGlobalEnvironment| that we are associated with
@@ -1010,6 +1046,7 @@
   global_environment->SetGlobalObjectProxyAndWrapper(proxy, wrappable);
   return proxy;
 }
+
 // static
 const JSClass* MozjsWindow::PrototypeClass(
       JSContext* context) {
@@ -1053,8 +1090,9 @@
   return interface_data->interface_object;
 }
 
-
 namespace {
+
+
 }  // namespace
 
 
@@ -1192,6 +1230,10 @@
       base::Bind(MozjsInterfaceWithAnyDictionary::CreateProxy),
       base::Bind(MozjsInterfaceWithAnyDictionary::PrototypeClass));
   wrapper_factory_->RegisterWrappableType(
+      InterfaceWithDate::InterfaceWithDateWrappableType(),
+      base::Bind(MozjsInterfaceWithDate::CreateProxy),
+      base::Bind(MozjsInterfaceWithDate::PrototypeClass));
+  wrapper_factory_->RegisterWrappableType(
       InterfaceWithUnsupportedProperties::InterfaceWithUnsupportedPropertiesWrappableType(),
       base::Bind(MozjsInterfaceWithUnsupportedProperties::CreateProxy),
       base::Bind(MozjsInterfaceWithUnsupportedProperties::PrototypeClass));
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.h
index 7b3caa0..a8cb938 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/mozjs_window.h
@@ -1,4 +1,4 @@
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_dictionary.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_dictionary.h
index 4ec2228..1989c88 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_dictionary.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_dictionary.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_enum.h b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_enum.h
index 5e4bb69..b688cc7 100644
--- a/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_enum.h
+++ b/src/cobalt/bindings/generated/mozjs45/testing/cobalt/bindings/testing/test_enum.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/derived_dictionary.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/derived_dictionary.h
index cd27ab6..beb3930 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/derived_dictionary.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/derived_dictionary.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h
index 02dbce6..b4737b0 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/dictionary_with_dictionary_member.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_dictionary.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_dictionary.h
index 4ec2228..1989c88 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_dictionary.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_dictionary.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_enum.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_enum.h
index 5e4bb69..b688cc7 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_enum.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/test_enum.h
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017 Google Inc. All Rights Reserved.
+ * Copyright 2018 Google Inc. All Rights Reserved.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.cc
index 2883330..7b85687 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -54,21 +55,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -82,105 +87,109 @@
 
 namespace {
 
-void AnonymousIndexedGetterInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
+
+
+void lengthAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<AnonymousIndexedGetterInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
     return;
   }
-
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
-}
-
-
-void v8cGet_length(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
-
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  AnonymousIndexedGetterInterface* impl = static_cast<AnonymousIndexedGetterInterface*>(wrapper_private->wrappable<AnonymousIndexedGetterInterface>());
-
+  V8cExceptionState exception_state{isolate};
   v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  AnonymousIndexedGetterInterface* impl =
+      wrapper_private->wrappable<AnonymousIndexedGetterInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->length(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
 }
 
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
-}
-
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "AnonymousIndexedGetterInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
+
 
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "length",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_length
+    lengthAttributeGetter
   );
 
 
-  interface_data->templ.Set(env->isolate(), function_template);
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 0;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cAnonymousIndexedGetterInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cAnonymousIndexedGetterInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cAnonymousIndexedGetterInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cAnonymousIndexedGetterInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.h
index 4031ab3..8d168df 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_indexed_getter_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cAnonymousIndexedGetterInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);
+  static v8::Local<v8::Object> GetInterfaceObject(v8::Isolate* isolate, v8::Local<v8::Object> global_object);
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.cc
index 2fed76f..587bce5 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -54,21 +55,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -82,84 +87,66 @@
 
 namespace {
 
-void AnonymousNamedGetterInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
-    return;
-  }
-
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
-}
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
-}
 
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "AnonymousNamedGetterInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
 
 
 
-  interface_data->templ.Set(env->isolate(), function_template);
+
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 1;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cAnonymousNamedGetterInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cAnonymousNamedGetterInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cAnonymousNamedGetterInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cAnonymousNamedGetterInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.h
index 6dfff10..6e3f21b 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_getter_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cAnonymousNamedGetterInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);
+  static v8::Local<v8::Object> GetInterfaceObject(v8::Isolate* isolate, v8::Local<v8::Object> global_object);
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.cc
index 44a8765..1d2d4c1 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -54,21 +55,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -82,105 +87,109 @@
 
 namespace {
 
-void AnonymousNamedIndexedGetterInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
+
+
+void lengthAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<AnonymousNamedIndexedGetterInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
     return;
   }
-
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
-}
-
-
-void v8cGet_length(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
-
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  AnonymousNamedIndexedGetterInterface* impl = static_cast<AnonymousNamedIndexedGetterInterface*>(wrapper_private->wrappable<AnonymousNamedIndexedGetterInterface>());
-
+  V8cExceptionState exception_state{isolate};
   v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  AnonymousNamedIndexedGetterInterface* impl =
+      wrapper_private->wrappable<AnonymousNamedIndexedGetterInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->length(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
 }
 
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
-}
-
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "AnonymousNamedIndexedGetterInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
+
 
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "length",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_length
+    lengthAttributeGetter
   );
 
 
-  interface_data->templ.Set(env->isolate(), function_template);
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 2;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cAnonymousNamedIndexedGetterInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cAnonymousNamedIndexedGetterInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cAnonymousNamedIndexedGetterInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cAnonymousNamedIndexedGetterInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.h
index 07a6fa9..59b1d60 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_anonymous_named_indexed_getter_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cAnonymousNamedIndexedGetterInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);
+  static v8::Local<v8::Object> GetInterfaceObject(v8::Isolate* isolate, v8::Local<v8::Object> global_object);
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.cc
index 33694aa..f644082 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -54,21 +55,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -82,131 +87,205 @@
 
 namespace {
 
-void ArbitraryInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
+
+
+void Constructor(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  V8cExceptionState exception_state(isolate);
+  if (!info.IsConstructCall()) {
+    exception_state.SetSimpleException(script::kTypeError, "Illegal constructor");
     return;
   }
 
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
-}
-
-
-void v8cGet_arbitraryProperty(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
-
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  ArbitraryInterface* impl = static_cast<ArbitraryInterface*>(wrapper_private->wrappable<ArbitraryInterface>());
-
+  scoped_refptr<ArbitraryInterface> new_object =
+      new ArbitraryInterface();
   v8::Local<v8::Value> result_value;
+  ToJSValue(isolate, new_object, &result_value);
+  DCHECK(result_value->IsObject());
+  info.GetReturnValue().Set(result_value);
 }
 
 
-void v8cSet_arbitraryProperty(
-  v8::Local<v8::String> property,
-  v8::Local<v8::Value> v8_value,
-  const v8::PropertyCallbackInfo<void>& info)
-{
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  ArbitraryInterface* impl = static_cast<ArbitraryInterface*>(wrapper_private->wrappable<ArbitraryInterface>());
+void arbitraryPropertyAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
 
-  TypeTraits<std::string>::ConversionType conversion_value;
-  V8cExceptionState exception_state{};
-  FromJSValue(info.GetIsolate(), v8_value, kNoConversionFlags, &exception_state, &conversion_value);
-  impl->set_arbitrary_property(
-    conversion_value
-  );
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<ArbitraryInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  ArbitraryInterface* impl =
+      wrapper_private->wrappable<ArbitraryInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->arbitrary_property(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
+}
+
+void arbitraryPropertyAttributeSetter(
+    v8::Local<v8::String> property,
+    v8::Local<v8::Value> v8_value,
+    const v8::PropertyCallbackInfo<void>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<ArbitraryInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  ArbitraryInterface* impl =
+      wrapper_private->wrappable<ArbitraryInterface>().get();
+  TypeTraits<std::string >::ConversionType value;
+  FromJSValue(isolate, v8_value, kNoConversionFlags, &exception_state,
+              &value);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
+
+  impl->set_arbitrary_property(value);
+  result_value = v8::Undefined(isolate);
+  return;
 }
 
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
+void arbitraryFunctionMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<ArbitraryInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  ArbitraryInterface* impl =
+      wrapper_private->wrappable<ArbitraryInterface>().get();
+
+  impl->ArbitraryFunction();
+  result_value = v8::Undefined(isolate);
+
 }
 
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "ArbitraryInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
+
 
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "arbitraryProperty",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_arbitraryProperty
-    ,v8cSet_arbitraryProperty
+    arbitraryPropertyAttributeGetter
+    ,arbitraryPropertyAttributeSetter
   );
 
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "arbitraryFunction",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, arbitraryFunctionMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "arbitraryFunction",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
 
-  interface_data->templ.Set(env->isolate(), function_template);
+
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 3;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cArbitraryInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cArbitraryInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cArbitraryInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cArbitraryInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.h
index fee3b78..89dfb9a 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_arbitrary_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cArbitraryInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);
+  static v8::Local<v8::Object> GetInterfaceObject(v8::Isolate* isolate, v8::Local<v8::Object> global_object);
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.cc
index ae6dbeb..fd2ca14 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -54,21 +55,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -82,112 +87,167 @@
 
 namespace {
 
-void BaseInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
+
+
+void Constructor(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  V8cExceptionState exception_state(isolate);
+  if (!info.IsConstructCall()) {
+    exception_state.SetSimpleException(script::kTypeError, "Illegal constructor");
     return;
   }
 
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
-}
-
-
-void v8cGet_baseAttribute(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
-
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  BaseInterface* impl = static_cast<BaseInterface*>(wrapper_private->wrappable<BaseInterface>());
-
+  scoped_refptr<BaseInterface> new_object =
+      new BaseInterface();
   v8::Local<v8::Value> result_value;
+  ToJSValue(isolate, new_object, &result_value);
+  DCHECK(result_value->IsObject());
+  info.GetReturnValue().Set(result_value);
+}
+
+
+void baseAttributeAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<BaseInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  BaseInterface* impl =
+      wrapper_private->wrappable<BaseInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->base_attribute(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
 }
 
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
+
+void baseOperationMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<BaseInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  BaseInterface* impl =
+      wrapper_private->wrappable<BaseInterface>().get();
+
+  impl->BaseOperation();
+  result_value = v8::Undefined(isolate);
+
 }
 
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "BaseInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
+
 
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "baseAttribute",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_baseAttribute
+    baseAttributeAttributeGetter
   );
 
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "baseOperation",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, baseOperationMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "baseOperation",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
 
-  interface_data->templ.Set(env->isolate(), function_template);
+
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 4;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cBaseInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cBaseInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cBaseInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cBaseInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.h
index 429707a..aaecf17 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_base_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cBaseInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);
+  static v8::Local<v8::Object> GetInterfaceObject(v8::Isolate* isolate, v8::Local<v8::Object> global_object);
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.cc
index 3885210..4425931 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -32,6 +32,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -54,21 +55,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -82,138 +87,251 @@
 
 namespace {
 
-void BooleanTypeTestInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
+
+
+void booleanPropertyAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<BooleanTypeTestInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  BooleanTypeTestInterface* impl =
+      wrapper_private->wrappable<BooleanTypeTestInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->boolean_property(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
+}
+
+void booleanPropertyAttributeSetter(
+    v8::Local<v8::String> property,
+    v8::Local<v8::Value> v8_value,
+    const v8::PropertyCallbackInfo<void>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<BooleanTypeTestInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  BooleanTypeTestInterface* impl =
+      wrapper_private->wrappable<BooleanTypeTestInterface>().get();
+  TypeTraits<bool >::ConversionType value;
+  FromJSValue(isolate, v8_value, kNoConversionFlags, &exception_state,
+              &value);
+  if (exception_state.is_exception_set()) {
     return;
   }
 
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
+  impl->set_boolean_property(value);
+  result_value = v8::Undefined(isolate);
+  return;
 }
 
 
-void v8cGet_booleanProperty(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
 
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  BooleanTypeTestInterface* impl = static_cast<BooleanTypeTestInterface*>(wrapper_private->wrappable<BooleanTypeTestInterface>());
-
+void booleanArgumentOperationMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<BooleanTypeTestInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
   v8::Local<v8::Value> result_value;
-}
 
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  BooleanTypeTestInterface* impl =
+      wrapper_private->wrappable<BooleanTypeTestInterface>().get();
+  const size_t kMinArguments = 1;
+  if (info.Length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return;
+  }
+  // Non-optional arguments
+  TypeTraits<bool >::ConversionType arg1;
+  DCHECK_LT(0, info.Length());
+  v8::Local<v8::Value> non_optional_value0 = info[0];
+  FromJSValue(isolate,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &arg1);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
 
-void v8cSet_booleanProperty(
-  v8::Local<v8::String> property,
-  v8::Local<v8::Value> v8_value,
-  const v8::PropertyCallbackInfo<void>& info)
-{
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  BooleanTypeTestInterface* impl = static_cast<BooleanTypeTestInterface*>(wrapper_private->wrappable<BooleanTypeTestInterface>());
+  impl->BooleanArgumentOperation(arg1);
+  result_value = v8::Undefined(isolate);
 
-  TypeTraits<bool>::ConversionType conversion_value;
-  V8cExceptionState exception_state{};
-  FromJSValue(info.GetIsolate(), v8_value, kNoConversionFlags, &exception_state, &conversion_value);
-  impl->set_boolean_property(
-    conversion_value
-  );
 }
 
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
+void booleanReturnOperationMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<BooleanTypeTestInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  BooleanTypeTestInterface* impl =
+      wrapper_private->wrappable<BooleanTypeTestInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->BooleanReturnOperation(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
+
 }
 
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "BooleanTypeTestInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
+
 
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "booleanProperty",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_booleanProperty
-    ,v8cSet_booleanProperty
+    booleanPropertyAttributeGetter
+    ,booleanPropertyAttributeSetter
   );
 
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "booleanArgumentOperation",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "booleanReturnOperation",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, booleanArgumentOperationMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "booleanArgumentOperation",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
 
-  interface_data->templ.Set(env->isolate(), function_template);
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, booleanReturnOperationMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "booleanReturnOperation",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
+
+
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 5;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cBooleanTypeTestInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cBooleanTypeTestInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cBooleanTypeTestInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cBooleanTypeTestInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.h
index 80ab3b1..d2af8d7 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_boolean_type_test_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cBooleanTypeTestInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);
+  static v8::Local<v8::Object> GetInterfaceObject(v8::Isolate* isolate, v8::Local<v8::Object> global_object);
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.cc b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.cc
index 0304336..74dbe19 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.cc
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.cc
@@ -1,6 +1,6 @@
 
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -34,6 +34,7 @@
 #include "cobalt/script/callback_interface_traits.h"
 #include "cobalt/script/v8c/callback_function_conversion.h"
 #include "cobalt/script/v8c/conversion_helpers.h"
+#include "cobalt/script/v8c/entry_scope.h"
 #include "cobalt/script/v8c/native_promise.h"
 #include "cobalt/script/v8c/type_traits.h"
 #include "cobalt/script/v8c/v8c_callback_function.h"
@@ -58,21 +59,25 @@
 using cobalt::script::ValueHandleHolder;
 using cobalt::script::Wrappable;
 
+using cobalt::script::v8c::EntryScope;
+using cobalt::script::v8c::EscapableEntryScope;
 using cobalt::script::v8c::FromJSValue;
 using cobalt::script::v8c::InterfaceData;
 using cobalt::script::v8c::kConversionFlagClamped;
 using cobalt::script::v8c::kConversionFlagNullable;
+using cobalt::script::v8c::kConversionFlagObjectOnly;
 using cobalt::script::v8c::kConversionFlagRestricted;
 using cobalt::script::v8c::kConversionFlagTreatNullAsEmptyString;
 using cobalt::script::v8c::kConversionFlagTreatUndefinedAsEmptyString;
 using cobalt::script::v8c::kNoConversionFlags;
+using cobalt::script::v8c::ToJSValue;
 using cobalt::script::v8c::TypeTraits;
 using cobalt::script::v8c::V8cExceptionState;
 using cobalt::script::v8c::V8cGlobalEnvironment;
 using cobalt::script::v8c::WrapperFactory;
 using cobalt::script::v8c::WrapperPrivate;
 
-v8::Local<v8::Object> DummyFunctor(V8cGlobalEnvironment*, const scoped_refptr<Wrappable>&) {
+v8::Local<v8::Object> DummyFunctor(v8::Isolate*, const scoped_refptr<Wrappable>&) {
   NOTIMPLEMENTED();
   return {};
 }
@@ -86,199 +91,513 @@
 
 namespace {
 
-void CallbackFunctionInterfaceConstructor(const v8::FunctionCallbackInfo<v8::Value>& args) {
-  NOTIMPLEMENTED();
-  if (!args.IsConstructCall()) {
-    // TODO: Probably throw something here...
+
+
+void callbackAttributeAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->callback_attribute(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
+}
+
+void callbackAttributeAttributeSetter(
+    v8::Local<v8::String> property,
+    v8::Local<v8::Value> v8_value,
+    const v8::PropertyCallbackInfo<void>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  TypeTraits<CallbackFunctionInterface::VoidFunction >::ConversionType value;
+  FromJSValue(isolate, v8_value, kNoConversionFlags, &exception_state,
+              &value);
+  if (exception_state.is_exception_set()) {
     return;
   }
 
-  DCHECK(args.This()->InternalFieldCount() == 1);
-  args.This()->SetInternalField(0, v8::External::New(args.GetIsolate(), nullptr));
-  args.GetReturnValue().Set(args.This());
+  impl->set_callback_attribute(value);
+  result_value = v8::Undefined(isolate);
+  return;
 }
 
+void nullableCallbackAttributeAttributeGetter(
+    v8::Local<v8::String> property, const v8::PropertyCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
 
-void v8cGet_callbackAttribute(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
 
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  CallbackFunctionInterface* impl = static_cast<CallbackFunctionInterface*>(wrapper_private->wrappable<CallbackFunctionInterface>());
-
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
   v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(isolate,
+              impl->nullable_callback_attribute(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    info.GetReturnValue().Set(result_value);
+  }
 }
 
+void nullableCallbackAttributeAttributeSetter(
+    v8::Local<v8::String> property,
+    v8::Local<v8::Value> v8_value,
+    const v8::PropertyCallbackInfo<void>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
 
-void v8cSet_callbackAttribute(
-  v8::Local<v8::String> property,
-  v8::Local<v8::Value> v8_value,
-  const v8::PropertyCallbackInfo<void>& info)
-{
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  CallbackFunctionInterface* impl = static_cast<CallbackFunctionInterface*>(wrapper_private->wrappable<CallbackFunctionInterface>());
-
-  TypeTraits<CallbackFunctionInterface::VoidFunction>::ConversionType conversion_value;
-  V8cExceptionState exception_state{};
-  FromJSValue(info.GetIsolate(), v8_value, kNoConversionFlags, &exception_state, &conversion_value);
-  impl->set_callback_attribute(
-    conversion_value
-  );
-}
-
-
-
-void v8cGet_nullableCallbackAttribute(
-  v8::Local<v8::String> property,
-  const v8::PropertyCallbackInfo<v8::Value>& info)
-{
-  NOTIMPLEMENTED();
-
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  CallbackFunctionInterface* impl = static_cast<CallbackFunctionInterface*>(wrapper_private->wrappable<CallbackFunctionInterface>());
-
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
   v8::Local<v8::Value> result_value;
-}
 
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  TypeTraits<CallbackFunctionInterface::VoidFunction >::ConversionType value;
+  FromJSValue(isolate, v8_value, (kConversionFlagNullable), &exception_state,
+              &value);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
 
-void v8cSet_nullableCallbackAttribute(
-  v8::Local<v8::String> property,
-  v8::Local<v8::Value> v8_value,
-  const v8::PropertyCallbackInfo<void>& info)
-{
-  v8::Local<v8::External> external = v8::Local<v8::External>::Cast(info.Holder()->GetInternalField(0));
-  WrapperPrivate* wrapper_private = static_cast<WrapperPrivate*>(external->Value());
-  CallbackFunctionInterface* impl = static_cast<CallbackFunctionInterface*>(wrapper_private->wrappable<CallbackFunctionInterface>());
-
-  TypeTraits<CallbackFunctionInterface::VoidFunction>::ConversionType conversion_value;
-  V8cExceptionState exception_state{};
-  FromJSValue(info.GetIsolate(), v8_value, (kConversionFlagNullable), &exception_state, &conversion_value);
-  impl->set_nullable_callback_attribute(
-    conversion_value
-  );
+  impl->set_nullable_callback_attribute(value);
+  result_value = v8::Undefined(isolate);
+  return;
 }
 
 
 
-void DummyFunction(const v8::FunctionCallbackInfo<v8::Value>& info) {
-  LOG(INFO) << __func__;
+void takesFunctionThatReturnsStringMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  const size_t kMinArguments = 1;
+  if (info.Length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return;
+  }
+  // Non-optional arguments
+  TypeTraits<CallbackFunctionInterface::FunctionThatReturnsString >::ConversionType cb;
+  DCHECK_LT(0, info.Length());
+  v8::Local<v8::Value> non_optional_value0 = info[0];
+  FromJSValue(isolate,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &cb);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
+
+  impl->TakesFunctionThatReturnsString(cb);
+  result_value = v8::Undefined(isolate);
+
 }
 
-void InitializeTemplate(
-  V8cGlobalEnvironment* env,
-  InterfaceData* interface_data) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(
-    isolate);
+
+
+void takesFunctionWithNullableParametersMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  const size_t kMinArguments = 1;
+  if (info.Length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return;
+  }
+  // Non-optional arguments
+  TypeTraits<CallbackFunctionInterface::FunctionWithNullableParameters >::ConversionType cb;
+  DCHECK_LT(0, info.Length());
+  v8::Local<v8::Value> non_optional_value0 = info[0];
+  FromJSValue(isolate,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &cb);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
+
+  impl->TakesFunctionWithNullableParameters(cb);
+  result_value = v8::Undefined(isolate);
+
+}
+
+
+
+void takesFunctionWithOneParameterMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  const size_t kMinArguments = 1;
+  if (info.Length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return;
+  }
+  // Non-optional arguments
+  TypeTraits<CallbackFunctionInterface::FunctionWithOneParameter >::ConversionType cb;
+  DCHECK_LT(0, info.Length());
+  v8::Local<v8::Value> non_optional_value0 = info[0];
+  FromJSValue(isolate,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &cb);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
+
+  impl->TakesFunctionWithOneParameter(cb);
+  result_value = v8::Undefined(isolate);
+
+}
+
+
+
+void takesFunctionWithSeveralParametersMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  const size_t kMinArguments = 1;
+  if (info.Length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return;
+  }
+  // Non-optional arguments
+  TypeTraits<CallbackFunctionInterface::FunctionWithSeveralParameters >::ConversionType cb;
+  DCHECK_LT(0, info.Length());
+  v8::Local<v8::Value> non_optional_value0 = info[0];
+  FromJSValue(isolate,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &cb);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
+
+  impl->TakesFunctionWithSeveralParameters(cb);
+  result_value = v8::Undefined(isolate);
+
+}
+
+
+
+void takesVoidFunctionMethod(const v8::FunctionCallbackInfo<v8::Value>& info) {
+  v8::Isolate* isolate = info.GetIsolate();
+  v8::Local<v8::Object> object = info.This();
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
+  if (!wrapper_factory->DoesObjectImplementInterface(
+        object, base::GetTypeId<CallbackFunctionInterface>())) {
+    V8cExceptionState exception(isolate);
+    exception.SetSimpleException(script::kDoesNotImplementInterface);
+    return;
+  }
+  V8cExceptionState exception_state{isolate};
+  v8::Local<v8::Value> result_value;
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromWrapperObject(object);
+  if (!wrapper_private) {
+    NOTIMPLEMENTED();
+    return;
+  }
+  CallbackFunctionInterface* impl =
+      wrapper_private->wrappable<CallbackFunctionInterface>().get();
+  const size_t kMinArguments = 1;
+  if (info.Length() < kMinArguments) {
+    exception_state.SetSimpleException(script::kInvalidNumberOfArguments);
+    return;
+  }
+  // Non-optional arguments
+  TypeTraits<CallbackFunctionInterface::VoidFunction >::ConversionType cb;
+  DCHECK_LT(0, info.Length());
+  v8::Local<v8::Value> non_optional_value0 = info[0];
+  FromJSValue(isolate,
+              non_optional_value0,
+              kNoConversionFlags,
+              &exception_state, &cb);
+  if (exception_state.is_exception_set()) {
+    return;
+  }
+
+  impl->TakesVoidFunction(cb);
+  result_value = v8::Undefined(isolate);
+
+}
+
+
+void InitializeTemplateAndInterfaceObject(v8::Isolate* isolate, InterfaceData* interface_data) {
+  v8::Local<v8::FunctionTemplate> function_template = v8::FunctionTemplate::New(isolate);
   function_template->SetClassName(
     v8::String::NewFromUtf8(isolate, "CallbackFunctionInterface",
         v8::NewStringType::kInternalized).ToLocalChecked());
   v8::Local<v8::ObjectTemplate> instance_template = function_template->InstanceTemplate();
-  instance_template->SetInternalFieldCount(1);
+  instance_template->SetInternalFieldCount(WrapperPrivate::kInternalFieldCount);
+
 
   v8::Local<v8::ObjectTemplate> prototype_template = function_template->PrototypeTemplate();
-  prototype_template->SetInternalFieldCount(1);
+
 
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "callbackAttribute",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_callbackAttribute
-    ,v8cSet_callbackAttribute
+    callbackAttributeAttributeGetter
+    ,callbackAttributeAttributeSetter
   );
   instance_template->SetAccessor(
     v8::String::NewFromUtf8(isolate, "nullableCallbackAttribute",
                               v8::NewStringType::kInternalized)
           .ToLocalChecked(),
-    v8cGet_nullableCallbackAttribute
-    ,v8cSet_nullableCallbackAttribute
+    nullableCallbackAttributeAttributeGetter
+    ,nullableCallbackAttributeAttributeSetter
   );
 
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "takesFunctionThatReturnsString",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "takesFunctionWithNullableParameters",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "takesFunctionWithOneParameter",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "takesFunctionWithSeveralParameters",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
-  instance_template->Set(
-      v8::String::NewFromUtf8(
-          isolate,
-          "takesVoidFunction",
-          v8::NewStringType::kInternalized).ToLocalChecked(),
-      v8::FunctionTemplate::New(isolate, DummyFunction)
-  );
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, takesFunctionThatReturnsStringMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "takesFunctionThatReturnsString",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
 
-  interface_data->templ.Set(env->isolate(), function_template);
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, takesFunctionWithNullableParametersMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "takesFunctionWithNullableParameters",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
+
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, takesFunctionWithOneParameterMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "takesFunctionWithOneParameter",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
+
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, takesFunctionWithSeveralParametersMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "takesFunctionWithSeveralParameters",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
+
+  {
+    v8::Local<v8::FunctionTemplate> method_template = v8::FunctionTemplate::New(isolate, takesVoidFunctionMethod);
+    method_template->RemovePrototype();
+    prototype_template->Set(
+        v8::String::NewFromUtf8(
+            isolate,
+            "takesVoidFunction",
+            v8::NewStringType::kInternalized).ToLocalChecked(),
+        method_template);
+  }
+
+
+  interface_data->function_template.Set(isolate, function_template);
 }
 
-inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* env) {
+inline InterfaceData* GetInterfaceData(V8cGlobalEnvironment* global_environment) {
   const int kInterfaceUniqueId = 6;
   // By convention, the |V8cGlobalEnvironment| that we are associated with
   // will hold our |InterfaceData| at index |kInterfaceUniqueId|, as we asked
   // for it to be there in the first place, and could not have conflicted with
   // any other interface.
-  return env->GetInterfaceData(kInterfaceUniqueId);
+  return global_environment->GetInterfaceData(kInterfaceUniqueId);
 }
 
 }  // namespace
 
-v8::Local<v8::Object> V8cCallbackFunctionInterface::CreateWrapper(V8cGlobalEnvironment* env, const scoped_refptr<Wrappable>& wrappable) {
-  v8::Isolate* isolate = env->isolate();
-  v8::Isolate::Scope isolate_scope(isolate);
-  v8::EscapableHandleScope handle_scope(isolate);
-  v8::Local<v8::Context> context = env->context();
-  v8::Context::Scope scope(context);
+v8::Local<v8::Object> V8cCallbackFunctionInterface::CreateWrapper(v8::Isolate* isolate, const scoped_refptr<Wrappable>& wrappable) {
+  EscapableEntryScope entry_scope(isolate);
+  v8::Local<v8::Context> context = isolate->GetCurrentContext();
 
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
-  DCHECK(!interface_data->templ.IsEmpty());
+  DCHECK(!interface_data->function_template.IsEmpty());
 
-  v8::Local<v8::FunctionTemplate> function_template = interface_data->templ.Get(isolate);
-  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == 1);
+  v8::Local<v8::FunctionTemplate> function_template = interface_data->function_template.Get(isolate);
+  DCHECK(function_template->InstanceTemplate()->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
   v8::Local<v8::Object> object = function_template->InstanceTemplate()->NewInstance(context).ToLocalChecked();
-  DCHECK(object->InternalFieldCount() == 1);
+  DCHECK(object->InternalFieldCount() == WrapperPrivate::kInternalFieldCount);
 
-  // |WrapperPrivate|'s lifetime will be managed by V8.
+  // This |WrapperPrivate|'s lifetime will be managed by V8.
   new WrapperPrivate(isolate, wrappable, object);
-  return handle_scope.Escape(object);
+  return entry_scope.Escape(object);
 }
 
-v8::Local<v8::FunctionTemplate> V8cCallbackFunctionInterface::CreateTemplate(V8cGlobalEnvironment* env) {
-  InterfaceData* interface_data = GetInterfaceData(env);
-  if (interface_data->templ.IsEmpty()) {
-    InitializeTemplate(env, interface_data);
+v8::Local<v8::FunctionTemplate> V8cCallbackFunctionInterface::CreateTemplate(v8::Isolate* isolate) {
+  V8cGlobalEnvironment* global_environment = V8cGlobalEnvironment::GetFromIsolate(isolate);
+  InterfaceData* interface_data = GetInterfaceData(global_environment);
+  if (interface_data->function_template.IsEmpty()) {
+    InitializeTemplateAndInterfaceObject(isolate, interface_data);
   }
 
-  return interface_data->templ.Get(env->isolate());
+  return interface_data->function_template.Get(isolate);
 }
 
 
diff --git a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.h b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.h
index 5fcc5da..a6cf0f1 100644
--- a/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.h
+++ b/src/cobalt/bindings/generated/v8c/testing/cobalt/bindings/testing/v8c_callback_function_interface.h
@@ -1,5 +1,5 @@
 
-// Copyright 2017 Google Inc. All Rights Reserved.
+// Copyright 2018 Google Inc. All Rights Reserved.
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -38,9 +38,9 @@
 
 class V8cCallbackFunctionInterface {
  public:
-  static v8::Local<v8::Object> CreateWrapper(script::v8c::V8cGlobalEnvironment* env, const scoped_refptr<script::Wrappable>& wrappable);
-  static v8::Local<v8::FunctionTemplate> CreateTemplate(script::v8c::V8cGlobalEnvironment* env);
-  // TODO: Add |GetInterfaceObject|.
+  static v8::Local<v8::Object> CreateWrapper(v8::Isolate* isolate, const scoped_refptr<script::Wrappable>& wrappable);
+  static v8::Local<v8::FunctionTemplate> CreateTemplate(v8::Isolate* isolate);