diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc
index 50d42d0..5eedc39 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousIndexedGetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::AnonymousIndexedGetterInterface;
 using cobalt::bindings::testing::JSCAnonymousIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc
index 9aea555..6609882 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedGetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/jsc_property_enumerator.h"
@@ -55,7 +55,7 @@
 using cobalt::bindings::testing::AnonymousNamedGetterInterface;
 using cobalt::bindings::testing::JSCAnonymousNamedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,18 +75,18 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSCPropertyEnumerator;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc
index 9bc585c..c480879 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCAnonymousNamedIndexedGetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/jsc_property_enumerator.h"
@@ -55,7 +55,7 @@
 using cobalt::bindings::testing::AnonymousNamedIndexedGetterInterface;
 using cobalt::bindings::testing::JSCAnonymousNamedIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,18 +75,18 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSCPropertyEnumerator;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc
index f76b17c..eca2811 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCArbitraryInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc
index 44ab166..a213d74 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCBaseInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::BaseInterface;
 using cobalt::bindings::testing::JSCBaseInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc
index f43fee7..2475f5c 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCBooleanTypeTestInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::BooleanTypeTestInterface;
 using cobalt::bindings::testing::JSCBooleanTypeTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc
index 166d3b5..76a3234 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackFunctionInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc
index 389cc42..9341213 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCCallbackInterfaceInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCSingleOperationInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::JSCSingleOperationInterface;
 using cobalt::bindings::testing::SingleOperationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc
index d33347b..0089ce1 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCConditionalInterface.cc
@@ -27,7 +27,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -56,7 +56,7 @@
 using cobalt::bindings::testing::ConditionalInterface;
 using cobalt::bindings::testing::JSCConditionalInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -76,17 +76,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc
index 9349ec7..5d3edd7 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCConstantsInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::ConstantsInterface;
 using cobalt::bindings::testing::JSCConstantsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc
index 469ad81..6b3a7b5 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::ConstructorInterface;
 using cobalt::bindings::testing::JSCConstructorInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc
index 5bd8415..7b6daf2 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCConstructorWithArgumentsInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::ConstructorWithArgumentsInterface;
 using cobalt::bindings::testing::JSCConstructorWithArgumentsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc
index 6db2e1d..548363d 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCDOMStringTestInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::DOMStringTestInterface;
 using cobalt::bindings::testing::JSCDOMStringTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc
index dea3e49..232db13 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedGetterSetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/jsc_property_enumerator.h"
@@ -55,7 +55,7 @@
 using cobalt::bindings::testing::DerivedGetterSetterInterface;
 using cobalt::bindings::testing::JSCDerivedGetterSetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,18 +75,18 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSCPropertyEnumerator;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc
index 5a523e7..593115f 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCDerivedInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::DerivedInterface;
 using cobalt::bindings::testing::JSCDerivedInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc
index 509c844..5777066 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCDisabledInterface.cc
@@ -27,7 +27,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -56,7 +56,7 @@
 using cobalt::bindings::testing::DisabledInterface;
 using cobalt::bindings::testing::JSCDisabledInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -76,17 +76,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc
index ef85297..71cdd9c 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCEnumerationInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::EnumerationInterface;
 using cobalt::bindings::testing::JSCEnumerationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc
index c3da33c..181d9cd 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionObjectInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -55,7 +55,7 @@
 using cobalt::bindings::testing::ExceptionObjectInterface;
 using cobalt::bindings::testing::JSCExceptionObjectInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,17 +75,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc
index 52ff3d2..85d38bf 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCExceptionsInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::ExceptionsInterface;
 using cobalt::bindings::testing::JSCExceptionsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc
index 9a96bbb..76d5efe 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCExtendedIDLAttributesInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::ExtendedIDLAttributesInterface;
 using cobalt::bindings::testing::JSCExtendedIDLAttributesInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc
index 1be5fcd..baad3b5 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCGarbageCollectionTestInterface.cc
@@ -25,9 +25,11 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
+#include "JSCGarbageCollectionTestInterface.h"
+#include "cobalt/bindings/testing/garbage_collection_test_interface.h"
 
 #include "cobalt/script/javascriptcore/constructor_base.h"
 #include "cobalt/script/javascriptcore/conversion_helpers.h"
@@ -35,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -53,8 +55,10 @@
 namespace {
 using cobalt::bindings::testing::GarbageCollectionTestInterface;
 using cobalt::bindings::testing::JSCGarbageCollectionTestInterface;
+using cobalt::bindings::testing::GarbageCollectionTestInterface;
+using cobalt::bindings::testing::JSCGarbageCollectionTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
@@ -95,6 +99,22 @@
 namespace testing {
 
 namespace {
+JSC::JSValue getJSprevious(
+    JSC::ExecState* exec_state,
+    JSC::JSValue slot_base,
+    JSC::PropertyName property_name);
+void setJSprevious(
+    JSC::ExecState* exec,
+    JSC::JSObject* this_object,
+    JSC::JSValue value);
+JSC::JSValue getJSnext(
+    JSC::ExecState* exec_state,
+    JSC::JSValue slot_base,
+    JSC::PropertyName property_name);
+void setJSnext(
+    JSC::ExecState* exec,
+    JSC::JSObject* this_object,
+    JSC::JSValue value);
 JSC::EncodedJSValue constructorJSGarbageCollectionTestInterface(JSC::ExecState*);
 
 // These are declared unconditionally, but only defined if needed by the
@@ -119,6 +139,13 @@
 #else
 const bool s_use_debug_missing_property_handler = false;
 #endif
+scoped_refptr<Wrappable> GetOpaqueRootFromWrappable(
+    const scoped_refptr<Wrappable>& wrappable) {
+  GarbageCollectionTestInterface* impl =
+      base::polymorphic_downcast<GarbageCollectionTestInterface*>(wrappable.get());
+  Wrappable* opaque_root = impl->GetHead();
+  return make_scoped_refptr<Wrappable>(opaque_root);
+}
 }  // namespace
 
 // Class that defines a JS Object representing this interface's Interface Object
@@ -396,13 +423,25 @@
 // End of JSCGarbageCollectionTestInterface::Prototype class
 
 const JSC::HashTableValue JSCGarbageCollectionTestInterface::property_table_values[] = {
+    { "previous",
+        JSC::DontDelete ,
+        reinterpret_cast<intptr_t>(getJSprevious),
+        reinterpret_cast<intptr_t>(setJSprevious),
+        JSC::NoIntrinsic
+    },
+    { "next",
+        JSC::DontDelete ,
+        reinterpret_cast<intptr_t>(getJSnext),
+        reinterpret_cast<intptr_t>(setJSnext),
+        JSC::NoIntrinsic
+    },
     { 0, 0, 0, 0, static_cast<JSC::Intrinsic>(0) }
 };  // JSCGarbageCollectionTestInterface::property_table_values
 
 // static
 const JSC::HashTable JSCGarbageCollectionTestInterface::property_table_prototype = {
-    2,  // compactSize
-    1,  // compactSizeMask
+    9,  // compactSize
+    7,  // compactSizeMask
     property_table_values,
     NULL  // table allocated at runtime
 };  // JSCGarbageCollectionTestInterface::property_table_prototype
@@ -491,6 +530,7 @@
     ScriptObjectRegistry* script_object_registry,
     const scoped_refptr<GarbageCollectionTestInterface>& impl)
     : BaseClass(global_data, structure, script_object_registry, impl) {
+  set_get_opaque_root_function(base::Bind(&GetOpaqueRootFromWrappable));
 }
 
 void JSCGarbageCollectionTestInterface::finishCreation(JSC::JSGlobalData& global_data) {
@@ -606,6 +646,98 @@
 
 namespace {
 
+JSC::JSValue getJSprevious(
+    JSC::ExecState* exec_state,
+    JSC::JSValue slot_base,
+    JSC::PropertyName property_name) {
+  TRACE_EVENT0("JSCGarbageCollectionTestInterface", "get previous");
+  JSCGlobalObject* global_object =
+      JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject());
+  GarbageCollectionTestInterface* impl =
+      GetWrappableOrSetException<GarbageCollectionTestInterface>(exec_state, slot_base);
+  if (!impl) {
+    return exec_state->exception();
+  }
+
+  JSC::JSValue result = ToJSValue(
+      global_object,
+      impl->previous());
+  return result;
+}
+
+void setJSprevious(
+    JSC::ExecState* exec_state,
+    JSC::JSObject* this_object,
+    JSC::JSValue value) {
+  TRACE_EVENT0("JSCGarbageCollectionTestInterface", "set previous");
+  JSCGlobalObject* global_object =
+      JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject());
+  JSCExceptionState exception_state(global_object);
+  GarbageCollectionTestInterface* impl =
+      GetWrappableOrSetException<GarbageCollectionTestInterface>(exec_state, this_object);
+  if (!impl) {
+    return;
+  }
+  TypeTraits<scoped_refptr<GarbageCollectionTestInterface> >::ConversionType cobalt_value;
+  FromJSValue(exec_state, value,
+      (kConversionFlagNullable), &exception_state,
+      &cobalt_value);
+  if (exception_state.is_exception_set()) {
+    JSC::throwError(exec_state, exception_state.exception_object());
+    return;
+  }
+  // Check if argument conversion raised an exception.
+  if (!exec_state->hadException()) {
+    impl->set_previous(cobalt_value);
+  }
+}
+
+JSC::JSValue getJSnext(
+    JSC::ExecState* exec_state,
+    JSC::JSValue slot_base,
+    JSC::PropertyName property_name) {
+  TRACE_EVENT0("JSCGarbageCollectionTestInterface", "get next");
+  JSCGlobalObject* global_object =
+      JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject());
+  GarbageCollectionTestInterface* impl =
+      GetWrappableOrSetException<GarbageCollectionTestInterface>(exec_state, slot_base);
+  if (!impl) {
+    return exec_state->exception();
+  }
+
+  JSC::JSValue result = ToJSValue(
+      global_object,
+      impl->next());
+  return result;
+}
+
+void setJSnext(
+    JSC::ExecState* exec_state,
+    JSC::JSObject* this_object,
+    JSC::JSValue value) {
+  TRACE_EVENT0("JSCGarbageCollectionTestInterface", "set next");
+  JSCGlobalObject* global_object =
+      JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject());
+  JSCExceptionState exception_state(global_object);
+  GarbageCollectionTestInterface* impl =
+      GetWrappableOrSetException<GarbageCollectionTestInterface>(exec_state, this_object);
+  if (!impl) {
+    return;
+  }
+  TypeTraits<scoped_refptr<GarbageCollectionTestInterface> >::ConversionType cobalt_value;
+  FromJSValue(exec_state, value,
+      (kConversionFlagNullable), &exception_state,
+      &cobalt_value);
+  if (exception_state.is_exception_set()) {
+    JSC::throwError(exec_state, exception_state.exception_object());
+    return;
+  }
+  // Check if argument conversion raised an exception.
+  if (!exec_state->hadException()) {
+    impl->set_next(cobalt_value);
+  }
+}
+
 JSC::EncodedJSValue constructorJSGarbageCollectionTestInterface(JSC::ExecState* exec_state) {
   JSCGlobalObject* global_object =
       JSC::jsCast<JSCGlobalObject*>(exec_state->lexicalGlobalObject());
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc
index f03be81..fc23cda 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCGetOpaqueRootInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::GetOpaqueRootInterface;
 using cobalt::bindings::testing::JSCGetOpaqueRootInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc b/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc
index e5fe2e0..2f652df 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCGlobalInterfaceParent.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::GlobalInterfaceParent;
 using cobalt::bindings::testing::JSCGlobalInterfaceParent;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc
index 550c106..5e4331f 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCIndexedGetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::IndexedGetterInterface;
 using cobalt::bindings::testing::JSCIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc b/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc
index 120fe3e..9630469 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCInterfaceWithUnsupportedProperties.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::InterfaceWithUnsupportedProperties;
 using cobalt::bindings::testing::JSCInterfaceWithUnsupportedProperties;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc
index 2bc9bbe..cc0dd24 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNamedConstructorInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::NamedConstructorInterface;
 using cobalt::bindings::testing::JSCNamedConstructorInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc
index 63bcfde..798d0bb 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNamedGetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/jsc_property_enumerator.h"
@@ -55,7 +55,7 @@
 using cobalt::bindings::testing::NamedGetterInterface;
 using cobalt::bindings::testing::JSCNamedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,18 +75,18 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSCPropertyEnumerator;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc
index 35ff21d..2a51847 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNamedIndexedGetterInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/jsc_property_enumerator.h"
@@ -55,7 +55,7 @@
 using cobalt::bindings::testing::NamedIndexedGetterInterface;
 using cobalt::bindings::testing::JSCNamedIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,18 +75,18 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSCPropertyEnumerator;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc
index 8e87456..513cf41 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNestedPutForwardsInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCPutForwardsInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::JSCPutForwardsInterface;
 using cobalt::bindings::testing::PutForwardsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc
index c903142..00e0958 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNoConstructorInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::NoConstructorInterface;
 using cobalt::bindings::testing::JSCNoConstructorInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc
index 9d10bc1..4b881d4 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNoInterfaceObjectInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::NoInterfaceObjectInterface;
 using cobalt::bindings::testing::JSCNoInterfaceObjectInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc
index c6ef2d6..d761485 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNullableTypesTestInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc
index e76d0d6..37c3b08 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCNumericTypesTestInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::NumericTypesTestInterface;
 using cobalt::bindings::testing::JSCNumericTypesTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc
index f51cb79..805a983 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCObjectTypeBindingsInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -41,8 +41,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -66,7 +66,7 @@
 using cobalt::bindings::testing::JSCBaseInterface;
 using cobalt::bindings::testing::JSCDerivedInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -86,17 +86,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc
index 2f95415..6f93029 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCOperationsTestInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc
index dd16e18..dd276b7 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCPutForwardsInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc
index 4270480..96a29ac 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCStaticPropertiesInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -37,8 +37,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -58,7 +58,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -78,17 +78,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc
index 9dd818d..c69637a 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAnonymousOperationInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::StringifierAnonymousOperationInterface;
 using cobalt::bindings::testing::JSCStringifierAnonymousOperationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc
index 1d17a76..a12e243 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierAttributeInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::StringifierAttributeInterface;
 using cobalt::bindings::testing::JSCStringifierAttributeInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc
index a0d5bfe..d6d7367 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCStringifierOperationInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::StringifierOperationInterface;
 using cobalt::bindings::testing::JSCStringifierOperationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc
index d6f2838..60d81da 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCTargetInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,8 +35,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -54,7 +54,7 @@
 using cobalt::bindings::testing::TargetInterface;
 using cobalt::bindings::testing::JSCTargetInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -74,17 +74,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc b/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc
index 2b7afe1..cf5c3d4 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCUnionTypesInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCArbitraryInterface.h"
@@ -39,8 +39,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -62,7 +62,7 @@
 using cobalt::bindings::testing::JSCArbitraryInterface;
 using cobalt::bindings::testing::JSCBaseInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -82,17 +82,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
diff --git a/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc b/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc
index 45c9bf3..967933d 100644
--- a/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc
+++ b/src/cobalt/bindings/generated/jsc/testing/JSCWindow.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "JSCAnonymousIndexedGetterInterface.h"
@@ -125,8 +125,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/type_traits.h"
@@ -242,7 +242,7 @@
 using cobalt::bindings::testing::UnionTypesInterface;
 using cobalt::bindings::testing::Window;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -262,17 +262,17 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
@@ -1192,17 +1192,17 @@
 namespace script {
 
 template<>
-void GlobalObjectProxy::CreateGlobalObject<Window>(
+void GlobalEnvironment::CreateGlobalObject<Window>(
     const scoped_refptr<Window>& global_interface,
     EnvironmentSettings* environment_settings) {
-  JSCGlobalObjectProxy* jsc_global_object_proxy =
-      base::polymorphic_downcast<JSCGlobalObjectProxy*>(this);
-  JSCEngine* jsc_engine = jsc_global_object_proxy->engine();
+  JSCGlobalEnvironment* jsc_global_environment =
+      base::polymorphic_downcast<JSCGlobalEnvironment*>(this);
+  JSCEngine* jsc_engine = jsc_global_environment->engine();
 
   JSCGlobalObject* global_object = JSCWindow::Create(
       global_interface, environment_settings,
       jsc_engine->global_data(), jsc_engine->script_object_registry());
-  jsc_global_object_proxy->SetGlobalObject(global_object);
+  jsc_global_environment->SetGlobalObject(global_object);
 }
 
 // MSVS compiler does not need this explicit instantiation, and generates a
@@ -1212,7 +1212,7 @@
 // This is needed to prevent link errors when trying to resolve the template
 // instantiation.
 template
-void GlobalObjectProxy::CreateGlobalObject<Window>(
+void GlobalEnvironment::CreateGlobalObject<Window>(
     const scoped_refptr<Window>& global_interface,
     EnvironmentSettings* environment_settings);
 #endif
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc
index 8e92cae..be7915c 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousIndexedGetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::AnonymousIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -391,17 +391,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -411,10 +411,10 @@
 // static
 JSObject* MozjsAnonymousIndexedGetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -433,10 +433,10 @@
 //static
 const JSClass* MozjsAnonymousIndexedGetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc
index 5b5af82..5431665 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedGetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::AnonymousNamedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousNamedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -363,17 +363,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -383,10 +383,10 @@
 // static
 JSObject* MozjsAnonymousNamedGetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -405,10 +405,10 @@
 //static
 const JSClass* MozjsAnonymousNamedGetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc
index 04c9194..388c186 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsAnonymousNamedIndexedGetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::AnonymousNamedIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsAnonymousNamedIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -482,17 +482,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -502,10 +502,10 @@
 // static
 JSObject* MozjsAnonymousNamedIndexedGetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -524,10 +524,10 @@
 //static
 const JSClass* MozjsAnonymousNamedIndexedGetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc
index 1bc5cc0..71b31f2 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsArbitraryInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -369,17 +369,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -389,10 +389,10 @@
 // static
 JSObject* MozjsArbitraryInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -411,10 +411,10 @@
 //static
 const JSClass* MozjsArbitraryInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc
index 7f786d8..bf4b5a3 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsBaseInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::BaseInterface;
 using cobalt::bindings::testing::MozjsBaseInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -347,17 +347,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -367,10 +367,10 @@
 // static
 JSObject* MozjsBaseInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -389,10 +389,10 @@
 //static
 const JSClass* MozjsBaseInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc
index 190790f..1796c62 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsBooleanTypeTestInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::BooleanTypeTestInterface;
 using cobalt::bindings::testing::MozjsBooleanTypeTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -416,17 +416,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -436,10 +436,10 @@
 // static
 JSObject* MozjsBooleanTypeTestInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -458,10 +458,10 @@
 //static
 const JSClass* MozjsBooleanTypeTestInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc
index 60f4a71..0b7e907 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackFunctionInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -641,17 +641,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -661,10 +661,10 @@
 // static
 JSObject* MozjsCallbackFunctionInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -683,10 +683,10 @@
 //static
 const JSClass* MozjsCallbackFunctionInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc
index a827b91..d4321ff 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsCallbackInterfaceInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsSingleOperationInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::MozjsSingleOperationInterface;
 using cobalt::bindings::testing::SingleOperationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -414,17 +414,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -434,10 +434,10 @@
 // static
 JSObject* MozjsCallbackInterfaceInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -456,10 +456,10 @@
 //static
 const JSClass* MozjsCallbackInterfaceInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc
index 5b3a117..e8e5a7d 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConditionalInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -51,7 +51,7 @@
 using cobalt::bindings::testing::ConditionalInterface;
 using cobalt::bindings::testing::MozjsConditionalInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -69,7 +69,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -460,17 +460,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -480,10 +480,10 @@
 // static
 JSObject* MozjsConditionalInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -502,10 +502,10 @@
 //static
 const JSClass* MozjsConditionalInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc
index a874765..ee42e57 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstantsInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::ConstantsInterface;
 using cobalt::bindings::testing::MozjsConstantsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -325,17 +325,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -345,10 +345,10 @@
 // static
 JSObject* MozjsConstantsInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -367,10 +367,10 @@
 //static
 const JSClass* MozjsConstantsInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc
index 4a0d825..af482d8 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::ConstructorInterface;
 using cobalt::bindings::testing::MozjsConstructorInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -284,17 +284,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -304,10 +304,10 @@
 // static
 JSObject* MozjsConstructorInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -326,10 +326,10 @@
 //static
 const JSClass* MozjsConstructorInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc
index c10d31d..09ccf2a 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsConstructorWithArgumentsInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::ConstructorWithArgumentsInterface;
 using cobalt::bindings::testing::MozjsConstructorWithArgumentsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -368,17 +368,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -388,10 +388,10 @@
 // static
 JSObject* MozjsConstructorWithArgumentsInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -410,10 +410,10 @@
 //static
 const JSClass* MozjsConstructorWithArgumentsInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc
index 9492765..7fb410b 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDOMStringTestInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::DOMStringTestInterface;
 using cobalt::bindings::testing::MozjsDOMStringTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -528,17 +528,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -548,10 +548,10 @@
 // static
 JSObject* MozjsDOMStringTestInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -570,10 +570,10 @@
 //static
 const JSClass* MozjsDOMStringTestInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc
index 0831779..9d7f281 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedGetterSetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::DerivedGetterSetterInterface;
 using cobalt::bindings::testing::MozjsDerivedGetterSetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -691,17 +691,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -711,10 +711,10 @@
 // static
 JSObject* MozjsDerivedGetterSetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -733,10 +733,10 @@
 //static
 const JSClass* MozjsDerivedGetterSetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc
index 51928b3..8d64be2 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDerivedInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::DerivedInterface;
 using cobalt::bindings::testing::MozjsDerivedInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -347,17 +347,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -367,10 +367,10 @@
 // static
 JSObject* MozjsDerivedInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -389,10 +389,10 @@
 //static
 const JSClass* MozjsDerivedInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc
index 0e86696..3f3d4a7 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsDisabledInterface.cc
@@ -25,7 +25,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -51,7 +51,7 @@
 using cobalt::bindings::testing::DisabledInterface;
 using cobalt::bindings::testing::MozjsDisabledInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -69,7 +69,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -359,17 +359,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -379,10 +379,10 @@
 // static
 JSObject* MozjsDisabledInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -401,10 +401,10 @@
 //static
 const JSClass* MozjsDisabledInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc
index 6810f89..c54bde2 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsEnumerationInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::EnumerationInterface;
 using cobalt::bindings::testing::MozjsEnumerationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -343,17 +343,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -363,10 +363,10 @@
 // static
 JSObject* MozjsEnumerationInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -385,10 +385,10 @@
 //static
 const JSClass* MozjsEnumerationInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc
index 4a0476a..64e3ca6 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionObjectInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -50,7 +50,7 @@
 using cobalt::bindings::testing::ExceptionObjectInterface;
 using cobalt::bindings::testing::MozjsExceptionObjectInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -68,7 +68,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -332,17 +332,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -352,10 +352,10 @@
 // static
 JSObject* MozjsExceptionObjectInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -374,10 +374,10 @@
 //static
 const JSClass* MozjsExceptionObjectInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc
index cc462b9..5f1a396 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsExceptionsInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::ExceptionsInterface;
 using cobalt::bindings::testing::MozjsExceptionsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -369,17 +369,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -389,10 +389,10 @@
 // static
 JSObject* MozjsExceptionsInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -411,10 +411,10 @@
 //static
 const JSClass* MozjsExceptionsInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc
index ea9bef6..07cceda 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsExtendedIDLAttributesInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::ExtendedIDLAttributesInterface;
 using cobalt::bindings::testing::MozjsExtendedIDLAttributesInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -208,10 +208,10 @@
       WrapperPrivate::GetFromObject(context, object);
   ExtendedIDLAttributesInterface* impl =
       wrapper_private->wrappable<ExtendedIDLAttributesInterface>().get();
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
 
-  impl->CallWithSettings(global_object_proxy->GetEnvironmentSettings());
+  impl->CallWithSettings(global_environment->GetEnvironmentSettings());
   result_value.set(JS::UndefinedHandleValue);
   return !exception_state.is_exception_set();
 }
@@ -309,17 +309,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -329,10 +329,10 @@
 // static
 JSObject* MozjsExtendedIDLAttributesInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -351,10 +351,10 @@
 //static
 const JSClass* MozjsExtendedIDLAttributesInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc
index 98eff0f..16e4b25 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsGarbageCollectionTestInterface.cc
@@ -23,9 +23,11 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
+#include "MozjsGarbageCollectionTestInterface.h"
+#include "cobalt/bindings/testing/garbage_collection_test_interface.h"
 
 #include "base/lazy_instance.h"
 #include "cobalt/script/mozjs/callback_function_conversion.h"
@@ -33,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -48,8 +50,10 @@
 namespace {
 using cobalt::bindings::testing::GarbageCollectionTestInterface;
 using cobalt::bindings::testing::MozjsGarbageCollectionTestInterface;
+using cobalt::bindings::testing::GarbageCollectionTestInterface;
+using cobalt::bindings::testing::MozjsGarbageCollectionTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -84,6 +88,13 @@
 
 namespace {
 
+Wrappable* GetOpaqueRootFromWrappable(
+    const scoped_refptr<Wrappable>& wrappable) {
+  GarbageCollectionTestInterface* impl =
+      base::polymorphic_downcast<GarbageCollectionTestInterface*>(wrappable.get());
+  return impl->GetHead();
+}
+
 class MozjsGarbageCollectionTestInterfaceHandler : public ProxyHandler {
  public:
   MozjsGarbageCollectionTestInterfaceHandler()
@@ -188,8 +199,108 @@
   return interface_data;
 }
 
+JSBool get_previous(
+    JSContext* context, JS::HandleObject object, JS::HandleId id,
+    JS::MutableHandleValue vp) {
+  MozjsExceptionState exception_state(context);
+  JS::RootedValue result_value(context);
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromObject(context, object);
+  GarbageCollectionTestInterface* impl =
+      wrapper_private->wrappable<GarbageCollectionTestInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(context,
+              impl->previous(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    vp.set(result_value);
+  }
+  return !exception_state.is_exception_set();
+}
+
+JSBool set_previous(
+    JSContext* context, JS::HandleObject object, JS::HandleId id,
+    JSBool strict, JS::MutableHandleValue vp) {
+  MozjsExceptionState exception_state(context);
+  JS::RootedValue result_value(context);
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromObject(context, object);
+  GarbageCollectionTestInterface* impl =
+      wrapper_private->wrappable<GarbageCollectionTestInterface>().get();
+  TypeTraits<scoped_refptr<GarbageCollectionTestInterface> >::ConversionType value;
+  FromJSValue(context, vp, (kConversionFlagNullable), &exception_state,
+              &value);
+  if (exception_state.is_exception_set()) {
+    return false;
+  }
+
+  impl->set_previous(value);
+  result_value.set(JS::UndefinedHandleValue);
+  return !exception_state.is_exception_set();
+}
+
+JSBool get_next(
+    JSContext* context, JS::HandleObject object, JS::HandleId id,
+    JS::MutableHandleValue vp) {
+  MozjsExceptionState exception_state(context);
+  JS::RootedValue result_value(context);
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromObject(context, object);
+  GarbageCollectionTestInterface* impl =
+      wrapper_private->wrappable<GarbageCollectionTestInterface>().get();
+
+  if (!exception_state.is_exception_set()) {
+    ToJSValue(context,
+              impl->next(),
+              &result_value);
+  }
+  if (!exception_state.is_exception_set()) {
+    vp.set(result_value);
+  }
+  return !exception_state.is_exception_set();
+}
+
+JSBool set_next(
+    JSContext* context, JS::HandleObject object, JS::HandleId id,
+    JSBool strict, JS::MutableHandleValue vp) {
+  MozjsExceptionState exception_state(context);
+  JS::RootedValue result_value(context);
+
+  WrapperPrivate* wrapper_private =
+      WrapperPrivate::GetFromObject(context, object);
+  GarbageCollectionTestInterface* impl =
+      wrapper_private->wrappable<GarbageCollectionTestInterface>().get();
+  TypeTraits<scoped_refptr<GarbageCollectionTestInterface> >::ConversionType value;
+  FromJSValue(context, vp, (kConversionFlagNullable), &exception_state,
+              &value);
+  if (exception_state.is_exception_set()) {
+    return false;
+  }
+
+  impl->set_next(value);
+  result_value.set(JS::UndefinedHandleValue);
+  return !exception_state.is_exception_set();
+}
+
 
 const JSPropertySpec prototype_properties[] = {
+  {  // Read/Write property
+      "previous", 0,
+      JSPROP_SHARED | JSPROP_ENUMERATE,
+      JSOP_WRAPPER(&get_previous),
+      JSOP_WRAPPER(&set_previous),
+  },
+  {  // Read/Write property
+      "next", 0,
+      JSPROP_SHARED | JSPROP_ENUMERATE,
+      JSOP_WRAPPER(&get_next),
+      JSOP_WRAPPER(&set_next),
+  },
   JS_PS_END
 };
 
@@ -284,17 +395,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -304,10 +415,10 @@
 // static
 JSObject* MozjsGarbageCollectionTestInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -319,17 +430,19 @@
   JS::RootedObject proxy(context,
       ProxyHandler::NewProxy(context, new_object, prototype, NULL,
                              proxy_handler.Pointer()));
-  WrapperPrivate::AddPrivateData(context, proxy, wrappable);
+  WrapperPrivate::GetOpaqueRootFunction get_root =
+      base::Bind(&GetOpaqueRootFromWrappable);
+  WrapperPrivate::AddPrivateData(context, proxy, wrappable, get_root);
   return proxy;
 }
 
 //static
 const JSClass* MozjsGarbageCollectionTestInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc
index 1ac39e0..fbb57b3 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsGetOpaqueRootInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::GetOpaqueRootInterface;
 using cobalt::bindings::testing::MozjsGetOpaqueRootInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -84,6 +84,13 @@
 
 namespace {
 
+Wrappable* GetOpaqueRootFromWrappable(
+    const scoped_refptr<Wrappable>& wrappable) {
+  GetOpaqueRootInterface* impl =
+      base::polymorphic_downcast<GetOpaqueRootInterface*>(wrappable.get());
+  return impl->get_opaque_root_function_name();
+}
+
 class MozjsGetOpaqueRootInterfaceHandler : public ProxyHandler {
  public:
   MozjsGetOpaqueRootInterfaceHandler()
@@ -284,17 +291,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -304,10 +311,10 @@
 // static
 JSObject* MozjsGetOpaqueRootInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -319,17 +326,19 @@
   JS::RootedObject proxy(context,
       ProxyHandler::NewProxy(context, new_object, prototype, NULL,
                              proxy_handler.Pointer()));
-  WrapperPrivate::AddPrivateData(context, proxy, wrappable);
+  WrapperPrivate::GetOpaqueRootFunction get_root =
+      base::Bind(&GetOpaqueRootFromWrappable);
+  WrapperPrivate::AddPrivateData(context, proxy, wrappable, get_root);
   return proxy;
 }
 
 //static
 const JSClass* MozjsGetOpaqueRootInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc
index 462c526..d742500 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsGlobalInterfaceParent.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::GlobalInterfaceParent;
 using cobalt::bindings::testing::MozjsGlobalInterfaceParent;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -307,17 +307,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -327,10 +327,10 @@
 // static
 JSObject* MozjsGlobalInterfaceParent::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -349,10 +349,10 @@
 //static
 const JSClass* MozjsGlobalInterfaceParent::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc
index b998abc..752334e 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsIndexedGetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::IndexedGetterInterface;
 using cobalt::bindings::testing::MozjsIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -583,17 +583,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -603,10 +603,10 @@
 // static
 JSObject* MozjsIndexedGetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -625,10 +625,10 @@
 //static
 const JSClass* MozjsIndexedGetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc
index 3253e9d..a578e9c 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsInterfaceWithUnsupportedProperties.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::InterfaceWithUnsupportedProperties;
 using cobalt::bindings::testing::MozjsInterfaceWithUnsupportedProperties;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -300,17 +300,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -320,10 +320,10 @@
 // static
 JSObject* MozjsInterfaceWithUnsupportedProperties::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -342,10 +342,10 @@
 //static
 const JSClass* MozjsInterfaceWithUnsupportedProperties::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc
index 82151fb..0bc85ff 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedConstructorInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::NamedConstructorInterface;
 using cobalt::bindings::testing::MozjsNamedConstructorInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -284,17 +284,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -304,10 +304,10 @@
 // static
 JSObject* MozjsNamedConstructorInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -326,10 +326,10 @@
 //static
 const JSClass* MozjsNamedConstructorInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc
index 90f7900..918f252 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedGetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::NamedGetterInterface;
 using cobalt::bindings::testing::MozjsNamedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -555,17 +555,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -575,10 +575,10 @@
 // static
 JSObject* MozjsNamedGetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -597,10 +597,10 @@
 //static
 const JSClass* MozjsNamedGetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc
index da310df..2965f0f 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNamedIndexedGetterInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::NamedIndexedGetterInterface;
 using cobalt::bindings::testing::MozjsNamedIndexedGetterInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -815,17 +815,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -835,10 +835,10 @@
 // static
 JSObject* MozjsNamedIndexedGetterInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -857,10 +857,10 @@
 //static
 const JSClass* MozjsNamedIndexedGetterInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc
index 07cf2d8..69fab04 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNestedPutForwardsInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsPutForwardsInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::MozjsPutForwardsInterface;
 using cobalt::bindings::testing::PutForwardsInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -348,17 +348,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -368,10 +368,10 @@
 // static
 JSObject* MozjsNestedPutForwardsInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -390,10 +390,10 @@
 //static
 const JSClass* MozjsNestedPutForwardsInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc
index 5780f10..acd16cd 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoConstructorInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::NoConstructorInterface;
 using cobalt::bindings::testing::MozjsNoConstructorInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -272,17 +272,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -292,10 +292,10 @@
 // static
 JSObject* MozjsNoConstructorInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -314,10 +314,10 @@
 //static
 const JSClass* MozjsNoConstructorInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc
index fc4d206..48f2709 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNoInterfaceObjectInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::NoInterfaceObjectInterface;
 using cobalt::bindings::testing::MozjsNoInterfaceObjectInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -232,17 +232,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -252,10 +252,10 @@
 // static
 JSObject* MozjsNoInterfaceObjectInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -274,10 +274,10 @@
 //static
 const JSClass* MozjsNoInterfaceObjectInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc
index bd4bfc0..c0010f4 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNullableTypesTestInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -852,17 +852,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -872,10 +872,10 @@
 // static
 JSObject* MozjsNullableTypesTestInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -894,10 +894,10 @@
 //static
 const JSClass* MozjsNullableTypesTestInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc
index d686d2b..4bf1c6e 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsNumericTypesTestInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::NumericTypesTestInterface;
 using cobalt::bindings::testing::MozjsNumericTypesTestInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -1712,17 +1712,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -1732,10 +1732,10 @@
 // static
 JSObject* MozjsNumericTypesTestInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -1754,10 +1754,10 @@
 //static
 const JSClass* MozjsNumericTypesTestInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc
index 286a091..1b20995 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsObjectTypeBindingsInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -39,7 +39,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -61,7 +61,7 @@
 using cobalt::bindings::testing::MozjsBaseInterface;
 using cobalt::bindings::testing::MozjsDerivedInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -79,7 +79,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -462,17 +462,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -482,10 +482,10 @@
 // static
 JSObject* MozjsObjectTypeBindingsInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -504,10 +504,10 @@
 //static
 const JSClass* MozjsObjectTypeBindingsInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc
index aac9e9a..b30eecb 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsOperationsTestInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -735,9 +735,9 @@
       // Overload resolution algorithm details found here:
       //     http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm
       JS::RootedValue arg(context, args[0]);
-      MozjsGlobalObjectProxy* global_object_proxy =
-          static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-      WrapperFactory* wrapper_factory = global_object_proxy->wrapper_factory();
+      MozjsGlobalEnvironment* global_environment =
+          static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+      WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
       if (arg.isNumber()) {
         return fcn_overloadedFunction2(
                   context, argc, vp);
@@ -756,9 +756,9 @@
       // Overload resolution algorithm details found here:
       //     http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm
       JS::RootedValue arg(context, args[2]);
-      MozjsGlobalObjectProxy* global_object_proxy =
-          static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-      WrapperFactory* wrapper_factory = global_object_proxy->wrapper_factory();
+      MozjsGlobalEnvironment* global_environment =
+          static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+      WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
       if (arg.isObject() ? wrapper_factory->DoesObjectImplementInterface(
               JSVAL_TO_OBJECT(arg), base::GetTypeId<ArbitraryInterface>()) :
               false) {
@@ -880,9 +880,9 @@
       // Overload resolution algorithm details found here:
       //     http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm
       JS::RootedValue arg(context, args[0]);
-      MozjsGlobalObjectProxy* global_object_proxy =
-          static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-      WrapperFactory* wrapper_factory = global_object_proxy->wrapper_factory();
+      MozjsGlobalEnvironment* global_environment =
+          static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+      WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
       if (arg.isNullOrUndefined()) {
         return fcn_overloadedNullable2(
                   context, argc, vp);
@@ -1530,17 +1530,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -1550,10 +1550,10 @@
 // static
 JSObject* MozjsOperationsTestInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -1572,10 +1572,10 @@
 //static
 const JSClass* MozjsOperationsTestInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc
index 12b04af..870e3a3 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsPutForwardsInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -389,17 +389,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -409,10 +409,10 @@
 // static
 JSObject* MozjsPutForwardsInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -431,10 +431,10 @@
 //static
 const JSClass* MozjsPutForwardsInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc
index e913609..02ad356 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStaticPropertiesInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -35,7 +35,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -53,7 +53,7 @@
 using cobalt::bindings::testing::ArbitraryInterface;
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -71,7 +71,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -422,9 +422,9 @@
       // Overload resolution algorithm details found here:
       //     http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm
       JS::RootedValue arg(context, args[0]);
-      MozjsGlobalObjectProxy* global_object_proxy =
-          static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-      WrapperFactory* wrapper_factory = global_object_proxy->wrapper_factory();
+      MozjsGlobalEnvironment* global_environment =
+          static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+      WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
       if (arg.isNumber()) {
         return staticfcn_staticFunction2(
                   context, argc, vp);
@@ -443,9 +443,9 @@
       // Overload resolution algorithm details found here:
       //     http://heycam.github.io/webidl/#dfn-overload-resolution-algorithm
       JS::RootedValue arg(context, args[2]);
-      MozjsGlobalObjectProxy* global_object_proxy =
-          static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-      WrapperFactory* wrapper_factory = global_object_proxy->wrapper_factory();
+      MozjsGlobalEnvironment* global_environment =
+          static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+      WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
       if (arg.isObject() ? wrapper_factory->DoesObjectImplementInterface(
               JSVAL_TO_OBJECT(arg), base::GetTypeId<ArbitraryInterface>()) :
               false) {
@@ -566,17 +566,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -586,10 +586,10 @@
 // static
 JSObject* MozjsStaticPropertiesInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -608,10 +608,10 @@
 //static
 const JSClass* MozjsStaticPropertiesInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc
index 0646f33..73b9c2f 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAnonymousOperationInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::StringifierAnonymousOperationInterface;
 using cobalt::bindings::testing::MozjsStringifierAnonymousOperationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -310,17 +310,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -330,10 +330,10 @@
 // static
 JSObject* MozjsStringifierAnonymousOperationInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -352,10 +352,10 @@
 //static
 const JSClass* MozjsStringifierAnonymousOperationInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc
index 552e45b..b1b8349 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierAttributeInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::StringifierAttributeInterface;
 using cobalt::bindings::testing::MozjsStringifierAttributeInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -360,17 +360,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -380,10 +380,10 @@
 // static
 JSObject* MozjsStringifierAttributeInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -402,10 +402,10 @@
 //static
 const JSClass* MozjsStringifierAttributeInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc
index db390ad..6b6dd67 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsStringifierOperationInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::StringifierOperationInterface;
 using cobalt::bindings::testing::MozjsStringifierOperationInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -351,17 +351,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -371,10 +371,10 @@
 // static
 JSObject* MozjsStringifierOperationInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -393,10 +393,10 @@
 //static
 const JSClass* MozjsStringifierOperationInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc
index 3f3110e..644db8f 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsTargetInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -33,7 +33,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -49,7 +49,7 @@
 using cobalt::bindings::testing::TargetInterface;
 using cobalt::bindings::testing::MozjsTargetInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -67,7 +67,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -342,17 +342,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -362,10 +362,10 @@
 // static
 JSObject* MozjsTargetInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -384,10 +384,10 @@
 //static
 const JSClass* MozjsTargetInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc
index df03fdc..5c9b31f 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsUnionTypesInterface.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsArbitraryInterface.h"
@@ -37,7 +37,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -57,7 +57,7 @@
 using cobalt::bindings::testing::MozjsArbitraryInterface;
 using cobalt::bindings::testing::MozjsBaseInterface;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -75,7 +75,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -480,17 +480,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -500,10 +500,10 @@
 // static
 JSObject* MozjsUnionTypesInterface::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -522,10 +522,10 @@
 //static
 const JSClass* MozjsUnionTypesInterface::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
diff --git a/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc b/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc
index 59ff86f..0a5ddd1 100644
--- a/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc
+++ b/src/cobalt/bindings/generated/mozjs/testing/MozjsWindow.cc
@@ -23,7 +23,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "MozjsAnonymousIndexedGetterInterface.h"
@@ -123,7 +123,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -237,7 +237,7 @@
 using cobalt::bindings::testing::UnionTypesInterface;
 using cobalt::bindings::testing::Window;
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -255,7 +255,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -467,12 +467,12 @@
       WrapperPrivate::GetFromObject(context, object);
   Window* impl =
       wrapper_private->wrappable<Window>().get();
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
 
   if (!exception_state.is_exception_set()) {
     ToJSValue(context,
-              impl->GetStackTrace(global_object_proxy->GetStackTrace()),
+              impl->GetStackTrace(global_environment->GetStackTrace()),
               &result_value);
   }
   if (!exception_state.is_exception_set()) {
@@ -621,17 +621,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -668,18 +668,18 @@
 
   // Set the global object proxy pointer, so we can access the standard classes
   // such as the base Object prototype when looking up our prototype.
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-  global_object_proxy->SetGlobalObjectProxyAndWrapper(proxy, wrappable);
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+  global_environment->SetGlobalObjectProxyAndWrapper(proxy, wrappable);
   return proxy;
 }
 //static
 const JSClass* MozjsWindow::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
@@ -727,20 +727,20 @@
 namespace script {
 
 template<>
-void GlobalObjectProxy::CreateGlobalObject<Window>(
+void GlobalEnvironment::CreateGlobalObject<Window>(
     const scoped_refptr<Window>& global_interface,
     EnvironmentSettings* environment_settings) {
-  MozjsGlobalObjectProxy* mozjs_global_object_proxy =
-      base::polymorphic_downcast<MozjsGlobalObjectProxy*>(this);
-  JSContext* context = mozjs_global_object_proxy->context();
+  MozjsGlobalEnvironment* mozjs_global_environment =
+      base::polymorphic_downcast<MozjsGlobalEnvironment*>(this);
+  JSContext* context = mozjs_global_environment->context();
 
   JSAutoRequest auto_request(context);
   MozjsWindow::CreateProxy(
       context, global_interface);
-  mozjs_global_object_proxy->SetEnvironmentSettings(environment_settings);
+  mozjs_global_environment->SetEnvironmentSettings(environment_settings);
 
   WrapperFactory* wrapper_factory =
-      mozjs_global_object_proxy->wrapper_factory();
+      mozjs_global_environment->wrapper_factory();
   wrapper_factory->RegisterWrappableType(
       AnonymousIndexedGetterInterface::AnonymousIndexedGetterInterfaceWrappableType(),
       base::Bind(MozjsAnonymousIndexedGetterInterface::CreateProxy),
@@ -931,7 +931,7 @@
 // This is needed to prevent link errors when trying to resolve the template
 // instantiation.
 template
-void GlobalObjectProxy::CreateGlobalObject<Window>(
+void GlobalEnvironment::CreateGlobalObject<Window>(
     const scoped_refptr<Window>& global_interface,
     EnvironmentSettings* environment_settings);
 #endif
diff --git a/src/cobalt/bindings/javascriptcore/templates/interface.cc.template b/src/cobalt/bindings/javascriptcore/templates/interface.cc.template
index d8d37f1..4958230 100644
--- a/src/cobalt/bindings/javascriptcore/templates/interface.cc.template
+++ b/src/cobalt/bindings/javascriptcore/templates/interface.cc.template
@@ -24,8 +24,8 @@
 #include "cobalt/script/javascriptcore/jsc_callback_function.h"
 #include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
 #include "cobalt/script/javascriptcore/jsc_exception_state.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 {% if named_property_getter %}
@@ -61,20 +61,20 @@
 using cobalt::script::javascriptcore::JSCCallbackInterfaceHolder;
 using cobalt::script::javascriptcore::JSCEngine;
 using cobalt::script::javascriptcore::JSCExceptionState;
+using cobalt::script::javascriptcore::JSCGlobalEnvironment;
+using cobalt::script::javascriptcore::JSCGlobalObject;
 using cobalt::script::javascriptcore::JSCObjectHandle;
 using cobalt::script::javascriptcore::JSCObjectHandleHolder;
-using cobalt::script::javascriptcore::JSCGlobalObject;
-using cobalt::script::javascriptcore::JSCGlobalObjectProxy;
 {% if named_property_getter %}
 using cobalt::script::javascriptcore::JSCPropertyEnumerator;
 {% endif %}
 using cobalt::script::javascriptcore::JSObjectToWrappable;
+using cobalt::script::javascriptcore::PrototypeBase;
 using cobalt::script::javascriptcore::ScriptObjectRegistry;
+using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::ToJSValue;
 using cobalt::script::javascriptcore::ToWTFString;
 using cobalt::script::javascriptcore::TypeTraits;
-using cobalt::script::javascriptcore::PrototypeBase;
-using cobalt::script::javascriptcore::ThreadLocalHashTable;
 using cobalt::script::javascriptcore::WrapperBase;
 using cobalt::script::javascriptcore::util::HasPropertyOnPrototype;
 using cobalt::script::javascriptcore::util::GetStackTrace;
@@ -1076,14 +1076,14 @@
 {% endblock implementation %}
 
 {% block create_global_object_impl %}
-  JSCGlobalObjectProxy* jsc_global_object_proxy =
-      base::polymorphic_downcast<JSCGlobalObjectProxy*>(this);
-  JSCEngine* jsc_engine = jsc_global_object_proxy->engine();
+  JSCGlobalEnvironment* jsc_global_environment =
+      base::polymorphic_downcast<JSCGlobalEnvironment*>(this);
+  JSCEngine* jsc_engine = jsc_global_environment->engine();
 
   JSCGlobalObject* global_object = {{binding_class}}::Create(
       global_interface, environment_settings,
       jsc_engine->global_data(), jsc_engine->script_object_registry());
-  jsc_global_object_proxy->SetGlobalObject(global_object);
+  jsc_global_environment->SetGlobalObject(global_object);
 {% endblock create_global_object_impl %}
 
 {% block enumeration_definitions %}
diff --git a/src/cobalt/bindings/mozjs/templates/interface.cc.template b/src/cobalt/bindings/mozjs/templates/interface.cc.template
index 4d4cf06..19eddeb 100644
--- a/src/cobalt/bindings/mozjs/templates/interface.cc.template
+++ b/src/cobalt/bindings/mozjs/templates/interface.cc.template
@@ -31,7 +31,7 @@
 #include "cobalt/script/mozjs/conversion_helpers.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
 #include "cobalt/script/mozjs/mozjs_callback_function.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_property_enumerator.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
@@ -60,7 +60,7 @@
 using cobalt::script::mozjs::InterfaceData;
 using cobalt::script::mozjs::MozjsCallbackFunction;
 using cobalt::script::mozjs::MozjsExceptionState;
-using cobalt::script::mozjs::MozjsGlobalObjectProxy;
+using cobalt::script::mozjs::MozjsGlobalEnvironment;
 using cobalt::script::mozjs::MozjsUserObjectHolder;
 using cobalt::script::mozjs::MozjsPropertyEnumerator;
 using cobalt::script::mozjs::ProxyHandler;
@@ -98,6 +98,15 @@
 {% block implementation %}
 namespace {
 
+{% if get_opaque_root %}
+Wrappable* GetOpaqueRootFromWrappable(
+    const scoped_refptr<Wrappable>& wrappable) {
+  {{impl_class}}* impl =
+      base::polymorphic_downcast<{{impl_class}}*>(wrappable.get());
+  return impl->{{get_opaque_root}}();
+}
+
+{% endif %}
 {% if named_property_getter %}
 bool IsSupportedNamedProperty(JSContext* context, JS::HandleObject object,
                               const std::string& property_name) {
@@ -752,17 +761,17 @@
 }
 
 InterfaceData* GetInterfaceData(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   // Use the address of the properties definition for this interface as a
   // unique key for looking up the InterfaceData for this interface.
   intptr_t key = reinterpret_cast<intptr_t>(&own_properties);
-  InterfaceData* interface_data = global_object_proxy->GetInterfaceData(key);
+  InterfaceData* interface_data = global_environment->GetInterfaceData(key);
   if (!interface_data) {
     interface_data = CreateCachedInterfaceData();
     DCHECK(interface_data);
-    global_object_proxy->CacheInterfaceData(key, interface_data);
-    DCHECK_EQ(interface_data, global_object_proxy->GetInterfaceData(key));
+    global_environment->CacheInterfaceData(key, interface_data);
+    DCHECK_EQ(interface_data, global_environment->GetInterfaceData(key));
   }
   return interface_data;
 }
@@ -800,19 +809,19 @@
 
   // Set the global object proxy pointer, so we can access the standard classes
   // such as the base Object prototype when looking up our prototype.
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-  global_object_proxy->SetGlobalObjectProxyAndWrapper(proxy, wrappable);
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+  global_environment->SetGlobalObjectProxyAndWrapper(proxy, wrappable);
   return proxy;
 }
 {% else %}
 // static
 JSObject* {{binding_class}}::CreateProxy(
     JSContext* context, const scoped_refptr<Wrappable>& wrappable) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   InterfaceData* interface_data = GetInterfaceData(context);
@@ -824,7 +833,12 @@
   JS::RootedObject proxy(context,
       ProxyHandler::NewProxy(context, new_object, prototype, NULL,
                              proxy_handler.Pointer()));
-  WrapperPrivate::AddPrivateData(context, proxy, wrappable);
+{% if get_opaque_root %}
+  WrapperPrivate::GetOpaqueRootFunction get_root =
+      base::Bind(&GetOpaqueRootFromWrappable);
+{% endif %}
+  WrapperPrivate::AddPrivateData(context, proxy, wrappable{{
+      ", get_root" if get_opaque_root }});
   return proxy;
 }
 
@@ -832,10 +846,10 @@
 //static
 const JSClass* {{binding_class}}::PrototypeClass(
       JSContext* context) {
-  DCHECK(MozjsGlobalObjectProxy::GetFromContext(context));
+  DCHECK(MozjsGlobalEnvironment::GetFromContext(context));
   JS::RootedObject global_object(
       context,
-      MozjsGlobalObjectProxy::GetFromContext(context)->global_object());
+      MozjsGlobalEnvironment::GetFromContext(context)->global_object());
   DCHECK(global_object);
 
   JS::RootedObject prototype(context, GetPrototype(context, global_object));
@@ -896,17 +910,17 @@
 
 {% endblock implementation %}
 {% block create_global_object_impl %}
-  MozjsGlobalObjectProxy* mozjs_global_object_proxy =
-      base::polymorphic_downcast<MozjsGlobalObjectProxy*>(this);
-  JSContext* context = mozjs_global_object_proxy->context();
+  MozjsGlobalEnvironment* mozjs_global_environment =
+      base::polymorphic_downcast<MozjsGlobalEnvironment*>(this);
+  JSContext* context = mozjs_global_environment->context();
 
   JSAutoRequest auto_request(context);
   {{binding_class}}::CreateProxy(
       context, global_interface);
-  mozjs_global_object_proxy->SetEnvironmentSettings(environment_settings);
+  mozjs_global_environment->SetEnvironmentSettings(environment_settings);
 
   WrapperFactory* wrapper_factory =
-      mozjs_global_object_proxy->wrapper_factory();
+      mozjs_global_environment->wrapper_factory();
 {% for interface in all_interfaces %}
 {% if interface.conditional %}
 #if defined({{interface.conditional}})
diff --git a/src/cobalt/bindings/mozjs/templates/macros.cc.template b/src/cobalt/bindings/mozjs/templates/macros.cc.template
index 2eac967..f9153c7 100644
--- a/src/cobalt/bindings/mozjs/templates/macros.cc.template
+++ b/src/cobalt/bindings/mozjs/templates/macros.cc.template
@@ -256,10 +256,10 @@
  #}
 {% macro add_extra_arguments(arguments_list, raises_exception, call_with) %}
 {% if call_with %}
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
 {% do arguments_list.insert(0,
-                            'global_object_proxy->Get%s()'|format(call_with)) %}
+                            'global_environment->Get%s()'|format(call_with)) %}
 {% endif %}
 {% do arguments_list.append('&exception_state') if raises_exception %}
 {%- endmacro %}
@@ -369,9 +369,9 @@
 {# In the case there is only one resolution condition, we don't need the arg. #}
 {% if resolution_tests|length > 1 %}
       JS::RootedValue arg(context, args[{{distinguishing_argument_index}}]);
-      MozjsGlobalObjectProxy* global_object_proxy =
-          static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
-      WrapperFactory* wrapper_factory = global_object_proxy->wrapper_factory();
+      MozjsGlobalEnvironment* global_environment =
+          static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
+      WrapperFactory* wrapper_factory = global_environment->wrapper_factory();
 {% endif %}
 {% for test, overload in resolution_tests %}
       if ({{test("arg")}}) {
diff --git a/src/cobalt/bindings/templates/interface-base.cc.template b/src/cobalt/bindings/templates/interface-base.cc.template
index 5da3faa..cd0b3ba 100644
--- a/src/cobalt/bindings/templates/interface-base.cc.template
+++ b/src/cobalt/bindings/templates/interface-base.cc.template
@@ -43,7 +43,7 @@
 
 #include "base/debug/trace_event.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 {% for include in implementation_includes %}
@@ -65,7 +65,7 @@
 {% endif %}
 {% endfor %}
 using cobalt::script::CallbackInterfaceTraits;
-using cobalt::script::GlobalObjectProxy;
+using cobalt::script::GlobalEnvironment;
 using cobalt::script::OpaqueHandle;
 using cobalt::script::OpaqueHandleHolder;
 using cobalt::script::ScriptObject;
@@ -95,7 +95,7 @@
 namespace script {
 
 template<>
-void GlobalObjectProxy::CreateGlobalObject<{{impl_class}}>(
+void GlobalEnvironment::CreateGlobalObject<{{impl_class}}>(
     const scoped_refptr<{{impl_class}}>& global_interface,
     EnvironmentSettings* environment_settings) {
 {% block create_global_object_impl %}
@@ -109,7 +109,7 @@
 // This is needed to prevent link errors when trying to resolve the template
 // instantiation.
 template
-void GlobalObjectProxy::CreateGlobalObject<{{impl_class}}>(
+void GlobalEnvironment::CreateGlobalObject<{{impl_class}}>(
     const scoped_refptr<{{impl_class}}>& global_interface,
     EnvironmentSettings* environment_settings);
 #endif
diff --git a/src/cobalt/bindings/testing/GarbageCollectionTestInterface.idl b/src/cobalt/bindings/testing/GarbageCollectionTestInterface.idl
index e60c747..5e357d2 100644
--- a/src/cobalt/bindings/testing/GarbageCollectionTestInterface.idl
+++ b/src/cobalt/bindings/testing/GarbageCollectionTestInterface.idl
@@ -13,6 +13,14 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-[Constructor]
+[
+  Constructor,
+  // The head of the list is the "opaque root" of all nodes in the list.
+  GetOpaqueRoot=GetHead,
+]
 interface GarbageCollectionTestInterface {
+  // This interface represents a simple linked-list implementation used for
+  // tests around reachability of objects from opaque roots.
+  attribute GarbageCollectionTestInterface? previous;
+  attribute GarbageCollectionTestInterface? next;
 };
diff --git a/src/cobalt/bindings/testing/bindings_sandbox_main.cc b/src/cobalt/bindings/testing/bindings_sandbox_main.cc
index 35ba1f1..c8fe7ad 100644
--- a/src/cobalt/bindings/testing/bindings_sandbox_main.cc
+++ b/src/cobalt/bindings/testing/bindings_sandbox_main.cc
@@ -19,11 +19,6 @@
 
 #include "cobalt/base/wrap_main.h"
 #include "cobalt/bindings/testing/window.h"
-#include "cobalt/script/environment_settings.h"
-#include "cobalt/script/global_object_proxy.h"
-#include "cobalt/script/javascript_engine.h"
-#include "cobalt/script/source_code.h"
-
 #include "cobalt/script/standalone_javascript_runner.h"
 
 using cobalt::bindings::testing::Window;
diff --git a/src/cobalt/bindings/testing/bindings_test_base.h b/src/cobalt/bindings/testing/bindings_test_base.h
index 3d01305..25e9ea2 100644
--- a/src/cobalt/bindings/testing/bindings_test_base.h
+++ b/src/cobalt/bindings/testing/bindings_test_base.h
@@ -22,7 +22,7 @@
 #include "base/memory/ref_counted.h"
 #include "cobalt/bindings/testing/window.h"
 #include "cobalt/script/environment_settings.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/javascript_engine.h"
 #include "cobalt/script/source_code.h"
 #include "testing/gmock/include/gmock/gmock.h"
@@ -48,19 +48,19 @@
   BindingsTestBase()
       : environment_settings_(new script::EnvironmentSettings),
         engine_(script::JavaScriptEngine::CreateEngine()),
-        global_object_proxy_(engine_->CreateGlobalObjectProxy()),
+        global_environment_(engine_->CreateGlobalEnvironment()),
         window_(new Window()) {
-    global_object_proxy_->CreateGlobalObject(window_,
-                                             environment_settings_.get());
+    global_environment_->CreateGlobalObject(window_,
+                                            environment_settings_.get());
   }
 
   explicit BindingsTestBase(const scoped_refptr<Window> window)
       : environment_settings_(new script::EnvironmentSettings),
         engine_(script::JavaScriptEngine::CreateEngine()),
-        global_object_proxy_(engine_->CreateGlobalObjectProxy()),
+        global_environment_(engine_->CreateGlobalEnvironment()),
         window_(window) {
-    global_object_proxy_->CreateGlobalObject(window_,
-                                             environment_settings_.get());
+    global_environment_->CreateGlobalObject(window_,
+                                            environment_settings_.get());
   }
 
   bool EvaluateScript(const std::string& script,
@@ -68,7 +68,7 @@
     scoped_refptr<script::SourceCode> source =
         script::SourceCode::CreateSourceCode(
             script, base::SourceLocation("[object BindingsTestBase]", 1, 1));
-    return global_object_proxy_->EvaluateScript(source, out_result);
+    return global_environment_->EvaluateScript(source, out_result);
   }
 
   void CollectGarbage() { engine_->CollectGarbage(); }
@@ -76,7 +76,7 @@
  protected:
   const scoped_ptr<script::EnvironmentSettings> environment_settings_;
   const scoped_ptr<script::JavaScriptEngine> engine_;
-  const scoped_refptr<script::GlobalObjectProxy> global_object_proxy_;
+  const scoped_refptr<script::GlobalEnvironment> global_environment_;
   const scoped_refptr<Window> window_;
 };
 
@@ -88,8 +88,8 @@
   InterfaceBindingsTest()
       // Use StrictMock so TESTING will fail if unexpected method is called.
       : test_mock_(new ::testing::StrictMock<MockT>()) {
-    global_object_proxy_->Bind("test",
-                               make_scoped_refptr<BaseClass>((test_mock_)));
+    global_environment_->Bind("test",
+                              make_scoped_refptr<BaseClass>((test_mock_)));
   }
 
   MockT& test_mock() { return *test_mock_.get(); }
diff --git a/src/cobalt/bindings/testing/garbage_collection_test.cc b/src/cobalt/bindings/testing/garbage_collection_test.cc
index b73dce0..2c992a9 100644
--- a/src/cobalt/bindings/testing/garbage_collection_test.cc
+++ b/src/cobalt/bindings/testing/garbage_collection_test.cc
@@ -53,7 +53,7 @@
 
   // Keep this instance alive using PreventGarbageCollection
   ASSERT_EQ(GarbageCollectionTestInterface::instances().size(), 1);
-  global_object_proxy_->PreventGarbageCollection(
+  global_environment_->PreventGarbageCollection(
       make_scoped_refptr<script::Wrappable>(
           GarbageCollectionTestInterface::instances()[0]));
   // Remove the only reference to this object from JavaScript.
@@ -64,7 +64,7 @@
   ASSERT_EQ(GarbageCollectionTestInterface::instances().size(), 1);
 
   // Allow this object to be garbage collected once more.
-  global_object_proxy_->AllowGarbageCollection(
+  global_environment_->AllowGarbageCollection(
       make_scoped_refptr<script::Wrappable>(
           GarbageCollectionTestInterface::instances()[0]));
 
@@ -75,6 +75,54 @@
 #endif
 }
 
+TEST_F(GarbageCollectionTest, ReachableObjectsKeptAlive) {
+  // Build a linked-list structure.
+  EXPECT_EQ(GarbageCollectionTestInterface::instances().size(), 0);
+  EXPECT_TRUE(EvaluateScript(
+      "var head = new GarbageCollectionTestInterface();"
+      "head.next = new GarbageCollectionTestInterface();"
+      "head.next.next = new GarbageCollectionTestInterface();"
+      "head.next.next.next = new GarbageCollectionTestInterface();"));
+  ASSERT_EQ(GarbageCollectionTestInterface::instances().size(), 4);
+
+  // A reference to anything in the list should keep the rest of the structure
+  // alive.
+  EXPECT_TRUE(
+      EvaluateScript("var tail = head.next.next.next;"
+                     "var head = undefined;"));
+  CollectGarbage();
+  ASSERT_EQ(GarbageCollectionTestInterface::instances().size(), 4);
+
+  // The old tail is not reachable, so the nodes should get garbage collected.
+  EXPECT_TRUE(
+      EvaluateScript("var tail = tail.previous.previous;"
+                     "tail.next = null;"));
+  CollectGarbage();
+#if !defined(ENGINE_USES_CONSERVATIVE_ROOTING)
+  ASSERT_EQ(GarbageCollectionTestInterface::instances().size(), 2);
+#endif
+}
+
+TEST_F(GarbageCollectionTest, JSObjectRetainsCustomProperty) {
+  // Build a linked-list structure.
+  EXPECT_EQ(GarbageCollectionTestInterface::instances().size(), 0);
+  EXPECT_TRUE(EvaluateScript(
+      "var head = new GarbageCollectionTestInterface();"
+      "head.next = new GarbageCollectionTestInterface();"
+      "head.next.next = new GarbageCollectionTestInterface();"
+      "head.next.next.next = new GarbageCollectionTestInterface();"));
+  ASSERT_EQ(GarbageCollectionTestInterface::instances().size(), 4);
+
+  // Add a custom property to an object that is not directly reachable from JS.
+  EXPECT_TRUE(EvaluateScript("head.next.bicycle = 7;"));
+
+  // Collect garbage and ensure that the custom property persisted.
+  CollectGarbage();
+  std::string result;
+  EXPECT_TRUE(EvaluateScript("head.next.bicycle;", &result));
+  EXPECT_STREQ("7", result.c_str());
+}
+
 }  // namespace testing
 }  // namespace bindings
 }  // namespace cobalt
diff --git a/src/cobalt/bindings/testing/garbage_collection_test_interface.cc b/src/cobalt/bindings/testing/garbage_collection_test_interface.cc
index 5b25309..6f515eb 100644
--- a/src/cobalt/bindings/testing/garbage_collection_test_interface.cc
+++ b/src/cobalt/bindings/testing/garbage_collection_test_interface.cc
@@ -27,7 +27,8 @@
     instances;
 }  // namespace
 
-GarbageCollectionTestInterface::GarbageCollectionTestInterface() {
+GarbageCollectionTestInterface::GarbageCollectionTestInterface()
+    : previous_(NULL) {
   instances().push_back(this);
 }
 
@@ -41,6 +42,60 @@
   }
 }
 
+void GarbageCollectionTestInterface::set_previous(
+    const scoped_refptr<GarbageCollectionTestInterface>& previous) {
+  // Make the current previous_ the tail of its own list.
+  if (previous_) {
+    previous_->MakeTail();
+  }
+  Join(previous.get(), this);
+}
+
+void GarbageCollectionTestInterface::set_next(
+    const scoped_refptr<GarbageCollectionTestInterface>& next) {
+  // Make the current next_ the head of its own list.
+  if (next_) {
+    next_->MakeHead();
+  }
+  Join(this, next.get());
+}
+
+// The value of |GetOpaqueRoot| in the .idl. This ensures that nodes in the
+// same list have the same "root".
+script::Wrappable* GarbageCollectionTestInterface::GetHead() {
+  if (previous_) {
+    return previous_->GetHead();
+  }
+  return this;
+}
+
+void GarbageCollectionTestInterface::MakeHead() {
+  if (previous_) {
+    DCHECK(previous_->next_ == this);
+    previous_->next_ = NULL;
+  }
+  previous_ = NULL;
+}
+
+void GarbageCollectionTestInterface::MakeTail() {
+  if (next_) {
+    DCHECK(next_->previous_ == this);
+    next_->previous_ = NULL;
+  }
+  next_ = NULL;
+}
+
+void GarbageCollectionTestInterface::Join(
+    GarbageCollectionTestInterface* first,
+    GarbageCollectionTestInterface* second) {
+  if (first) {
+    first->next_ = second;
+  }
+  if (second) {
+    second->previous_ = first;
+  }
+}
+
 GarbageCollectionTestInterface::GarbageCollectionTestInterfaceVector&
 GarbageCollectionTestInterface::instances() {
   return ::cobalt::bindings::testing::instances.Get();
diff --git a/src/cobalt/bindings/testing/garbage_collection_test_interface.h b/src/cobalt/bindings/testing/garbage_collection_test_interface.h
index e4c0456..e0e0571 100644
--- a/src/cobalt/bindings/testing/garbage_collection_test_interface.h
+++ b/src/cobalt/bindings/testing/garbage_collection_test_interface.h
@@ -25,16 +25,47 @@
 namespace bindings {
 namespace testing {
 
+// GarbageCollectionTestInterface maintains strong references from head -> tail,
+// and raw pointers from tail -> head to prevent reference cycles, similar to
+// how references between Nodes are handled in Cobalt.
 class GarbageCollectionTestInterface : public script::Wrappable {
  public:
+  typedef std::vector<GarbageCollectionTestInterface*>
+      GarbageCollectionTestInterfaceVector;
+
   GarbageCollectionTestInterface();
   ~GarbageCollectionTestInterface();
 
-  typedef std::vector<GarbageCollectionTestInterface*>
-      GarbageCollectionTestInterfaceVector;
+  // The current |previous| node will become the tail of its list.
+  void set_previous(
+      const scoped_refptr<GarbageCollectionTestInterface>& previous);
+  scoped_refptr<GarbageCollectionTestInterface> previous() {
+    return make_scoped_refptr(previous_);
+  }
+
+  // The current |next| node will become the head of a new list.
+  void set_next(const scoped_refptr<GarbageCollectionTestInterface>& next);
+  scoped_refptr<GarbageCollectionTestInterface> next() { return next_; }
+
+  // The value of |GetOpaqueRoot| in the .idl. This ensures that nodes in the
+  // same list have the same "root".
+  script::Wrappable* GetHead();
+
   static GarbageCollectionTestInterfaceVector& instances();
 
   DEFINE_WRAPPABLE_TYPE(GarbageCollectionTestInterface);
+
+ private:
+  void MakeHead();
+  void MakeTail();
+
+  static void Join(GarbageCollectionTestInterface* first,
+                   GarbageCollectionTestInterface* second);
+
+  // Raw pointers going upstream, strong pointers going downstream to prevent
+  // reference cycles.
+  GarbageCollectionTestInterface* previous_;
+  scoped_refptr<GarbageCollectionTestInterface> next_;
 };
 
 }  // namespace testing
diff --git a/src/cobalt/bindings/testing/getter_setter_test.cc b/src/cobalt/bindings/testing/getter_setter_test.cc
index 24654d5..94fa4b6 100644
--- a/src/cobalt/bindings/testing/getter_setter_test.cc
+++ b/src/cobalt/bindings/testing/getter_setter_test.cc
@@ -44,7 +44,7 @@
  public:
   GetterSetterBindingsTestBase()
       : test_mock_(new ::testing::NiceMock<MockT>()) {
-    global_object_proxy_->Bind("test", make_scoped_refptr<MockT>((test_mock_)));
+    global_environment_->Bind("test", make_scoped_refptr<MockT>((test_mock_)));
   }
 
   MockT& test_mock() { return *test_mock_.get(); }
diff --git a/src/cobalt/bindings/testing/window.h b/src/cobalt/bindings/testing/window.h
index 0bc8115..b680d9d 100644
--- a/src/cobalt/bindings/testing/window.h
+++ b/src/cobalt/bindings/testing/window.h
@@ -22,7 +22,7 @@
 
 #include "cobalt/bindings/testing/global_interface_parent.h"
 #include "cobalt/script/environment_settings.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 
 namespace cobalt {
 namespace bindings {
diff --git a/src/cobalt/browser/application.cc b/src/cobalt/browser/application.cc
index ff3ddef..0006b33 100644
--- a/src/cobalt/browser/application.cc
+++ b/src/cobalt/browser/application.cc
@@ -359,6 +359,14 @@
     DLOG(INFO) << "Use null audio";
     options.media_module_options.use_null_audio_streamer = true;
   }
+  if (command_line->HasSwitch(switches::kVideoContainerSizeOverride)) {
+    std::string size_override = command_line->GetSwitchValueASCII(
+        browser::switches::kVideoContainerSizeOverride);
+    DLOG(INFO) << "Set video container size override from command line to "
+               << size_override;
+    deprecated::PlatformDelegate::Get()->SetVideoContainerSizeOverride(
+        size_override);
+  }
   if (command_line->HasSwitch(switches::kVideoDecoderStub)) {
     DLOG(INFO) << "Use ShellRawVideoDecoderStub";
     options.media_module_options.use_video_decoder_stub = true;
diff --git a/src/cobalt/browser/switches.cc b/src/cobalt/browser/switches.cc
index 7ebcce6..b6a41c1 100644
--- a/src/cobalt/browser/switches.cc
+++ b/src/cobalt/browser/switches.cc
@@ -88,6 +88,10 @@
 // "timed_trace.json" in the log output directory.
 const char kTimedTrace[] = "timed_trace";
 
+// Set the video container size override.
+extern const char kVideoContainerSizeOverride[] =
+    "video_container_size_override";
+
 // Decode video data using ShellRawVideoDecoderStub.
 extern const char kVideoDecoderStub[] = "video_decoder_stub";
 
diff --git a/src/cobalt/browser/switches.h b/src/cobalt/browser/switches.h
index 025841b..3531931 100644
--- a/src/cobalt/browser/switches.h
+++ b/src/cobalt/browser/switches.h
@@ -40,6 +40,7 @@
 extern const char kShutdownAfter[];
 extern const char kStubImageDecoder[];
 extern const char kTimedTrace[];
+extern const char kVideoContainerSizeOverride[];
 extern const char kVideoDecoderStub[];
 extern const char kWebDriverPort[];
 #endif  // ENABLE_DEBUG_COMMAND_LINE_SWITCHES
diff --git a/src/cobalt/browser/web_module.cc b/src/cobalt/browser/web_module.cc
index 0ad6dc9..372db0d 100644
--- a/src/cobalt/browser/web_module.cc
+++ b/src/cobalt/browser/web_module.cc
@@ -124,9 +124,9 @@
 
   void OnCspPolicyChanged();
 
-  scoped_refptr<script::GlobalObjectProxy> global_object_proxy() {
+  scoped_refptr<script::GlobalEnvironment> global_environment() {
     DCHECK(thread_checker_.CalledOnValidThread());
-    return global_object_proxy_;
+    return global_environment_;
   }
 
   void OnError(const std::string& error) {
@@ -170,7 +170,7 @@
 
   // JavaScript Global Object for the browser. There should be one per window,
   // but since there is only one window, we can have one per browser.
-  scoped_refptr<script::GlobalObjectProxy> global_object_proxy_;
+  scoped_refptr<script::GlobalEnvironment> global_environment_;
 
   // Used by |Console| to obtain a JavaScript stack trace.
   scoped_ptr<script::ExecutionState> execution_state_;
@@ -281,15 +281,15 @@
   javascript_engine_ = script::JavaScriptEngine::CreateEngine();
   DCHECK(javascript_engine_);
 
-  global_object_proxy_ = javascript_engine_->CreateGlobalObjectProxy();
-  DCHECK(global_object_proxy_);
+  global_environment_ = javascript_engine_->CreateGlobalEnvironment();
+  DCHECK(global_environment_);
 
   execution_state_ =
-      script::ExecutionState::CreateExecutionState(global_object_proxy_);
+      script::ExecutionState::CreateExecutionState(global_environment_);
   DCHECK(execution_state_);
 
   script_runner_ =
-      script::ScriptRunner::CreateScriptRunner(global_object_proxy_);
+      script::ScriptRunner::CreateScriptRunner(global_environment_);
   DCHECK(script_runner_);
 
   media_source_registry_.reset(new dom::MediaSource::Registry);
@@ -318,11 +318,10 @@
   environment_settings_.reset(new dom::DOMSettings(
       kDOMMaxElementDepth, fetcher_factory_.get(), data.network_module, window_,
       media_source_registry_.get(), javascript_engine_.get(),
-      global_object_proxy_.get(), data.options.dom_settings_options));
+      global_environment_.get(), data.options.dom_settings_options));
   DCHECK(environment_settings_);
 
-  global_object_proxy_->CreateGlobalObject(window_,
-                                           environment_settings_.get());
+  global_environment_->CreateGlobalObject(window_, environment_settings_.get());
 
   render_tree_produced_callback_ = data.render_tree_produced_callback;
   DCHECK(!render_tree_produced_callback_.is_null());
@@ -348,11 +347,11 @@
   if (data.options.csp_enforcement_mode == dom::kCspEnforcementDisable) {
     // If CSP is disabled, enable eval(). Otherwise, it will be enabled by
     // a CSP directive.
-    global_object_proxy_->EnableEval();
+    global_environment_->EnableEval();
   }
 #endif
 
-  global_object_proxy_->SetReportEvalCallback(
+  global_environment_->SetReportEvalCallback(
       base::Bind(&dom::CspDelegate::ReportEval,
                  base::Unretained(window_->document()->csp_delegate())));
 
@@ -371,7 +370,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(is_running_);
   is_running_ = false;
-  global_object_proxy_->SetReportEvalCallback(base::Closure());
+  global_environment_->SetReportEvalCallback(base::Closure());
   window_->DispatchEvent(new dom::Event(base::Tokens::unload()));
   document_load_observer_.reset();
 
@@ -387,7 +386,7 @@
   media_source_registry_.reset();
   script_runner_.reset();
   execution_state_.reset();
-  global_object_proxy_ = NULL;
+  global_environment_ = NULL;
   javascript_engine_.reset();
   web_module_stat_tracker_.reset();
   local_storage_database_.reset();
@@ -470,9 +469,9 @@
   bool allow_eval =
       window_->document()->csp_delegate()->AllowEval(&eval_disabled_message);
   if (allow_eval) {
-    global_object_proxy_->EnableEval();
+    global_environment_->EnableEval();
   } else {
-    global_object_proxy_->DisableEval(eval_disabled_message);
+    global_environment_->DisableEval(eval_disabled_message);
   }
 }
 
@@ -485,11 +484,11 @@
   DCHECK(window_);
   DCHECK(window_weak_);
   DCHECK(window_->document());
-  DCHECK(global_object_proxy_);
+  DCHECK(global_environment_);
 
   window_driver_out->reset(new webdriver::WindowDriver(
       window_id, window_weak_,
-      base::Bind(&WebModule::Impl::global_object_proxy, base::Unretained(this)),
+      base::Bind(&WebModule::Impl::global_environment, base::Unretained(this)),
       base::MessageLoopProxy::current()));
 }
 #endif  // defined(ENABLE_WEBDRIVER)
@@ -499,7 +498,7 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(is_running_);
   DCHECK(window_);
-  DCHECK(global_object_proxy_);
+  DCHECK(global_environment_);
   DCHECK(resource_provider_);
 
   if (debug_server_module_) {
@@ -507,7 +506,7 @@
   }
 
   debug_server_module_.reset(new debug::DebugServerModule(
-      window_->console(), global_object_proxy_, debug_overlay_.get(),
+      window_->console(), global_environment_, debug_overlay_.get(),
       resource_provider_, window_));
 }
 #endif  // defined(ENABLE_DEBUG_CONSOLE)
@@ -515,12 +514,12 @@
 void WebModule::Impl::InjectCustomWindowAttributes(
     const Options::InjectedWindowAttributes& attributes) {
   DCHECK(thread_checker_.CalledOnValidThread());
-  DCHECK(global_object_proxy_);
+  DCHECK(global_environment_);
 
   for (Options::InjectedWindowAttributes::const_iterator iter =
            attributes.begin();
        iter != attributes.end(); ++iter) {
-    global_object_proxy_->Bind(iter->first, iter->second.Run());
+    global_environment_->Bind(iter->first, iter->second.Run());
   }
 }
 
diff --git a/src/cobalt/browser/web_module.h b/src/cobalt/browser/web_module.h
index 07fc9b4..854579a 100644
--- a/src/cobalt/browser/web_module.h
+++ b/src/cobalt/browser/web_module.h
@@ -47,7 +47,7 @@
 #include "cobalt/media/media_module.h"
 #include "cobalt/network/network_module.h"
 #include "cobalt/render_tree/resource_provider.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/javascript_engine.h"
 #include "cobalt/script/script_runner.h"
 #include "cobalt/webdriver/session_driver.h"
diff --git a/src/cobalt/build/build.id b/src/cobalt/build/build.id
index 7eac871..f179e93 100644
--- a/src/cobalt/build/build.id
+++ b/src/cobalt/build/build.id
@@ -1 +1 @@
-10943
\ No newline at end of file
+10999
\ No newline at end of file
diff --git a/src/cobalt/debug/debug_script_runner.cc b/src/cobalt/debug/debug_script_runner.cc
index 325ab72..ea330dd 100644
--- a/src/cobalt/debug/debug_script_runner.cc
+++ b/src/cobalt/debug/debug_script_runner.cc
@@ -33,15 +33,15 @@
 }  // namespace
 
 DebugScriptRunner::DebugScriptRunner(
-    script::GlobalObjectProxy* global_object_proxy,
+    script::GlobalEnvironment* global_environment,
     const dom::CspDelegate* csp_delegate,
     const OnEventCallback& on_event_callback)
-    : global_object_proxy_(global_object_proxy),
+    : global_environment_(global_environment),
       csp_delegate_(csp_delegate),
       on_event_callback_(on_event_callback) {
   // Bind this object to the global object so it can persist state and be
   // accessed from any of the debug components.
-  global_object_proxy_->Bind(kObjectIdentifier, make_scoped_refptr(this));
+  global_environment_->Bind(kObjectIdentifier, make_scoped_refptr(this));
 }
 
 base::optional<std::string> DebugScriptRunner::CreateRemoteObject(
@@ -78,13 +78,13 @@
 
 bool DebugScriptRunner::EvaluateScript(const std::string& js_code,
                                        std::string* result) {
-  DCHECK(global_object_proxy_);
+  DCHECK(global_environment_);
   DCHECK(result);
   scoped_refptr<script::SourceCode> source_code =
       script::SourceCode::CreateSourceCode(js_code, GetInlineSourceLocation());
 
   ForceEnableEval();
-  bool succeeded = global_object_proxy_->EvaluateScript(source_code, result);
+  bool succeeded = global_environment_->EvaluateScript(source_code, result);
   SetEvalAllowedFromCsp();
   return succeeded;
 }
@@ -113,20 +113,20 @@
 }
 
 void DebugScriptRunner::ForceEnableEval() {
-  global_object_proxy_->EnableEval();
-  global_object_proxy_->SetReportEvalCallback(base::Closure());
+  global_environment_->EnableEval();
+  global_environment_->SetReportEvalCallback(base::Closure());
 }
 
 void DebugScriptRunner::SetEvalAllowedFromCsp() {
   std::string eval_disabled_message;
   bool allow_eval = csp_delegate_->AllowEval(&eval_disabled_message);
   if (allow_eval) {
-    global_object_proxy_->EnableEval();
+    global_environment_->EnableEval();
   } else {
-    global_object_proxy_->DisableEval(eval_disabled_message);
+    global_environment_->DisableEval(eval_disabled_message);
   }
 
-  global_object_proxy_->SetReportEvalCallback(base::Bind(
+  global_environment_->SetReportEvalCallback(base::Bind(
       &dom::CspDelegate::ReportEval, base::Unretained(csp_delegate_)));
 }
 
diff --git a/src/cobalt/debug/debug_script_runner.h b/src/cobalt/debug/debug_script_runner.h
index c82600f..a076098 100644
--- a/src/cobalt/debug/debug_script_runner.h
+++ b/src/cobalt/debug/debug_script_runner.h
@@ -23,7 +23,7 @@
 #include "base/optional.h"
 #include "cobalt/dom/csp_delegate.h"
 #include "cobalt/script/callback_function.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 #include "cobalt/script/wrappable.h"
@@ -55,7 +55,7 @@
   typedef script::ScriptObject<CreateRemoteObjectCallback>
       CreateRemoteObjectCallbackHolder;
 
-  DebugScriptRunner(script::GlobalObjectProxy* global_object_proxy,
+  DebugScriptRunner(script::GlobalEnvironment* global_environment,
                     const dom::CspDelegate* csp_delegate,
                     const OnEventCallback& on_event_callback);
 
@@ -97,7 +97,7 @@
   void SetEvalAllowedFromCsp();
 
   // No ownership.
-  script::GlobalObjectProxy* global_object_proxy_;
+  script::GlobalEnvironment* global_environment_;
 
   // Non-owned reference to let this object query whether CSP allows eval.
   const dom::CspDelegate* csp_delegate_;
diff --git a/src/cobalt/debug/debug_server.cc b/src/cobalt/debug/debug_server.cc
index 3b95234..9057f77 100644
--- a/src/cobalt/debug/debug_server.cc
+++ b/src/cobalt/debug/debug_server.cc
@@ -37,10 +37,10 @@
 
 void DebugServer::RemoveClient(DebugClient* client) { clients_.erase(client); }
 
-DebugServer::DebugServer(script::GlobalObjectProxy* global_object_proxy,
+DebugServer::DebugServer(script::GlobalEnvironment* global_environment,
                          const dom::CspDelegate* csp_delegate)
     : ALLOW_THIS_IN_INITIALIZER_LIST(script_runner_(new DebugScriptRunner(
-          global_object_proxy, csp_delegate,
+          global_environment, csp_delegate,
           base::Bind(&DebugServer::OnEventInternal, base::Unretained(this))))),
       message_loop_(MessageLoop::current()),
       is_paused_(false),
diff --git a/src/cobalt/debug/debug_server.h b/src/cobalt/debug/debug_server.h
index c10a9f1..d9fd8f9 100644
--- a/src/cobalt/debug/debug_server.h
+++ b/src/cobalt/debug/debug_server.h
@@ -34,7 +34,7 @@
 #include "cobalt/debug/debug_script_runner.h"
 #include "cobalt/debug/json_object.h"
 #include "cobalt/dom/csp_delegate.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/opaque_handle.h"
 #include "cobalt/script/script_object.h"
 
@@ -97,7 +97,7 @@
   // A command execution function stored in the command registry.
   typedef base::Callback<JSONObject(const JSONObject& params)> Command;
 
-  DebugServer(script::GlobalObjectProxy* global_object_proxy,
+  DebugServer(script::GlobalEnvironment* global_environment,
               const dom::CspDelegate* csp_delegate);
 
   // Adds a client to this object. This object does not own the client, but
diff --git a/src/cobalt/debug/debug_server_module.cc b/src/cobalt/debug/debug_server_module.cc
index 4a69361..d656d93 100644
--- a/src/cobalt/debug/debug_server_module.cc
+++ b/src/cobalt/debug/debug_server_module.cc
@@ -22,20 +22,20 @@
 namespace debug {
 
 DebugServerModule::DebugServerModule(
-    dom::Console* console, script::GlobalObjectProxy* global_object_proxy,
+    dom::Console* console, script::GlobalEnvironment* global_environment,
     RenderOverlay* render_overlay,
     render_tree::ResourceProvider* resource_provider, dom::Window* window) {
-  ConstructionData data(console, global_object_proxy, MessageLoop::current(),
+  ConstructionData data(console, global_environment, MessageLoop::current(),
                         render_overlay, resource_provider, window);
   Build(data);
 }
 
 DebugServerModule::DebugServerModule(
-    dom::Console* console, script::GlobalObjectProxy* global_object_proxy,
+    dom::Console* console, script::GlobalEnvironment* global_environment,
     RenderOverlay* render_overlay,
     render_tree::ResourceProvider* resource_provider, dom::Window* window,
     MessageLoop* message_loop) {
-  ConstructionData data(console, global_object_proxy, message_loop,
+  ConstructionData data(console, global_environment, message_loop,
                         render_overlay, resource_provider, window);
   Build(data);
 }
@@ -63,14 +63,14 @@
                                       base::WaitableEvent* created) {
   DCHECK(MessageLoop::current() == data.message_loop);
   DCHECK(data.console);
-  DCHECK(data.global_object_proxy);
+  DCHECK(data.global_environment);
   DCHECK(data.render_overlay);
   DCHECK(data.resource_provider);
   DCHECK(data.window);
 
   // Create the debug server itself.
   debug_server_.reset(new debug::DebugServer(
-      data.global_object_proxy, data.window->document()->csp_delegate()));
+      data.global_environment, data.window->document()->csp_delegate()));
 
   // Create render layers for the components that need them and chain them
   // together. Ownership will be passed to the component that uses each layer.
@@ -84,7 +84,7 @@
   // Create the script debugger. This is owned by this object, and is
   // accessible to all the debugger components.
   script_debugger_ =
-      script::ScriptDebugger::CreateDebugger(data.global_object_proxy, this);
+      script::ScriptDebugger::CreateDebugger(data.global_environment, this);
 
   // Create the connector object that provides functionality for each
   // component to interact with the debug server, script debugger, etc.
diff --git a/src/cobalt/debug/debug_server_module.h b/src/cobalt/debug/debug_server_module.h
index d3bbd3c..3cfa355 100644
--- a/src/cobalt/debug/debug_server_module.h
+++ b/src/cobalt/debug/debug_server_module.h
@@ -32,7 +32,7 @@
 #include "cobalt/dom/console.h"
 #include "cobalt/dom/window.h"
 #include "cobalt/render_tree/resource_provider.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/script_debugger.h"
 
 namespace cobalt {
@@ -47,14 +47,14 @@
  public:
   // Construct the debug server on the current message loop.
   DebugServerModule(dom::Console* console,
-                    script::GlobalObjectProxy* global_object_proxy,
+                    script::GlobalEnvironment* global_environment,
                     RenderOverlay* render_overlay,
                     render_tree::ResourceProvider* resource_provider,
                     dom::Window* window);
 
   // Construct the debug server on the specified message loop.
   DebugServerModule(dom::Console* console,
-                    script::GlobalObjectProxy* global_object_proxy,
+                    script::GlobalEnvironment* global_environment,
                     RenderOverlay* render_overlay,
                     render_tree::ResourceProvider* resource_provider,
                     dom::Window* window, MessageLoop* message_loop);
@@ -68,19 +68,19 @@
   // persisted.
   struct ConstructionData {
     ConstructionData(dom::Console* console,
-                     script::GlobalObjectProxy* global_object_proxy,
+                     script::GlobalEnvironment* global_environment,
                      MessageLoop* message_loop, RenderOverlay* render_overlay,
                      render_tree::ResourceProvider* resource_provider,
                      dom::Window* window)
         : console(console),
-          global_object_proxy(global_object_proxy),
+          global_environment(global_environment),
           message_loop(message_loop),
           render_overlay(render_overlay),
           resource_provider(resource_provider),
           window(window) {}
 
     dom::Console* console;
-    script::GlobalObjectProxy* global_object_proxy;
+    script::GlobalEnvironment* global_environment;
     MessageLoop* message_loop;
     RenderOverlay* render_overlay;
     render_tree::ResourceProvider* resource_provider;
diff --git a/src/cobalt/deprecated/platform_delegate.cc b/src/cobalt/deprecated/platform_delegate.cc
index 6e7baaf..41befce 100644
--- a/src/cobalt/deprecated/platform_delegate.cc
+++ b/src/cobalt/deprecated/platform_delegate.cc
@@ -108,6 +108,14 @@
   return false;
 }
 
+void PlatformDelegate::SetVideoContainerSizeOverride(
+    const std::string& video_container_size_override) {
+  DLOG(INFO) << "Change VideoContainerSizeOverride from \""
+             << video_container_size_override_ << "\" to \""
+             << video_container_size_override << "\"";
+  video_container_size_override_ = video_container_size_override;
+}
+
 PlatformDelegate::~PlatformDelegate() {}
 
 }   // namespace deprecated
diff --git a/src/cobalt/deprecated/platform_delegate.h b/src/cobalt/deprecated/platform_delegate.h
index 8e64aa7..42d4ba1 100644
--- a/src/cobalt/deprecated/platform_delegate.h
+++ b/src/cobalt/deprecated/platform_delegate.h
@@ -61,6 +61,15 @@
                                const void* address, size_t size) const;
   virtual bool DeregisterUserLog(int user_log_index) const;
 
+  // Returns a string in the form of "1920x1080" to inform the player to use the
+  // returned resolution instead of the window size as the maximum resolution of
+  // video being played.
+  std::string GetVideoContainerSizeOverride() const {
+    return video_container_size_override_;
+  }
+  void SetVideoContainerSizeOverride(
+      const std::string& video_container_size_override);
+
   const std::string& dir_source_root() const { return dir_source_root_; }
   const std::string& game_content_path() const { return game_content_path_; }
   const std::string& screenshot_output_path() const {
@@ -81,6 +90,7 @@
   std::string screenshot_output_path_;
   std::string logging_output_path_;
   std::string temp_path_;
+  std::string video_container_size_override_;
 
  private:
   // Each platform implements the Create() function to return its own
diff --git a/src/cobalt/dom/DOMImplementation.idl b/src/cobalt/dom/DOMImplementation.idl
index c1d72a3..4dce7eb 100644
--- a/src/cobalt/dom/DOMImplementation.idl
+++ b/src/cobalt/dom/DOMImplementation.idl
@@ -16,6 +16,7 @@
 
 // https://www.w3.org/TR/dom/#domimplementation
 
+[ConstructorCallWith=EnvironmentSettings]
 interface DOMImplementation {
   [NewObject] XMLDocument createDocument(DOMString? namespaceName, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
 };
diff --git a/src/cobalt/dom/csp_violation_reporter.cc b/src/cobalt/dom/csp_violation_reporter.cc
index 1a9599f..619fc8c 100644
--- a/src/cobalt/dom/csp_violation_reporter.cc
+++ b/src/cobalt/dom/csp_violation_reporter.cc
@@ -23,7 +23,7 @@
 #include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/security_policy_violation_event.h"
 #include "cobalt/network/net_poster.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "googleurl/src/gurl.h"
 
 namespace cobalt {
@@ -94,10 +94,10 @@
   event_data->effective_directive = violation_info.effective_directive;
   event_data->original_policy = violation_info.header;
 
-  script::GlobalObjectProxy* global_object_proxy =
-      document->html_element_context()->script_runner()->GetGlobalObjectProxy();
+  script::GlobalEnvironment* global_environment =
+      document->html_element_context()->script_runner()->GetGlobalEnvironment();
   const std::vector<script::StackFrame>& stack_trace =
-      global_object_proxy->GetStackTrace(1);
+      global_environment->GetStackTrace(1);
   if (stack_trace.size() > 0) {
     event_data->line_number = stack_trace[0].line_number;
     event_data->column_number = stack_trace[0].column_number;
diff --git a/src/cobalt/dom/document.cc b/src/cobalt/dom/document.cc
index 8e3c80d..928ba1f 100644
--- a/src/cobalt/dom/document.cc
+++ b/src/cobalt/dom/document.cc
@@ -42,7 +42,6 @@
 #include "cobalt/dom/html_body_element.h"
 #include "cobalt/dom/html_collection.h"
 #include "cobalt/dom/html_element.h"
-#include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/html_element_factory.h"
 #include "cobalt/dom/html_head_element.h"
 #include "cobalt/dom/html_html_element.h"
@@ -63,29 +62,25 @@
     : ALLOW_THIS_IN_INITIALIZER_LIST(Node(this)),
       html_element_context_(html_element_context),
       window_(options.window),
-      implementation_(new DOMImplementation()),
+      implementation_(new DOMImplementation(html_element_context)),
       ALLOW_THIS_IN_INITIALIZER_LIST(
           style_sheets_(new cssom::StyleSheetList(this))),
-      ALLOW_THIS_IN_INITIALIZER_LIST(font_cache_(new FontCache(
-          html_element_context_ ? html_element_context_->resource_provider()
-                                : NULL,
-          html_element_context_ ? html_element_context_->remote_typeface_cache()
-                                : NULL,
-          base::Bind(&Document::OnTypefaceLoadEvent, base::Unretained(this)),
-          html_element_context_ ? html_element_context_->language()
-                                : "en-US"))),
       loading_counter_(0),
       should_dispatch_load_event_(true),
       is_selector_tree_dirty_(true),
       is_computed_style_dirty_(true),
       are_font_faces_dirty_(true),
       are_keyframes_dirty_(true),
+#if defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
+      partial_layout_is_enabled_(true),
+#endif  // defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
       navigation_start_clock_(options.navigation_start_clock),
       ALLOW_THIS_IN_INITIALIZER_LIST(
           default_timeline_(new DocumentTimeline(this, 0))),
       user_agent_style_sheet_(options.user_agent_style_sheet),
       initial_computed_style_declaration_(
           new cssom::CSSComputedStyleDeclaration()) {
+  DCHECK(html_element_context_);
   DCHECK(options.url.is_empty() || options.url.is_valid());
 
   if (options.viewport_size) {
@@ -109,29 +104,30 @@
       base::Bind(&CspDelegate::CanLoad, base::Unretained(csp_delegate_.get()),
                  CspDelegate::kLocation));
 
-  if (IsActiveDocument()) {
-    if (html_element_context_ &&
-        html_element_context_->remote_typeface_cache()) {
+  font_cache_.reset(new FontCache(
+      html_element_context_->resource_provider(),
+      html_element_context_->remote_typeface_cache(),
+      base::Bind(&Document::OnTypefaceLoadEvent, base::Unretained(this)),
+      html_element_context_->language()));
+
+  if (HasBrowsingContext()) {
+    if (html_element_context_->remote_typeface_cache()) {
       html_element_context_->remote_typeface_cache()->set_security_callback(
           base::Bind(&CspDelegate::CanLoad,
                      base::Unretained(csp_delegate_.get()),
                      CspDelegate::kFont));
     }
 
-    if (html_element_context_ && html_element_context_->image_cache()) {
+    if (html_element_context_->image_cache()) {
       html_element_context_->image_cache()->set_security_callback(base::Bind(
           &CspDelegate::CanLoad, base::Unretained(csp_delegate_.get()),
           CspDelegate::kImage));
     }
-
-#if defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
-    partial_layout_is_enabled_ = true;
-#endif  // defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
-
-    // Sample the timeline upon initialization.
-    SampleTimelineTime();
   }
 
+  // Sample the timeline upon initialization.
+  SampleTimelineTime();
+
   // Call OnInsertedIntoDocument() immediately to ensure that the Document
   // object itself is considered to be "in the document".
   OnInsertedIntoDocument();
@@ -179,7 +175,6 @@
   } else {
     std::string lower_local_name = local_name;
     StringToLowerASCII(&lower_local_name);
-    DCHECK(html_element_context_);
     DCHECK(html_element_context_->html_element_factory());
     return html_element_context_->html_element_factory()->CreateHTMLElement(
         this, base::Token(lower_local_name));
@@ -531,8 +526,6 @@
 void Document::UpdateComputedStyles() {
   TRACE_EVENT0("cobalt::dom", "Document::UpdateComputedStyles()");
 
-  DCHECK(IsActiveDocument());
-
   UpdateSelectorTree();
   UpdateKeyframes();
   UpdateFontFaces();
@@ -650,7 +643,7 @@
 void Document::DispatchOnLoadEvent() {
   TRACE_EVENT0("cobalt::dom", "Document::DispatchOnLoadEvent()");
 
-  if (IsActiveDocument()) {
+  if (HasBrowsingContext()) {
     // Update the current timeline sample time and then update computed styles
     // before dispatching the onload event.  This guarantees that computed
     // styles have been calculated before JavaScript executes onload event
diff --git a/src/cobalt/dom/document.h b/src/cobalt/dom/document.h
index 4d45315..aee887f 100644
--- a/src/cobalt/dom/document.h
+++ b/src/cobalt/dom/document.h
@@ -36,6 +36,7 @@
 #include "cobalt/dom/csp_delegate_type.h"
 #include "cobalt/dom/document_timeline.h"
 #include "cobalt/dom/event.h"
+#include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/location.h"
 #include "cobalt/dom/node.h"
 #include "cobalt/math/size.h"
@@ -79,14 +80,13 @@
 // (the DOM tree, including elements such as <head> and <body>) and provides
 // functionality which is global to the document.
 //   https://www.w3.org/TR/dom/#document
-//
-// In the spec, "A document is assumed to be an XML document unless it is
-// flagged as being an HTML document". In Cobalt it is always considered as HTML
-// document.
 class Document : public Node, public cssom::MutationObserver {
  public:
   struct Options {
-    Options() : cookie_jar(NULL), csp_enforcement_mode(kCspEnforcementEnable) {}
+    Options()
+        : window(NULL),
+          cookie_jar(NULL),
+          csp_enforcement_mode(kCspEnforcementEnable) {}
     explicit Options(const GURL& url_value)
         : url(url_value),
           window(NULL),
@@ -338,30 +338,21 @@
   // Animations, using all the style sheets in the document.
   void UpdateKeyframes();
 
-  // Returns whether the document is the active document shown in the window.
-  // TODO: Currently implemented by looking up whether viewport size is set,
-  // ideally it should depend on whether browser context exists.
-  bool IsActiveDocument() { return !!viewport_size_; }
+  // Returns whether the document has browsing context. Having the browsing
+  // context means the document is shown on the screen.
+  //   https://www.w3.org/TR/html5/browsers.html#browsing-context
+  bool HasBrowsingContext() { return !!window_; }
 
   // Reference to HTML element context.
   HTMLElementContext* const html_element_context_;
-  // Reference to the Window object. We cannot hold a strong reference,
-  // otherwise we create a reference loop.
+  // Reference to the associated window object.
   Window* window_;
   // Associated DOM implementation object.
   scoped_refptr<DOMImplementation> implementation_;
-  // Associated location object.
-  scoped_refptr<Location> location_;
-
-  // Content Security Policy enforcement for this document.
-  scoped_ptr<CspDelegate> csp_delegate_;
-
   // List of CSS style sheets.
   scoped_refptr<cssom::StyleSheetList> style_sheets_;
   // List of scripts that will execute in order as soon as possible.
   std::deque<HTMLScriptElement*> scripts_to_be_executed_;
-  // The font cache for this document.
-  scoped_ptr<FontCache> font_cache_;
   // A mapping from keyframes declaration names to their parsed structure.
   cssom::CSSKeyframesRule::NameMap keyframes_map_;
   // The number of ongoing loadings.
@@ -374,6 +365,19 @@
   bool is_computed_style_dirty_;
   bool are_font_faces_dirty_;
   bool are_keyframes_dirty_;
+#if defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
+  bool partial_layout_is_enabled_;
+#endif  // defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
+
+  // Viewport size.
+  base::optional<math::Size> viewport_size_;
+  // Content Security Policy enforcement for this document.
+  scoped_ptr<CspDelegate> csp_delegate_;
+  network_bridge::CookieJar* cookie_jar_;
+  // Associated location object.
+  scoped_refptr<Location> location_;
+  // The font cache for this document.
+  scoped_ptr<FontCache> font_cache_;
 
   // Weak reference to the active element.
   base::WeakPtr<Element> active_element_;
@@ -381,24 +385,15 @@
   ObserverList<DocumentObserver> observers_;
   // Selector Tree.
   cssom::SelectorTree selector_tree_;
-  network_bridge::CookieJar* cookie_jar_;
-
   // The document's latest sample from the global clock, used for updating
   // animations.
   const scoped_refptr<base::Clock> navigation_start_clock_;
   scoped_refptr<DocumentTimeline> default_timeline_;
 
-#if defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
-  bool partial_layout_is_enabled_;
-#endif  // defined(ENABLE_PARTIAL_LAYOUT_CONTROL)
-
   base::Closure synchronous_layout_callback_;
 
   scoped_refptr<cssom::CSSStyleSheet> user_agent_style_sheet_;
 
-  // Viewport size.
-  base::optional<math::Size> viewport_size_;
-
   // Computed style of the initial containing block, width and height come from
   // the viewport size.
   scoped_refptr<cssom::CSSComputedStyleDeclaration>
diff --git a/src/cobalt/dom/dom_implementation.cc b/src/cobalt/dom/dom_implementation.cc
index b79da21..de9cd44 100644
--- a/src/cobalt/dom/dom_implementation.cc
+++ b/src/cobalt/dom/dom_implementation.cc
@@ -16,9 +16,18 @@
 
 #include "cobalt/dom/dom_implementation.h"
 
+#include "cobalt/dom/dom_settings.h"
+#include "cobalt/dom/window.h"
+
 namespace cobalt {
 namespace dom {
 
+DOMImplementation::DOMImplementation(script::EnvironmentSettings* settings) {
+  html_element_context_ = base::polymorphic_downcast<DOMSettings*>(settings)
+                              ->window()
+                              ->html_element_context();
+}
+
 scoped_refptr<XMLDocument> DOMImplementation::CreateDocument(
     base::optional<std::string> namespace_name,
     const std::string& qualified_name) {
@@ -31,7 +40,7 @@
   UNREFERENCED_PARAMETER(namespace_name);
   UNREFERENCED_PARAMETER(qualified_name);
   DCHECK(!doctype);
-  return new XMLDocument();
+  return new XMLDocument(html_element_context_);
 }
 
 }  // namespace dom
diff --git a/src/cobalt/dom/dom_implementation.h b/src/cobalt/dom/dom_implementation.h
index 20a2f3b..654af71 100644
--- a/src/cobalt/dom/dom_implementation.h
+++ b/src/cobalt/dom/dom_implementation.h
@@ -23,18 +23,24 @@
 #include "base/optional.h"
 #include "cobalt/dom/document_type.h"
 #include "cobalt/dom/xml_document.h"
+#include "cobalt/script/environment_settings.h"
 #include "cobalt/script/wrappable.h"
 
 namespace cobalt {
 namespace dom {
 
+class DOMSettings;
+class HTMLElementContext;
+
 // The DOMImplementation interface represent an object providing methods which
 // are not dependent on any particular document. Such an object is returned by
 // the Document.implementation property.
 //   https://www.w3.org/TR/2015/WD-dom-20150618/#interface-domimplementation
 class DOMImplementation : public script::Wrappable {
  public:
-  DOMImplementation() {}
+  explicit DOMImplementation(script::EnvironmentSettings* settings);
+  explicit DOMImplementation(HTMLElementContext* html_element_context)
+      : html_element_context_(html_element_context) {}
   ~DOMImplementation() OVERRIDE {}
 
   // Web API: DOMImplementation
@@ -48,6 +54,8 @@
   DEFINE_WRAPPABLE_TYPE(DOMImplementation);
 
  private:
+  HTMLElementContext* html_element_context_;
+
   DISALLOW_COPY_AND_ASSIGN(DOMImplementation);
 };
 
diff --git a/src/cobalt/dom/dom_implementation_test.cc b/src/cobalt/dom/dom_implementation_test.cc
index f03bc7e..6226a89 100644
--- a/src/cobalt/dom/dom_implementation_test.cc
+++ b/src/cobalt/dom/dom_implementation_test.cc
@@ -18,6 +18,7 @@
 
 #include "base/memory/ref_counted.h"
 #include "cobalt/dom/document.h"
+#include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/xml_document.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -25,7 +26,10 @@
 namespace dom {
 
 TEST(DOMImplementationTest, CreateDocumentShouldCreateXMLDocument) {
-  scoped_refptr<DOMImplementation> dom_implementation = new DOMImplementation();
+  HTMLElementContext html_element_context(NULL, NULL, NULL, NULL, NULL, NULL,
+                                          NULL, NULL, NULL, NULL, NULL, "");
+  scoped_refptr<DOMImplementation> dom_implementation =
+      new DOMImplementation(&html_element_context);
   scoped_refptr<Document> document =
       dom_implementation->CreateDocument(base::optional<std::string>(""), "");
   EXPECT_TRUE(document->IsXMLDocument());
diff --git a/src/cobalt/dom/dom_parser.cc b/src/cobalt/dom/dom_parser.cc
index c70d4e2..e7c8cd4 100644
--- a/src/cobalt/dom/dom_parser.cc
+++ b/src/cobalt/dom/dom_parser.cc
@@ -46,7 +46,7 @@
     case kApplicationXhtmlXml:
     case kImageSvgXml:
       return html_element_context_->dom_parser()->ParseXMLDocument(
-          str, GetInlineSourceLocation());
+          str, html_element_context_, GetInlineSourceLocation());
     case kMaxSupportedType:
     default:
       LOG(WARNING) << "DOMParse.ParseFromString received invalid type value.";
diff --git a/src/cobalt/dom/dom_settings.cc b/src/cobalt/dom/dom_settings.cc
index 894d524..6588e93 100644
--- a/src/cobalt/dom/dom_settings.cc
+++ b/src/cobalt/dom/dom_settings.cc
@@ -27,7 +27,7 @@
                          const scoped_refptr<Window>& window,
                          MediaSource::Registry* media_source_registry,
                          script::JavaScriptEngine* engine,
-                         script::GlobalObjectProxy* global_object_proxy,
+                         script::GlobalEnvironment* global_environment,
                          const Options& options)
     : max_dom_element_depth_(max_dom_element_depth),
       fetcher_factory_(fetcher_factory),
@@ -37,7 +37,7 @@
       array_buffer_cache_(options.array_buffer_cache),
       media_source_registry_(media_source_registry),
       javascript_engine_(engine),
-      global_object_proxy_(global_object_proxy) {
+      global_environment_(global_environment) {
   if (array_buffer_allocator_) {
     DCHECK(options.array_buffer_cache);
   } else {
diff --git a/src/cobalt/dom/dom_settings.h b/src/cobalt/dom/dom_settings.h
index ea6f74b..8366e67 100644
--- a/src/cobalt/dom/dom_settings.h
+++ b/src/cobalt/dom/dom_settings.h
@@ -33,7 +33,7 @@
 class NetworkModule;
 }
 namespace script {
-class GlobalObjectProxy;
+class GlobalEnvironment;
 class JavaScriptEngine;
 }
 namespace dom {
@@ -63,7 +63,7 @@
               const scoped_refptr<Window>& window,
               MediaSource::Registry* media_source_registry,
               script::JavaScriptEngine* engine,
-              script::GlobalObjectProxy* global_object_proxy,
+              script::GlobalEnvironment* global_environment_proxy,
               const Options& options = Options());
   ~DOMSettings() OVERRIDE;
 
@@ -89,8 +89,8 @@
   script::JavaScriptEngine* javascript_engine() const {
     return javascript_engine_;
   }
-  script::GlobalObjectProxy* global_object() const {
-    return global_object_proxy_;
+  script::GlobalEnvironment* global_environment() const {
+    return global_environment_;
   }
   MediaSource::Registry* media_source_registry() const {
     return media_source_registry_;
@@ -108,7 +108,7 @@
   ArrayBuffer::Cache* array_buffer_cache_;
   MediaSource::Registry* media_source_registry_;
   script::JavaScriptEngine* javascript_engine_;
-  script::GlobalObjectProxy* global_object_proxy_;
+  script::GlobalEnvironment* global_environment_;
 
   DISALLOW_COPY_AND_ASSIGN(DOMSettings);
 };
diff --git a/src/cobalt/dom/html_image_element.cc b/src/cobalt/dom/html_image_element.cc
index ac05e75..007192d 100644
--- a/src/cobalt/dom/html_image_element.cc
+++ b/src/cobalt/dom/html_image_element.cc
@@ -25,7 +25,7 @@
 #include "cobalt/dom/document.h"
 #include "cobalt/dom/dom_settings.h"
 #include "cobalt/dom/html_element_context.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "googleurl/src/gurl.h"
 
 namespace cobalt {
@@ -190,12 +190,11 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK_GE(prevent_garbage_collection_count_, 0);
   if (prevent_garbage_collection_count_++ == 0) {
-    DCHECK(html_element_context());
     DCHECK(html_element_context()->script_runner());
-    DCHECK(html_element_context()->script_runner()->GetGlobalObjectProxy());
+    DCHECK(html_element_context()->script_runner()->GetGlobalEnvironment());
     html_element_context()
         ->script_runner()
-        ->GetGlobalObjectProxy()
+        ->GetGlobalEnvironment()
         ->PreventGarbageCollection(make_scoped_refptr(this));
   }
 }
@@ -204,9 +203,11 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK_GT(prevent_garbage_collection_count_, 0);
   if (--prevent_garbage_collection_count_ == 0) {
+    DCHECK(html_element_context()->script_runner());
+    DCHECK(html_element_context()->script_runner()->GetGlobalEnvironment());
     html_element_context()
         ->script_runner()
-        ->GetGlobalObjectProxy()
+        ->GetGlobalEnvironment()
         ->AllowGarbageCollection(make_scoped_refptr(this));
   }
 }
diff --git a/src/cobalt/dom/html_script_element.cc b/src/cobalt/dom/html_script_element.cc
index 16acbde..0b6d3a9 100644
--- a/src/cobalt/dom/html_script_element.cc
+++ b/src/cobalt/dom/html_script_element.cc
@@ -29,7 +29,7 @@
 #include "cobalt/loader/fetcher_factory.h"
 #include "cobalt/loader/sync_loader.h"
 #include "cobalt/loader/text_decoder.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/script_runner.h"
 #include "googleurl/src/gurl.h"
 
@@ -525,12 +525,11 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK_GE(prevent_garbage_collection_count_, 0);
   if (prevent_garbage_collection_count_++ == 0) {
-    DCHECK(html_element_context());
     DCHECK(html_element_context()->script_runner());
-    DCHECK(html_element_context()->script_runner()->GetGlobalObjectProxy());
+    DCHECK(html_element_context()->script_runner()->GetGlobalEnvironment());
     html_element_context()
         ->script_runner()
-        ->GetGlobalObjectProxy()
+        ->GetGlobalEnvironment()
         ->PreventGarbageCollection(make_scoped_refptr(this));
   }
 }
@@ -539,9 +538,11 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK_GT(prevent_garbage_collection_count_, 0);
   if (--prevent_garbage_collection_count_ == 0) {
+    DCHECK(html_element_context()->script_runner());
+    DCHECK(html_element_context()->script_runner()->GetGlobalEnvironment());
     html_element_context()
         ->script_runner()
-        ->GetGlobalObjectProxy()
+        ->GetGlobalEnvironment()
         ->AllowGarbageCollection(make_scoped_refptr(this));
   }
 }
diff --git a/src/cobalt/dom/node_test.cc b/src/cobalt/dom/node_test.cc
index 3b674a2..57153ae 100644
--- a/src/cobalt/dom/node_test.cc
+++ b/src/cobalt/dom/node_test.cc
@@ -22,6 +22,7 @@
 #include "cobalt/dom/element.h"
 #include "cobalt/dom/global_stats.h"
 #include "cobalt/dom/html_collection.h"
+#include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/node_list.h"
 #include "cobalt/dom/testing/gtest_workarounds.h"
 #include "cobalt/dom/text.h"
@@ -71,12 +72,16 @@
   NodeTest();
   ~NodeTest() OVERRIDE;
 
+  HTMLElementContext html_element_context_;
   scoped_refptr<Document> document_;
 };
 
-NodeTest::NodeTest() {
+NodeTest::NodeTest()
+    : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                            NULL, NULL, NULL, "") {
   EXPECT_TRUE(GlobalStats::GetInstance()->CheckNoLeaks());
-  document_ = new Document(NULL);
+
+  document_ = new Document(&html_element_context_);
 }
 
 NodeTest::~NodeTest() {
@@ -225,7 +230,7 @@
   scoped_refptr<Node> root = new Element(document_);
   EXPECT_EQ(document_, root->node_document());
 
-  scoped_refptr<Document> new_document = new Document(NULL);
+  scoped_refptr<Document> new_document = new Document(&html_element_context_);
   new_document->AppendChild(root);
   EXPECT_EQ(new_document, root->node_document());
 }
@@ -361,7 +366,7 @@
   document_->AppendChild(element);
   EXPECT_EQ(document_, element->node_document());
 
-  scoped_refptr<Document> new_document = new Document(NULL);
+  scoped_refptr<Document> new_document = new Document(&html_element_context_);
   element->AdoptIntoDocument(new_document);
   EXPECT_EQ(new_document, element->node_document());
   EXPECT_EQ(NULL, element->parent_node());
diff --git a/src/cobalt/dom/parser.h b/src/cobalt/dom/parser.h
index a418ae8..554643e 100644
--- a/src/cobalt/dom/parser.h
+++ b/src/cobalt/dom/parser.h
@@ -52,7 +52,8 @@
 
   // Parses an XML document and returns the created XMLDocument.
   virtual scoped_refptr<XMLDocument> ParseXMLDocument(
-      const std::string& input, const base::SourceLocation& input_location) = 0;
+      const std::string& input, HTMLElementContext* html_element_context,
+      const base::SourceLocation& input_location) = 0;
 
   // Parses an HTML input and inserts new nodes in document under parent_node
   // before reference_node.
diff --git a/src/cobalt/dom/window.cc b/src/cobalt/dom/window.cc
index e901752..295c8f9 100644
--- a/src/cobalt/dom/window.cc
+++ b/src/cobalt/dom/window.cc
@@ -199,7 +199,6 @@
 }
 
 scoped_refptr<MediaQueryList> Window::MatchMedia(const std::string& query) {
-  DCHECK(html_element_context_);
   DCHECK(html_element_context_->css_parser());
   scoped_refptr<cssom::MediaList> media_list =
       html_element_context_->css_parser()->ParseMediaList(
diff --git a/src/cobalt/dom/xml_document.h b/src/cobalt/dom/xml_document.h
index 819c0eb..afb6346 100644
--- a/src/cobalt/dom/xml_document.h
+++ b/src/cobalt/dom/xml_document.h
@@ -24,12 +24,14 @@
 
 class XMLDocument : public Document {
  public:
-  explicit XMLDocument(const Options& options = Options())
-      : Document(NULL, options) {}
+  XMLDocument(HTMLElementContext* html_element_context,
+              const Options& options = Options())
+      : Document(html_element_context, options) {}
 
   // Custom, not in any spec: Node.
   scoped_refptr<Node> Duplicate() const OVERRIDE {
-    return new XMLDocument(Document::Options(url_as_gurl()));
+    return new XMLDocument(html_element_context(),
+                           Document::Options(url_as_gurl()));
   }
 
   // Custom, not in any spec: Document.
diff --git a/src/cobalt/dom/xml_document_test.cc b/src/cobalt/dom/xml_document_test.cc
index 888f226..34d8e11 100644
--- a/src/cobalt/dom/xml_document_test.cc
+++ b/src/cobalt/dom/xml_document_test.cc
@@ -18,13 +18,16 @@
 
 #include "base/memory/ref_counted.h"
 #include "cobalt/dom/document.h"
+#include "cobalt/dom/html_element_context.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
 namespace cobalt {
 namespace dom {
 
 TEST(XMLDocumentTest, IsXMLDocument) {
-  scoped_refptr<Document> document = new XMLDocument();
+  HTMLElementContext html_element_context(NULL, NULL, NULL, NULL, NULL, NULL,
+                                          NULL, NULL, NULL, NULL, NULL, "");
+  scoped_refptr<Document> document = new XMLDocument(&html_element_context);
   EXPECT_TRUE(document->IsXMLDocument());
 }
 
diff --git a/src/cobalt/dom_parser/parser.cc b/src/cobalt/dom_parser/parser.cc
index 1c8c1ee..507c187 100644
--- a/src/cobalt/dom_parser/parser.cc
+++ b/src/cobalt/dom_parser/parser.cc
@@ -28,6 +28,7 @@
 scoped_refptr<dom::Document> Parser::ParseDocument(
     const std::string& input, dom::HTMLElementContext* html_element_context,
     const base::SourceLocation& input_location) {
+  DCHECK(html_element_context);
   scoped_refptr<dom::Document> document =
       new dom::Document(html_element_context, dom::Document::Options());
   HTMLDecoder html_decoder(document, document, NULL, dom_max_element_depth_,
@@ -38,8 +39,11 @@
 }
 
 scoped_refptr<dom::XMLDocument> Parser::ParseXMLDocument(
-    const std::string& input, const base::SourceLocation& input_location) {
-  scoped_refptr<dom::XMLDocument> xml_document = new dom::XMLDocument();
+    const std::string& input, dom::HTMLElementContext* html_element_context,
+    const base::SourceLocation& input_location) {
+  DCHECK(html_element_context);
+  scoped_refptr<dom::XMLDocument> xml_document =
+      new dom::XMLDocument(html_element_context);
   XMLDecoder xml_decoder(
       xml_document, xml_document, NULL, dom_max_element_depth_, input_location,
       base::Closure(),
diff --git a/src/cobalt/dom_parser/parser.h b/src/cobalt/dom_parser/parser.h
index cefbf7f..e9de526 100644
--- a/src/cobalt/dom_parser/parser.h
+++ b/src/cobalt/dom_parser/parser.h
@@ -49,7 +49,7 @@
       const base::SourceLocation& input_location) OVERRIDE;
 
   scoped_refptr<dom::XMLDocument> ParseXMLDocument(
-      const std::string& input,
+      const std::string& input, dom::HTMLElementContext* html_element_context,
       const base::SourceLocation& input_location) OVERRIDE;
 
   void ParseDocumentFragment(
diff --git a/src/cobalt/dom_parser/xml_decoder_test.cc b/src/cobalt/dom_parser/xml_decoder_test.cc
index ecc6b41..a7540c0 100644
--- a/src/cobalt/dom_parser/xml_decoder_test.cc
+++ b/src/cobalt/dom_parser/xml_decoder_test.cc
@@ -20,6 +20,7 @@
 #include "cobalt/dom/attr.h"
 #include "cobalt/dom/cdata_section.h"
 #include "cobalt/dom/element.h"
+#include "cobalt/dom/html_element_context.h"
 #include "cobalt/dom/named_node_map.h"
 #include "cobalt/dom/text.h"
 #include "cobalt/dom/xml_document.h"
@@ -41,6 +42,7 @@
   XMLDecoderTest();
   ~XMLDecoderTest() OVERRIDE {}
 
+  dom::HTMLElementContext html_element_context_;
   scoped_refptr<dom::XMLDocument> document_;
   base::SourceLocation source_location_;
   MockErrorCallback mock_error_callback_;
@@ -48,7 +50,9 @@
 };
 
 XMLDecoderTest::XMLDecoderTest()
-    : document_(new dom::XMLDocument(dom::Document::Options())),
+    : html_element_context_(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+                            NULL, NULL, NULL, ""),
+      document_(new dom::XMLDocument(&html_element_context_)),
       source_location_(base::SourceLocation("[object XMLDecoderTest]", 1, 1)) {}
 
 TEST_F(XMLDecoderTest, ShouldNotAddImpliedTags) {
diff --git a/src/cobalt/h5vcc/H5vccSystem.idl b/src/cobalt/h5vcc/H5vccSystem.idl
index 15b6235..25bbe3b 100644
--- a/src/cobalt/h5vcc/H5vccSystem.idl
+++ b/src/cobalt/h5vcc/H5vccSystem.idl
@@ -21,4 +21,5 @@
   readonly attribute DOMString region;
   readonly attribute DOMString version;
   boolean triggerHelp();
+  DOMString getVideoContainerSizeOverride();
 };
diff --git a/src/cobalt/h5vcc/h5vcc_system.cc b/src/cobalt/h5vcc/h5vcc_system.cc
index 6775ae5..3bf8cf3 100644
--- a/src/cobalt/h5vcc/h5vcc_system.cc
+++ b/src/cobalt/h5vcc/h5vcc_system.cc
@@ -52,5 +52,12 @@
 // return false to indicate the client should launch their own dialog.
 bool H5vccSystem::TriggerHelp() const { return false; }
 
+// Returns a string in the form of "1920x1080" to inform the player to use the
+// returned resolution instead of the window size as the maximum resolution of
+// video being played.
+std::string H5vccSystem::GetVideoContainerSizeOverride() const {
+  return deprecated::PlatformDelegate::Get()->GetVideoContainerSizeOverride();
+}
+
 }  // namespace h5vcc
 }  // namespace cobalt
diff --git a/src/cobalt/h5vcc/h5vcc_system.h b/src/cobalt/h5vcc/h5vcc_system.h
index 3a1f4ac..be0db79 100644
--- a/src/cobalt/h5vcc/h5vcc_system.h
+++ b/src/cobalt/h5vcc/h5vcc_system.h
@@ -35,6 +35,7 @@
   std::string version() const;
 
   bool TriggerHelp() const;
+  std::string GetVideoContainerSizeOverride() const;
 
   DEFINE_WRAPPABLE_TYPE(H5vccSystem);
 
diff --git a/src/cobalt/layout/block_formatting_context.cc b/src/cobalt/layout/block_formatting_context.cc
index 92fc3c2..1203c34 100644
--- a/src/cobalt/layout/block_formatting_context.cc
+++ b/src/cobalt/layout/block_formatting_context.cc
@@ -100,7 +100,8 @@
     // positive adjoining margins.
     // When there is only one negative and one positive margin, that translates
     // to: The margins are summed.
-    DCHECK(collapsing_margin_ >= LayoutUnit() || margin_top >= LayoutUnit());
+    DCHECK(collapsing_margin_.GreaterEqualOrNaN(LayoutUnit()) ||
+           margin_top.GreaterEqualOrNaN(LayoutUnit()));
     collapsed_margin = collapsing_margin_ + margin_top;
   }
 
diff --git a/src/cobalt/layout/inline_container_box.cc b/src/cobalt/layout/inline_container_box.cc
index 2215a46..751a3b4 100644
--- a/src/cobalt/layout/inline_container_box.cc
+++ b/src/cobalt/layout/inline_container_box.cc
@@ -455,7 +455,7 @@
     WrapOpportunityPolicy wrap_opportunity_policy,
     bool is_line_existence_justified, LayoutUnit available_width,
     bool should_collapse_trailing_white_space) {
-  DCHECK_GT(GetMarginBoxWidth(), available_width);
+  DCHECK(GetMarginBoxWidth().GreaterThanOrNaN(available_width));
 
   // Calculate the available width where the content begins. If the content
   // does not begin within the available width, then the wrap can only occur
diff --git a/src/cobalt/layout/layout_unit.h b/src/cobalt/layout/layout_unit.h
index ba53e11..2083a23 100644
--- a/src/cobalt/layout/layout_unit.h
+++ b/src/cobalt/layout/layout_unit.h
@@ -24,6 +24,7 @@
 #include <utility>
 
 #include "base/basictypes.h"
+#include "base/logging.h"
 #include "cobalt/base/math.h"
 
 namespace cobalt {
@@ -35,24 +36,47 @@
   // The ratio of the LayoutUnit fixed point value to integers.
   static const int kFixedPointRatio = 64;
 
-  LayoutUnit() : value_(0) {}
+  LayoutUnit() : value_(0) {
+#ifdef _DEBUG
+    is_nan_ = false;
+#endif
+  }
   ~LayoutUnit() {}
 
   // Constructors.
-  explicit LayoutUnit(int value) : value_(value * kFixedPointRatio) {}
+  explicit LayoutUnit(int value) : value_(value * kFixedPointRatio) {
+#ifdef _DEBUG
+    int64_t value64 = value * kFixedPointRatio;
+    is_nan_ = value_ != value64;
+#endif
+  }
   explicit LayoutUnit(float value)
       : value_(static_cast<int32_t>(
-            floorf(value * static_cast<float>(kFixedPointRatio)))) {}
+            floorf(value * static_cast<float>(kFixedPointRatio)))) {
+#ifdef _DEBUG
+    int64_t value64 = static_cast<int64_t>(
+        floorf(value * static_cast<float>(kFixedPointRatio)));
+    is_nan_ = value_ != value64;
+#endif
+  }
 
   float toFloat() const {
     return static_cast<float>(value_) / kFixedPointRatio;
   }
 
-  void swap(LayoutUnit& value) { std::swap(value_, value.value_); }
+  void swap(LayoutUnit& value) {
+    std::swap(value_, value.value_);
+#ifdef _DEBUG
+    std::swap(is_nan_, value.is_nan_);
+#endif
+  }
 
   // Copy assignment operator.
   LayoutUnit& operator=(LayoutUnit value) {
     value_ = value.value_;
+#ifdef _DEBUG
+    is_nan_ = is_nan_ || value.is_nan_;
+#endif
     return *this;
   }
 
@@ -63,6 +87,57 @@
   bool operator==(LayoutUnit other) const { return value_ == other.value_; }
   bool operator!=(LayoutUnit other) const { return value_ != other.value_; }
 
+#ifdef _DEBUG
+  bool LessThanOrNaN(LayoutUnit other) const {
+    return is_nan_ || other.is_nan_ || *this < other;
+  }
+  bool LessEqualOrNaN(LayoutUnit other) const {
+    return is_nan_ || other.is_nan_ || *this <= other;
+  }
+  bool GreaterThanOrNaN(LayoutUnit other) const {
+    return is_nan_ || other.is_nan_ || *this > other;
+  }
+  bool GreaterEqualOrNaN(LayoutUnit other) const {
+    return is_nan_ || other.is_nan_ || *this >= other;
+  }
+  bool EqualOrNaN(LayoutUnit other) const {
+    return is_nan_ || other.is_nan_ || *this == other;
+  }
+  bool NotEqualOrNaN(LayoutUnit other) const {
+    return is_nan_ || other.is_nan_ || *this != other;
+  }
+  bool IsNaN() const { return is_nan_; }
+#else
+  bool LessThanOrNaN(LayoutUnit other) const {
+    NOTREACHED();
+    return *this < other;
+  }
+  bool LessEqualOrNaN(LayoutUnit other) const {
+    NOTREACHED();
+    return *this <= other;
+  }
+  bool GreaterThanOrNaN(LayoutUnit other) const {
+    NOTREACHED();
+    return *this > other;
+  }
+  bool GreaterEqualOrNaN(LayoutUnit other) const {
+    NOTREACHED();
+    return *this >= other;
+  }
+  bool EqualOrNaN(LayoutUnit other) const {
+    NOTREACHED();
+    return *this == other;
+  }
+  bool NotEqualOrNaN(LayoutUnit other) const {
+    NOTREACHED();
+    return *this != other;
+  }
+  bool IsNaN() const {
+    NOTREACHED();
+    return false;
+  }
+#endif
+
   LayoutUnit operator+() const { return LayoutUnit(*this); }
   LayoutUnit operator-() const {
     LayoutUnit res;
@@ -71,7 +146,14 @@
   }
 
   LayoutUnit& operator+=(LayoutUnit other) {
+#ifdef _DEBUG
+    int64_t value64 = value_;
+#endif
     value_ += other.value_;
+#ifdef _DEBUG
+    is_nan_ = is_nan_ || other.is_nan_ ||
+              (value_ != (value64 + static_cast<int64_t>(other.value_)));
+#endif
     return *this;
   }
   LayoutUnit operator+(LayoutUnit other) const {
@@ -79,7 +161,14 @@
     return res += other;
   }
   LayoutUnit& operator-=(LayoutUnit other) {
+#ifdef _DEBUG
+    int64_t value64 = value_;
+#endif
     value_ -= other.value_;
+#ifdef _DEBUG
+    is_nan_ = is_nan_ || other.is_nan_ ||
+              (value_ != (value64 - static_cast<int64_t>(other.value_)));
+#endif
     return *this;
   }
   LayoutUnit operator-(LayoutUnit other) const {
@@ -100,13 +189,26 @@
 
  private:
   int32_t value_;
+#ifdef _DEBUG
+  // When value_ overflows or underflows during construction or during an
+  // operation, it's value is undefined. This flags is used to track when that
+  // happens. The value propagates to the result of operations where any
+  // operand has this flag set, to indicate that there is undefined behavior.
+  bool is_nan_;
+#endif
 };
 
 // Integer scaling math operators.
 
 // NOLINTNEXTLINE(runtime/references)
 inline LayoutUnit& operator*=(LayoutUnit& a, int b) {
+#ifdef _DEBUG
+  int64_t value64 = a.value_;
+#endif
   a.value_ *= b;
+#ifdef _DEBUG
+  a.is_nan_ = a.is_nan_ || (a.value_ != (value64 * b));
+#endif
   return a;
 }
 
@@ -116,7 +218,13 @@
 
 // NOLINTNEXTLINE(runtime/references)
 inline LayoutUnit& operator/=(LayoutUnit& a, int b) {
+#ifdef _DEBUG
+  int64_t value64 = a.value_;
+#endif
   a.value_ /= b;
+#ifdef _DEBUG
+  a.is_nan_ = a.is_nan_ || (a.value_ != (value64 / b));
+#endif
   return a;
 }
 
@@ -126,7 +234,15 @@
 
 // NOLINTNEXTLINE(runtime/references)
 inline LayoutUnit& operator*=(LayoutUnit& a, float b) {
+#ifdef _DEBUG
+  int64_t value64 = a.value_;
+#endif
   a.value_ = static_cast<int32_t>(floorf(static_cast<float>(a.value_) * b));
+#ifdef _DEBUG
+  a.is_nan_ = a.is_nan_ ||
+              (a.value_ !=
+               static_cast<int64_t>(floorf(static_cast<float>(value64) * b)));
+#endif
   return a;
 }
 
@@ -143,6 +259,11 @@
 inline LayoutUnit operator/(LayoutUnit a, float b) { return a /= b; }
 
 inline std::ostream& operator<<(std::ostream& out, const LayoutUnit& x) {
+#ifdef _DEBUG
+  if (x.IsNaN()) {
+    return out << "NaN(" << x.toFloat() << ")";
+  }
+#endif
   return out << x.toFloat();
 }
 
diff --git a/src/cobalt/layout/line_box.cc b/src/cobalt/layout/line_box.cc
index 7a72a16..92940d1 100644
--- a/src/cobalt/layout/line_box.cc
+++ b/src/cobalt/layout/line_box.cc
@@ -260,7 +260,7 @@
   last_non_collapsed_child_box->UpdateSize(layout_params_);
   LayoutUnit collapsed_white_space_width =
       child_box_pre_collapse_width - last_non_collapsed_child_box->width();
-  DCHECK_GT(collapsed_white_space_width, LayoutUnit());
+  DCHECK(collapsed_white_space_width.GreaterThanOrNaN(LayoutUnit()));
 
   shrink_to_fit_width_ -= collapsed_white_space_width;
 }
@@ -274,7 +274,7 @@
   last_non_collapsed_child_box->UpdateSize(layout_params_);
   LayoutUnit restored_white_space_width =
       last_non_collapsed_child_box->width() - child_box_pre_restore_width;
-  DCHECK_GT(restored_white_space_width, LayoutUnit());
+  DCHECK(restored_white_space_width.GreaterThanOrNaN(LayoutUnit()));
 
   shrink_to_fit_width_ += restored_white_space_width;
 }
diff --git a/src/cobalt/layout/text_box.cc b/src/cobalt/layout/text_box.cc
index c0cb5fb..9dad35b 100644
--- a/src/cobalt/layout/text_box.cc
+++ b/src/cobalt/layout/text_box.cc
@@ -88,18 +88,18 @@
 
 void TextBox::UpdateContentSizeAndMargins(const LayoutParams& layout_params) {
   // Anonymous boxes do not have margins.
-  DCHECK_EQ(LayoutUnit(),
-            GetUsedMarginLeftIfNotAuto(computed_style(),
-                                       layout_params.containing_block_size));
-  DCHECK_EQ(LayoutUnit(),
-            GetUsedMarginTopIfNotAuto(computed_style(),
-                                      layout_params.containing_block_size));
-  DCHECK_EQ(LayoutUnit(),
-            GetUsedMarginRightIfNotAuto(computed_style(),
-                                        layout_params.containing_block_size));
-  DCHECK_EQ(LayoutUnit(),
-            GetUsedMarginBottomIfNotAuto(computed_style(),
-                                         layout_params.containing_block_size));
+  DCHECK(GetUsedMarginLeftIfNotAuto(computed_style(),
+                                    layout_params.containing_block_size)
+             ->EqualOrNaN(LayoutUnit()));
+  DCHECK(GetUsedMarginTopIfNotAuto(computed_style(),
+                                   layout_params.containing_block_size)
+             ->EqualOrNaN(LayoutUnit()));
+  DCHECK(GetUsedMarginRightIfNotAuto(computed_style(),
+                                     layout_params.containing_block_size)
+             ->EqualOrNaN(LayoutUnit()));
+  DCHECK(GetUsedMarginBottomIfNotAuto(computed_style(),
+                                      layout_params.containing_block_size)
+             ->EqualOrNaN(LayoutUnit()));
 
   // The non-collapsible content size only needs to be calculated if
   // |non_collapsible_text_width_| is unset. This indicates that either the
@@ -371,8 +371,8 @@
     return;
   }
 
-  DCHECK_EQ(LayoutUnit(), border_left_width() + padding_left());
-  DCHECK_EQ(LayoutUnit(), border_top_width() + padding_top());
+  DCHECK((border_left_width() + padding_left()).EqualOrNaN(LayoutUnit()));
+  DCHECK((border_top_width() + padding_top()).EqualOrNaN(LayoutUnit()));
 
   // Only add the text node to the render tree if it actually has visible
   // content that isn't simply collapsible whitespace and a font isn't loading.
diff --git a/src/cobalt/network/cookie_jar_impl.cc b/src/cobalt/network/cookie_jar_impl.cc
index 8669b8d..5ad5205 100644
--- a/src/cobalt/network/cookie_jar_impl.cc
+++ b/src/cobalt/network/cookie_jar_impl.cc
@@ -18,6 +18,7 @@
 
 #include "base/bind.h"
 #include "base/synchronization/waitable_event.h"
+#include "base/threading/thread.h"
 
 namespace cobalt {
 namespace network {
@@ -26,20 +27,29 @@
 
 class CookiesGetter {
  public:
-  CookiesGetter() : event_(true, false) {}
+  CookiesGetter(const GURL& origin, net::CookieStore* cookie_store)
+      : getter_thread_("CookiesGetter"), event_(true, false) {
+    getter_thread_.Start();
+    getter_thread_.message_loop()->PostTask(
+        FROM_HERE, base::Bind(&net::CookieStore::GetCookiesWithOptionsAsync,
+                              cookie_store, origin, net::CookieOptions(),
+                              base::Bind(&CookiesGetter::CompletionCallback,
+                                         base::Unretained(this))));
+  }
 
   const std::string& WaitForCookies() {
     event_.Wait();
     return cookies_;
   }
 
-  void GetCookiesAsync(const std::string& cookies) {
+ private:
+  void CompletionCallback(const std::string& cookies) {
     cookies_ = cookies;
     event_.Signal();
   }
 
- private:
   std::string cookies_;
+  base::Thread getter_thread_;
   base::WaitableEvent event_;
 };
 
@@ -51,11 +61,7 @@
 }
 
 std::string CookieJarImpl::GetCookies(const GURL& origin) {
-  CookiesGetter cookies_getter;
-  cookie_store_->GetCookiesWithOptionsAsync(
-      origin, net::CookieOptions(),
-      base::Bind(&CookiesGetter::GetCookiesAsync,
-                 base::Unretained(&cookies_getter)));
+  CookiesGetter cookies_getter(origin, cookie_store_);
   return cookies_getter.WaitForCookies();
 }
 
diff --git a/src/cobalt/script/execution_state.cc b/src/cobalt/script/execution_state.cc
index 34992a8..0d53cf3 100644
--- a/src/cobalt/script/execution_state.cc
+++ b/src/cobalt/script/execution_state.cc
@@ -16,7 +16,7 @@
 
 #include "cobalt/script/execution_state.h"
 
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 
 namespace cobalt {
 namespace script {
@@ -26,25 +26,24 @@
 class ExecutionStateImpl : public ExecutionState {
  public:
   explicit ExecutionStateImpl(
-      const scoped_refptr<GlobalObjectProxy>& global_object_proxy)
-      : global_object_proxy_(global_object_proxy) {}
+      const scoped_refptr<GlobalEnvironment>& global_environment)
+      : global_environment_(global_environment) {}
 
   std::string GetStackTrace() const OVERRIDE;
 
  private:
-  scoped_refptr<GlobalObjectProxy> global_object_proxy_;
+  scoped_refptr<GlobalEnvironment> global_environment_;
 };
 
 std::string ExecutionStateImpl::GetStackTrace() const {
-  return StackTraceToString(global_object_proxy_->GetStackTrace());
+  return StackTraceToString(global_environment_->GetStackTrace());
 }
 
 }  // namespace
 
 scoped_ptr<ExecutionState> ExecutionState::CreateExecutionState(
-    const scoped_refptr<GlobalObjectProxy>& global_object_proxy) {
-  return scoped_ptr<ExecutionState>(
-      new ExecutionStateImpl(global_object_proxy));
+    const scoped_refptr<GlobalEnvironment>& global_environment) {
+  return scoped_ptr<ExecutionState>(new ExecutionStateImpl(global_environment));
 }
 
 }  // namespace script
diff --git a/src/cobalt/script/execution_state.h b/src/cobalt/script/execution_state.h
index 063a5bd..2f394c3 100644
--- a/src/cobalt/script/execution_state.h
+++ b/src/cobalt/script/execution_state.h
@@ -24,13 +24,13 @@
 namespace cobalt {
 namespace script {
 
-class GlobalObjectProxy;
+class GlobalEnvironment;
 
 // Provides access to the state of JavaScript execution.
 class ExecutionState {
  public:
   static scoped_ptr<ExecutionState> CreateExecutionState(
-      const scoped_refptr<GlobalObjectProxy>& global_object_proxy);
+      const scoped_refptr<GlobalEnvironment>& global_environment);
 
   virtual std::string GetStackTrace() const = 0;
   virtual ~ExecutionState() {}
diff --git a/src/cobalt/script/fake_global_object_proxy.h b/src/cobalt/script/fake_global_environment.h
similarity index 87%
rename from src/cobalt/script/fake_global_object_proxy.h
rename to src/cobalt/script/fake_global_environment.h
index bc110d8..532d709 100644
--- a/src/cobalt/script/fake_global_object_proxy.h
+++ b/src/cobalt/script/fake_global_environment.h
@@ -14,18 +14,18 @@
  * limitations under the License.
  */
 
-#ifndef COBALT_SCRIPT_FAKE_GLOBAL_OBJECT_PROXY_H_
-#define COBALT_SCRIPT_FAKE_GLOBAL_OBJECT_PROXY_H_
+#ifndef COBALT_SCRIPT_FAKE_GLOBAL_ENVIRONMENT_H_
+#define COBALT_SCRIPT_FAKE_GLOBAL_ENVIRONMENT_H_
 
 #include <string>
 #include <vector>
 
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 
 namespace cobalt {
 namespace script {
 
-class FakeGlobalObjectProxy : public GlobalObjectProxy {
+class FakeGlobalEnvironment : public GlobalEnvironment {
  public:
   void CreateGlobalObject() OVERRIDE {};
   bool EvaluateScript(const scoped_refptr<SourceCode>& /*script_utf8*/,
@@ -57,4 +57,4 @@
 }  // namespace script
 }  // namespace cobalt
 
-#endif  // COBALT_SCRIPT_FAKE_GLOBAL_OBJECT_PROXY_H_
+#endif  // COBALT_SCRIPT_FAKE_GLOBAL_ENVIRONMENT_H_
diff --git a/src/cobalt/script/fake_script_runner.h b/src/cobalt/script/fake_script_runner.h
index baafdf1..2a9af2b 100644
--- a/src/cobalt/script/fake_script_runner.h
+++ b/src/cobalt/script/fake_script_runner.h
@@ -20,7 +20,7 @@
 #include <string>
 
 #include "cobalt/base/source_location.h"
-#include "cobalt/script/fake_global_object_proxy.h"
+#include "cobalt/script/fake_global_environment.h"
 #include "cobalt/script/script_runner.h"
 
 namespace cobalt {
@@ -28,18 +28,18 @@
 
 class FakeScriptRunner : public ScriptRunner {
  public:
-  FakeScriptRunner() : fake_global_object_proxy_(new FakeGlobalObjectProxy()) {}
+  FakeScriptRunner() : fake_global_environment_(new FakeGlobalEnvironment()) {}
   std::string Execute(
       const std::string& /*script_utf8*/,
       const base::SourceLocation& /*script_location*/) OVERRIDE {
     return "";
   }
-  GlobalObjectProxy* GetGlobalObjectProxy() const OVERRIDE {
-    return fake_global_object_proxy_.get();
+  GlobalEnvironment* GetGlobalEnvironment() const OVERRIDE {
+    return fake_global_environment_.get();
   }
 
  private:
-  scoped_refptr<FakeGlobalObjectProxy> fake_global_object_proxy_;
+  scoped_refptr<FakeGlobalEnvironment> fake_global_environment_;
 };
 
 }  // namespace script
diff --git a/src/cobalt/script/global_object_proxy.h b/src/cobalt/script/global_environment.h
similarity index 89%
rename from src/cobalt/script/global_object_proxy.h
rename to src/cobalt/script/global_environment.h
index 45f30a7..01fc636 100644
--- a/src/cobalt/script/global_object_proxy.h
+++ b/src/cobalt/script/global_environment.h
@@ -13,8 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef COBALT_SCRIPT_GLOBAL_OBJECT_PROXY_H_
-#define COBALT_SCRIPT_GLOBAL_OBJECT_PROXY_H_
+#ifndef COBALT_SCRIPT_GLOBAL_ENVIRONMENT_H_
+#define COBALT_SCRIPT_GLOBAL_ENVIRONMENT_H_
 
 #include <string>
 #include <vector>
@@ -33,9 +33,8 @@
 class JavaScriptEngine;
 class SourceCode;
 
-// Manages a handle to a JavaScript engine's global object. The lifetime of
-// the global object is not necessarily tied to the lifetime of the proxy.
-class GlobalObjectProxy : public base::RefCounted<GlobalObjectProxy> {
+// Manages a handle to a JavaScript engine's global object.
+class GlobalEnvironment : public base::RefCounted<GlobalEnvironment> {
  public:
   // Create a new global object with bindings as defined for the definition of
   // the GlobalInterface type. The IDL for this interface must have the
@@ -104,11 +103,11 @@
                     const scoped_refptr<Wrappable>& impl) = 0;
 
  protected:
-  virtual ~GlobalObjectProxy() {}
-  friend class base::RefCounted<GlobalObjectProxy>;
+  virtual ~GlobalEnvironment() {}
+  friend class base::RefCounted<GlobalEnvironment>;
 };
 
 }  // namespace script
 }  // namespace cobalt
 
-#endif  // COBALT_SCRIPT_GLOBAL_OBJECT_PROXY_H_
+#endif  // COBALT_SCRIPT_GLOBAL_ENVIRONMENT_H_
diff --git a/src/cobalt/script/javascript_engine.h b/src/cobalt/script/javascript_engine.h
index 4cc5a30..7c5a607 100644
--- a/src/cobalt/script/javascript_engine.h
+++ b/src/cobalt/script/javascript_engine.h
@@ -22,7 +22,7 @@
 namespace cobalt {
 namespace script {
 
-class GlobalObjectProxy;
+class GlobalEnvironment;
 
 class JavaScriptEngine {
  public:
@@ -32,7 +32,7 @@
   static scoped_ptr<JavaScriptEngine> CreateEngine();
 
   // Create a new JavaScript global object proxy.
-  virtual scoped_refptr<GlobalObjectProxy> CreateGlobalObjectProxy() = 0;
+  virtual scoped_refptr<GlobalEnvironment> CreateGlobalEnvironment() = 0;
 
   // Kick off the engine's garbage collection synchronously.
   virtual void CollectGarbage() = 0;
diff --git a/src/cobalt/script/javascriptcore/javascriptcore.gyp b/src/cobalt/script/javascriptcore/javascriptcore.gyp
index 9cee381..73b048f 100644
--- a/src/cobalt/script/javascriptcore/javascriptcore.gyp
+++ b/src/cobalt/script/javascriptcore/javascriptcore.gyp
@@ -32,10 +32,10 @@
         'jsc_exception_state.cc',
         'jsc_exception_state.h',
         'jsc_gc_markup_visitor.h',
+        'jsc_global_environment.cc',
+        'jsc_global_environment.h',
         'jsc_global_object.cc',
         'jsc_global_object.h',
-        'jsc_global_object_proxy.cc',
-        'jsc_global_object_proxy.h',
         'jsc_object_handle.h',
         'jsc_object_owner.h',
         'jsc_scope.cc',
@@ -84,6 +84,9 @@
       'sources': [
         'numeric_conversion_test.cc',
       ],
+      'defines': [
+        '__DISABLE_WTF_LOGGING__',
+      ],
       'include_dirs': [
         '<(DEPTH)/third_party/WebKit/Source/JavaScriptCore',
         '<(DEPTH)/third_party/WebKit/Source/WTF',
diff --git a/src/cobalt/script/javascriptcore/jsc.cc b/src/cobalt/script/javascriptcore/jsc.cc
index 9d474cf..8fae204 100644
--- a/src/cobalt/script/javascriptcore/jsc.cc
+++ b/src/cobalt/script/javascriptcore/jsc.cc
@@ -21,7 +21,7 @@
 #include "base/string_util.h"
 #include "cobalt/base/wrap_main.h"
 #include "cobalt/script/javascriptcore/jsc_engine.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/standalone_javascript_runner.h"
 #include "third_party/WebKit/Source/JavaScriptCore/config.h"
 // Error.h needs to be included before JSCTypedArrayStubs.h
@@ -97,11 +97,11 @@
 
 int JSCMain(int argc, char** argv) {
   cobalt::script::StandaloneJavascriptRunner standalone_runner;
-  standalone_runner.global_object_proxy()->EnableEval();
+  standalone_runner.global_environment()->EnableEval();
 
   JSCGlobalObject* global_object =
-      static_cast<JSCGlobalObjectProxy*>(
-          standalone_runner.global_object_proxy().get())
+      static_cast<JSCGlobalEnvironment*>(
+          standalone_runner.global_environment().get())
           ->global_object();
   SetupBindings(global_object);
 
diff --git a/src/cobalt/script/javascriptcore/jsc_debugger.cc b/src/cobalt/script/javascriptcore/jsc_debugger.cc
index 9856564..78c3a63 100644
--- a/src/cobalt/script/javascriptcore/jsc_debugger.cc
+++ b/src/cobalt/script/javascriptcore/jsc_debugger.cc
@@ -23,8 +23,8 @@
 #include "base/string_number_conversions.h"
 #include "cobalt/base/polymorphic_downcast.h"
 #include "cobalt/script/javascriptcore/jsc_call_frame.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
 #include "cobalt/script/javascriptcore/jsc_source_provider.h"
 
@@ -45,9 +45,9 @@
 
 // Static factory method declared in public interface.
 scoped_ptr<ScriptDebugger> ScriptDebugger::CreateDebugger(
-    GlobalObjectProxy* global_object_proxy, Delegate* delegate) {
+    GlobalEnvironment* global_environment, Delegate* delegate) {
   return scoped_ptr<ScriptDebugger>(
-      new javascriptcore::JSCDebugger(global_object_proxy, delegate));
+      new javascriptcore::JSCDebugger(global_environment, delegate));
 }
 
 namespace javascriptcore {
@@ -105,9 +105,9 @@
 }
 }  // namespace
 
-JSCDebugger::JSCDebugger(GlobalObjectProxy* global_object_proxy,
+JSCDebugger::JSCDebugger(GlobalEnvironment* global_environment,
                          Delegate* delegate)
-    : global_object_proxy_(global_object_proxy),
+    : global_environment_(global_environment),
       delegate_(delegate),
       pause_on_exceptions_(kNone),
       pause_on_next_statement_(false),
@@ -184,7 +184,7 @@
 }
 
 JSCGlobalObject* JSCDebugger::GetGlobalObject() const {
-  return base::polymorphic_downcast<JSCGlobalObjectProxy*>(global_object_proxy_)
+  return base::polymorphic_downcast<JSCGlobalEnvironment*>(global_environment_)
       ->global_object();
 }
 
diff --git a/src/cobalt/script/javascriptcore/jsc_debugger.h b/src/cobalt/script/javascriptcore/jsc_debugger.h
index f66a036..7c0b03b 100644
--- a/src/cobalt/script/javascriptcore/jsc_debugger.h
+++ b/src/cobalt/script/javascriptcore/jsc_debugger.h
@@ -21,7 +21,7 @@
 
 #include "base/compiler_specific.h"
 #include "base/threading/thread_checker.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/script_debugger.h"
 #include "cobalt/script/source_provider.h"
 
@@ -54,7 +54,7 @@
 // global object to which this debugger connects.
 class JSCDebugger : protected JSC::Debugger, public ScriptDebugger {
  public:
-  JSCDebugger(GlobalObjectProxy* global_object_proxy, Delegate* delegate);
+  JSCDebugger(GlobalEnvironment* global_environment, Delegate* delegate);
   ~JSCDebugger() OVERRIDE;
 
   // Implementation of ScriptDebugger.
@@ -156,7 +156,7 @@
   bool IsBreakpointAtCurrentLocation() const;
 
   base::ThreadChecker thread_checker_;
-  GlobalObjectProxy* global_object_proxy_;
+  GlobalEnvironment* global_environment_;
 
   // Lifetime managed by the caller of this object's constructor.
   Delegate* delegate_;
diff --git a/src/cobalt/script/javascriptcore/jsc_engine.cc b/src/cobalt/script/javascriptcore/jsc_engine.cc
index 506a2f4..2555ddf 100644
--- a/src/cobalt/script/javascriptcore/jsc_engine.cc
+++ b/src/cobalt/script/javascriptcore/jsc_engine.cc
@@ -22,8 +22,8 @@
 #include "base/time.h"
 #include "cobalt/base/c_val.h"
 #include "cobalt/base/poller.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "third_party/WebKit/Source/JavaScriptCore/runtime/InitializeThreading.h"
 #include "third_party/WebKit/Source/WTF/wtf/OSAllocator.h"
 
@@ -97,9 +97,9 @@
   script_object_registry_.ClearEntries();
 }
 
-scoped_refptr<GlobalObjectProxy> JSCEngine::CreateGlobalObjectProxy() {
+scoped_refptr<GlobalEnvironment> JSCEngine::CreateGlobalEnvironment() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  return new JSCGlobalObjectProxy(this);
+  return new JSCGlobalEnvironment(this);
 }
 
 void JSCEngine::CollectGarbage() {
diff --git a/src/cobalt/script/javascriptcore/jsc_engine.h b/src/cobalt/script/javascriptcore/jsc_engine.h
index a995847..5ef1068 100644
--- a/src/cobalt/script/javascriptcore/jsc_engine.h
+++ b/src/cobalt/script/javascriptcore/jsc_engine.h
@@ -30,7 +30,7 @@
  public:
   JSCEngine();
   ~JSCEngine() OVERRIDE;
-  scoped_refptr<GlobalObjectProxy> CreateGlobalObjectProxy() OVERRIDE;
+  scoped_refptr<GlobalEnvironment> CreateGlobalEnvironment() OVERRIDE;
   void CollectGarbage() OVERRIDE;
   void ReportExtraMemoryCost(size_t bytes) OVERRIDE;
   JSC::JSGlobalData* global_data() { return global_data_.get(); }
diff --git a/src/cobalt/script/javascriptcore/jsc_global_object_proxy.cc b/src/cobalt/script/javascriptcore/jsc_global_environment.cc
similarity index 87%
rename from src/cobalt/script/javascriptcore/jsc_global_object_proxy.cc
rename to src/cobalt/script/javascriptcore/jsc_global_environment.cc
index 9db07c2..d388b64 100644
--- a/src/cobalt/script/javascriptcore/jsc_global_object_proxy.cc
+++ b/src/cobalt/script/javascriptcore/jsc_global_environment.cc
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 
 #include <algorithm>
 #include <string>
@@ -37,7 +37,7 @@
 namespace script {
 namespace javascriptcore {
 
-void JSCGlobalObjectProxy::PreventGarbageCollection(
+void JSCGlobalEnvironment::PreventGarbageCollection(
     const scoped_refptr<Wrappable>& wrappable) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(global_object_);
@@ -49,13 +49,13 @@
   global_object_->object_cache()->CacheJSObject(wrapper);
 }
 
-JSCGlobalObjectProxy::~JSCGlobalObjectProxy() {
+JSCGlobalEnvironment::~JSCGlobalEnvironment() {
   if (global_object_.get()) {
     global_object_->setReportEvalCallback(NULL);
   }
 }
 
-void JSCGlobalObjectProxy::CreateGlobalObject() {
+void JSCGlobalEnvironment::CreateGlobalObject() {
   DCHECK(thread_checker_.CalledOnValidThread());
   JSC::JSLockHolder lock(engine_->global_data());
 
@@ -64,7 +64,7 @@
   SetGlobalObject(global_object);
 }
 
-void JSCGlobalObjectProxy::AllowGarbageCollection(
+void JSCGlobalEnvironment::AllowGarbageCollection(
     const scoped_refptr<Wrappable>& wrappable) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(global_object_);
@@ -76,23 +76,23 @@
   global_object_->object_cache()->UncacheJSObject(wrapper);
 }
 
-void JSCGlobalObjectProxy::DisableEval(const std::string& message) {
+void JSCGlobalEnvironment::DisableEval(const std::string& message) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(global_object_);
   global_object_->setEvalEnabled(false, message.c_str());
 }
 
-void JSCGlobalObjectProxy::EnableEval() {
+void JSCGlobalEnvironment::EnableEval() {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(global_object_);
   global_object_->setEvalEnabled(true);
 }
 
-void JSCGlobalObjectProxy::Bind(const std::string& identifier,
+void JSCGlobalEnvironment::Bind(const std::string& identifier,
                                 const scoped_refptr<Wrappable>& impl) {
   DCHECK(thread_checker_.CalledOnValidThread());
   javascriptcore::JSCGlobalObject* jsc_global_object =
-      base::polymorphic_downcast<javascriptcore::JSCGlobalObjectProxy*>(this)
+      base::polymorphic_downcast<javascriptcore::JSCGlobalEnvironment*>(this)
           ->global_object();
 
   JSC::JSLockHolder lock(&jsc_global_object->globalData());
@@ -112,7 +112,7 @@
                                wrapper);
 }
 
-bool JSCGlobalObjectProxy::EvaluateScript(
+bool JSCGlobalEnvironment::EvaluateScript(
     const scoped_refptr<SourceCode>& source_code, std::string* out_result) {
   DCHECK(thread_checker_.CalledOnValidThread());
   JSC::JSLockHolder lock(global_object_->globalData());
@@ -133,7 +133,7 @@
   return success;
 }
 
-bool JSCGlobalObjectProxy::EvaluateScript(
+bool JSCGlobalEnvironment::EvaluateScript(
     const scoped_refptr<SourceCode>& source_code,
     const scoped_refptr<Wrappable>& owning_object,
     base::optional<OpaqueHandleHolder::Reference>* out_opaque_handle) {
@@ -155,18 +155,18 @@
   return true;
 }
 
-std::vector<StackFrame> JSCGlobalObjectProxy::GetStackTrace(int max_frames) {
+std::vector<StackFrame> JSCGlobalEnvironment::GetStackTrace(int max_frames) {
   DCHECK(thread_checker_.CalledOnValidThread());
   return util::GetStackTrace(global_object_->globalExec(), max_frames);
 }
 
-void JSCGlobalObjectProxy::reportEval() {
+void JSCGlobalEnvironment::reportEval() {
   if (!report_eval_cb_.is_null()) {
     report_eval_cb_.Run();
   }
 }
 
-void JSCGlobalObjectProxy::SetGlobalObject(JSCGlobalObject* jsc_global_object) {
+void JSCGlobalEnvironment::SetGlobalObject(JSCGlobalObject* jsc_global_object) {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK_EQ(reinterpret_cast<uintptr_t>(global_object_.get()), NULL);
   global_object_ =
@@ -176,10 +176,10 @@
   DisableEval("eval() is disabled by default.");
 }
 
-bool JSCGlobalObjectProxy::EvaluateScriptInternal(
+bool JSCGlobalEnvironment::EvaluateScriptInternal(
     const scoped_refptr<SourceCode>& source_code, JSC::JSValue* out_result) {
   TRACE_EVENT0("cobalt::script::javascriptcore",
-               "JSCGlobalObjectProxy::EvaluateScriptInternal");
+               "JSCGlobalEnvironment::EvaluateScriptInternal");
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(global_object_);
 
diff --git a/src/cobalt/script/javascriptcore/jsc_global_object_proxy.h b/src/cobalt/script/javascriptcore/jsc_global_environment.h
similarity index 86%
rename from src/cobalt/script/javascriptcore/jsc_global_object_proxy.h
rename to src/cobalt/script/javascriptcore/jsc_global_environment.h
index 0ec1d03..785c938 100644
--- a/src/cobalt/script/javascriptcore/jsc_global_object_proxy.h
+++ b/src/cobalt/script/javascriptcore/jsc_global_environment.h
@@ -13,8 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_OBJECT_PROXY_H_
-#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_OBJECT_PROXY_H_
+#ifndef COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_ENVIRONMENT_H_
+#define COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_ENVIRONMENT_H_
 
 #include <string>
 #include <vector>
@@ -22,7 +22,7 @@
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
 #include "base/threading/thread_checker.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_engine.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
 
@@ -32,14 +32,14 @@
 
 class ScriptObjectRegistry;
 
-// GlobalObjectProxy is a ref-counted object that is managed by the browser, and
+// GlobalEnvironment is a ref-counted object that is managed by the browser, and
 // JavaScriptCore's JSGlobalObject is a garbage-collected object.
 // It should only be accessed from the thread that created it.
-class JSCGlobalObjectProxy : public GlobalObjectProxy,
+class JSCGlobalEnvironment : public GlobalEnvironment,
                              public JSC::ReportEvalCallback {
  public:
-  explicit JSCGlobalObjectProxy(JSCEngine* engine) : engine_(engine) {}
-  ~JSCGlobalObjectProxy() OVERRIDE;
+  explicit JSCGlobalEnvironment(JSCEngine* engine) : engine_(engine) {}
+  ~JSCGlobalEnvironment() OVERRIDE;
 
   void CreateGlobalObject() OVERRIDE;
 
@@ -96,11 +96,11 @@
   JSC::Strong<JSCGlobalObject> global_object_;
   JSCEngine* engine_;
   base::Closure report_eval_cb_;
-  friend class GlobalObjectProxy;
+  friend class GlobalEnvironment;
 };
 
 }  // namespace javascriptcore
 }  // namespace script
 }  // namespace cobalt
 
-#endif  // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_OBJECT_PROXY_H_
+#endif  // COBALT_SCRIPT_JAVASCRIPTCORE_JSC_GLOBAL_ENVIRONMENT_H_
diff --git a/src/cobalt/script/javascriptcore/numeric_conversion_test.cc b/src/cobalt/script/javascriptcore/numeric_conversion_test.cc
index 04c9481..3209d88 100644
--- a/src/cobalt/script/javascriptcore/numeric_conversion_test.cc
+++ b/src/cobalt/script/javascriptcore/numeric_conversion_test.cc
@@ -16,17 +16,14 @@
 
 #include <limits>
 
-#include "config.h"
-#undef LOG
-
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/global_object_proxy.h"
 #include "cobalt/script/javascript_engine.h"
 #include "cobalt/script/javascriptcore/conversion_helpers.h"
+#include "cobalt/script/javascriptcore/jsc_global_environment.h"
 #include "cobalt/script/javascriptcore/jsc_global_object.h"
-#include "cobalt/script/javascriptcore/jsc_global_object_proxy.h"
 #include "cobalt/script/testing/mock_exception_state.h"
 #include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/Source/JavaScriptCore/config.h"
 #include "third_party/WebKit/Source/JavaScriptCore/runtime/JSFunction.h"
 #include "third_party/WebKit/Source/JavaScriptCore/runtime/JSString.h"
 #include "third_party/WebKit/Source/JavaScriptCore/runtime/JSValue.h"
@@ -50,12 +47,13 @@
  public:
   NumericConversionTest()
       : engine_(JavaScriptEngine::CreateEngine()),
-        global_object_proxy_(engine_->CreateGlobalObjectProxy()),
+        global_environment_(engine_->CreateGlobalEnvironment()),
         jsc_global_object_(NULL),
         exec_state_(NULL) {
-    global_object_proxy_->CreateGlobalObject();
-    jsc_global_object_ = base::polymorphic_downcast<JSCGlobalObjectProxy*>(
-                             global_object_proxy_.get())->global_object();
+    global_environment_->CreateGlobalObject();
+    jsc_global_object_ = base::polymorphic_downcast<JSCGlobalEnvironment*>(
+                             global_environment_.get())
+                             ->global_object();
     exec_state_ = jsc_global_object_->globalExec();
   }
 
@@ -70,7 +68,7 @@
   }
 
   const scoped_ptr<JavaScriptEngine> engine_;
-  const scoped_refptr<GlobalObjectProxy> global_object_proxy_;
+  const scoped_refptr<GlobalEnvironment> global_environment_;
   JSCGlobalObject* jsc_global_object_;
   JSC::ExecState* exec_state_;
   testing::MockExceptionState exception_state_;
diff --git a/src/cobalt/script/mozjs/callback_function_conversion.h b/src/cobalt/script/mozjs/callback_function_conversion.h
index 85fd73a..68bd37e 100644
--- a/src/cobalt/script/mozjs/callback_function_conversion.h
+++ b/src/cobalt/script/mozjs/callback_function_conversion.h
@@ -81,10 +81,10 @@
     return;
   }
 
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   *out_callback_function = MozjsCallbackHolderClass(
-      object, context, global_object_proxy->wrapper_factory());
+      object, context, global_environment->wrapper_factory());
 }
 
 }  // namespace mozjs
diff --git a/src/cobalt/script/mozjs/conversion_helpers.cc b/src/cobalt/script/mozjs/conversion_helpers.cc
index 5eb537d..caffcdc 100644
--- a/src/cobalt/script/mozjs/conversion_helpers.cc
+++ b/src/cobalt/script/mozjs/conversion_helpers.cc
@@ -99,10 +99,10 @@
   }
 
   DCHECK(js_object);
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   *out_holder = MozjsObjectHandleHolder(js_object, context,
-                                        global_object_proxy->wrapper_factory());
+                                        global_environment->wrapper_factory());
 }
 
 }  // namespace mozjs
diff --git a/src/cobalt/script/mozjs/conversion_helpers.h b/src/cobalt/script/mozjs/conversion_helpers.h
index ef3c581..3d54ec6 100644
--- a/src/cobalt/script/mozjs/conversion_helpers.h
+++ b/src/cobalt/script/mozjs/conversion_helpers.h
@@ -27,7 +27,7 @@
 #include "cobalt/base/token.h"
 #include "cobalt/script/mozjs/mozjs_callback_interface_holder.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
 #include "cobalt/script/mozjs/type_traits.h"
@@ -363,11 +363,11 @@
     return;
   }
 
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   JS::RootedObject object(
       context,
-      global_object_proxy->wrapper_factory()->GetWrapperProxy(in_object));
+      global_environment->wrapper_factory()->GetWrapperProxy(in_object));
   DCHECK(object);
 
   out_value.set(OBJECT_TO_JSVAL(object));
@@ -394,10 +394,10 @@
   DCHECK(js_object);
   if (js::IsProxy(js_object)) {
     JS::RootedObject wrapper(context, js::GetProxyTargetObject(js_object));
-    MozjsGlobalObjectProxy* global_object_proxy =
-        static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+    MozjsGlobalEnvironment* global_environment =
+        static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
     const WrapperFactory* wrapper_factory =
-        global_object_proxy->wrapper_factory();
+        global_environment->wrapper_factory();
     if (wrapper_factory->IsWrapper(wrapper)) {
       bool object_implements_interface =
           wrapper_factory->DoesObjectImplementInterface(js_object,
@@ -471,13 +471,13 @@
     return;
   }
 
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
 
   JS::RootedObject implementing_object(context, JSVAL_TO_OBJECT(value));
   DCHECK(implementing_object);
   *out_callback_interface = MozjsCallbackInterfaceHolder<T>(
-      implementing_object, context, global_object_proxy->wrapper_factory());
+      implementing_object, context, global_environment->wrapper_factory());
 }
 
 }  // namespace mozjs
diff --git a/src/cobalt/script/mozjs/mozjs.cc b/src/cobalt/script/mozjs/mozjs.cc
index 6625ed2..3d78b16 100644
--- a/src/cobalt/script/mozjs/mozjs.cc
+++ b/src/cobalt/script/mozjs/mozjs.cc
@@ -20,7 +20,7 @@
 #include "base/file_path.h"
 #include "base/string_util.h"
 #include "cobalt/base/wrap_main.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/source_code.h"
 #include "cobalt/script/standalone_javascript_runner.h"
 #include "third_party/mozjs/js/src/jsapi.h"
@@ -62,12 +62,12 @@
 
 int MozjsMain(int argc, char** argv) {
   cobalt::script::StandaloneJavascriptRunner standalone_runner;
-  MozjsGlobalObjectProxy* global_object_environment =
-      static_cast<MozjsGlobalObjectProxy*>(
-          standalone_runner.global_object_proxy().get());
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(
+          standalone_runner.global_environment().get());
 
-  SetupBindings(global_object_environment->context(),
-                global_object_environment->global_object());
+  SetupBindings(global_environment->context(),
+                global_environment->global_object());
 
   if (argc > 1) {
     // Command line arguments will be flag-value pairs of the form
@@ -89,8 +89,7 @@
 
         // Execute the script and get the results of execution.
         std::string result;
-        bool success =
-            global_object_environment->EvaluateScript(source, &result);
+        bool success = global_environment->EvaluateScript(source, &result);
         // Echo the results to stdout.
         if (!success) {
           std::cout << "Exception: ";
diff --git a/src/cobalt/script/mozjs/mozjs.gyp b/src/cobalt/script/mozjs/mozjs.gyp
index 76f11c1..b29d99b 100644
--- a/src/cobalt/script/mozjs/mozjs.gyp
+++ b/src/cobalt/script/mozjs/mozjs.gyp
@@ -23,9 +23,10 @@
         'mozjs_debugger.cc',
         'mozjs_engine.cc',
         'mozjs_exception_state.cc',
-        'mozjs_global_object_proxy.cc',
+        'mozjs_global_environment.cc',
         'mozjs_property_enumerator.cc',
         'mozjs_source_code.cc',
+        'opaque_root_tracker.cc',
         'proxy_handler.cc',
         'referenced_object_map.cc',
         'util/exception_helpers.cc',
diff --git a/src/cobalt/script/mozjs/mozjs_debugger.cc b/src/cobalt/script/mozjs/mozjs_debugger.cc
index e4ae668..8876311 100644
--- a/src/cobalt/script/mozjs/mozjs_debugger.cc
+++ b/src/cobalt/script/mozjs/mozjs_debugger.cc
@@ -23,14 +23,14 @@
 
 // Static factory method declared in public interface.
 scoped_ptr<ScriptDebugger> ScriptDebugger::CreateDebugger(
-    GlobalObjectProxy* global_object_proxy, Delegate* delegate) {
+    GlobalEnvironment* global_environment, Delegate* delegate) {
   return scoped_ptr<ScriptDebugger>(
-      new mozjs::MozjsDebugger(global_object_proxy, delegate));
+      new mozjs::MozjsDebugger(global_environment, delegate));
 }
 
 namespace mozjs {
 
-MozjsDebugger::MozjsDebugger(GlobalObjectProxy* global_object_proxy,
+MozjsDebugger::MozjsDebugger(GlobalEnvironment* global_environment,
                              Delegate* delegate) {
   NOTIMPLEMENTED();
 }
diff --git a/src/cobalt/script/mozjs/mozjs_debugger.h b/src/cobalt/script/mozjs/mozjs_debugger.h
index 63fd7f2..0b5e11d 100644
--- a/src/cobalt/script/mozjs/mozjs_debugger.h
+++ b/src/cobalt/script/mozjs/mozjs_debugger.h
@@ -26,7 +26,7 @@
 
 class MozjsDebugger : public ScriptDebugger {
  public:
-  MozjsDebugger(GlobalObjectProxy* global_object_proxy, Delegate* delegate);
+  MozjsDebugger(GlobalEnvironment* global_environment, Delegate* delegate);
   ~MozjsDebugger() OVERRIDE;
 
   // Implementation of ScriptDebugger.
diff --git a/src/cobalt/script/mozjs/mozjs_engine.cc b/src/cobalt/script/mozjs/mozjs_engine.cc
index 23444fa..b4d16ec 100644
--- a/src/cobalt/script/mozjs/mozjs_engine.cc
+++ b/src/cobalt/script/mozjs/mozjs_engine.cc
@@ -19,7 +19,7 @@
 #include <algorithm>
 
 #include "base/logging.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "third_party/mozjs/js/src/jsapi.h"
 
 namespace cobalt {
@@ -51,6 +51,9 @@
   // JSRuntime.
   JS_SetContextCallback(runtime_, &MozjsEngine::ContextCallback);
 
+  // Callback to be called at different points during garbage collection.
+  JS_SetGCCallback(runtime_, &MozjsEngine::GCCallback);
+
   // Callback to be called during garbage collection during the sweep phase.
   JS_SetFinalizeCallback(runtime_, &MozjsEngine::FinalizeCallback);
 }
@@ -60,9 +63,9 @@
   JS_DestroyRuntime(runtime_);
 }
 
-scoped_refptr<GlobalObjectProxy> MozjsEngine::CreateGlobalObjectProxy() {
+scoped_refptr<GlobalEnvironment> MozjsEngine::CreateGlobalEnvironment() {
   DCHECK(thread_checker_.CalledOnValidThread());
-  return new MozjsGlobalObjectProxy(runtime_);
+  return new MozjsGlobalEnvironment(runtime_);
 }
 
 void MozjsEngine::CollectGarbage() {
@@ -89,6 +92,20 @@
   return true;
 }
 
+void MozjsEngine::GCCallback(JSRuntime* runtime, JSGCStatus status) {
+  MozjsEngine* engine =
+      static_cast<MozjsEngine*>(JS_GetRuntimePrivate(runtime));
+  for (int i = 0; i < engine->contexts_.size(); ++i) {
+    MozjsGlobalEnvironment* global_environment =
+        MozjsGlobalEnvironment::GetFromContext(engine->contexts_[i]);
+    if (status == JSGC_BEGIN) {
+      global_environment->BeginGarbageCollection();
+    } else if (status == JSGC_END) {
+      global_environment->EndGarbageCollection();
+    }
+  }
+}
+
 void MozjsEngine::FinalizeCallback(JSFreeOp* free_op, JSFinalizeStatus status,
                                    JSBool is_compartment) {
   MozjsEngine* engine =
@@ -96,8 +113,8 @@
   DCHECK(engine->thread_checker_.CalledOnValidThread());
   if (status == JSFINALIZE_GROUP_START) {
     for (int i = 0; i < engine->contexts_.size(); ++i) {
-      MozjsGlobalObjectProxy* global_environment =
-          MozjsGlobalObjectProxy::GetFromContext(engine->contexts_[i]);
+      MozjsGlobalEnvironment* global_environment =
+          MozjsGlobalEnvironment::GetFromContext(engine->contexts_[i]);
       global_environment->DoSweep();
     }
   }
diff --git a/src/cobalt/script/mozjs/mozjs_engine.h b/src/cobalt/script/mozjs/mozjs_engine.h
index 12a24fd..a678a15 100644
--- a/src/cobalt/script/mozjs/mozjs_engine.h
+++ b/src/cobalt/script/mozjs/mozjs_engine.h
@@ -31,12 +31,13 @@
   MozjsEngine();
   ~MozjsEngine() OVERRIDE;
 
-  scoped_refptr<GlobalObjectProxy> CreateGlobalObjectProxy() OVERRIDE;
+  scoped_refptr<GlobalEnvironment> CreateGlobalEnvironment() OVERRIDE;
   void CollectGarbage() OVERRIDE;
   void ReportExtraMemoryCost(size_t bytes) OVERRIDE;
 
  private:
   static JSBool ContextCallback(JSContext* context, unsigned context_op);
+  static void GCCallback(JSRuntime* runtime, JSGCStatus status);
   static void FinalizeCallback(JSFreeOp* free_op, JSFinalizeStatus status,
                                JSBool is_compartment);
 
diff --git a/src/cobalt/script/mozjs/mozjs_exception_state.cc b/src/cobalt/script/mozjs/mozjs_exception_state.cc
index 111b56e..9b2a5ec 100644
--- a/src/cobalt/script/mozjs/mozjs_exception_state.cc
+++ b/src/cobalt/script/mozjs/mozjs_exception_state.cc
@@ -59,12 +59,12 @@
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(!is_exception_set_);
 
-  MozjsGlobalObjectProxy* global_object_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context_));
+  MozjsGlobalEnvironment* global_environment =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context_));
 
   JS::RootedObject exception_object(
       context_,
-      global_object_proxy->wrapper_factory()->GetWrapperProxy(exception));
+      global_environment->wrapper_factory()->GetWrapperProxy(exception));
   JS::RootedValue exception_value(context_, OBJECT_TO_JSVAL(exception_object));
   JS_SetPendingException(context_, exception_value);
 
diff --git a/src/cobalt/script/mozjs/mozjs_global_object_proxy.cc b/src/cobalt/script/mozjs/mozjs_global_environment.cc
similarity index 84%
rename from src/cobalt/script/mozjs/mozjs_global_object_proxy.cc
rename to src/cobalt/script/mozjs/mozjs_global_environment.cc
index 273f328..84a8d91 100644
--- a/src/cobalt/script/mozjs/mozjs_global_object_proxy.cc
+++ b/src/cobalt/script/mozjs/mozjs_global_environment.cc
@@ -13,7 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 
 #include <algorithm>
 #include <utility>
@@ -120,7 +120,7 @@
 static base::LazyInstance<MozjsStubHandler> proxy_handler;
 }  // namespace
 
-MozjsGlobalObjectProxy::MozjsGlobalObjectProxy(JSRuntime* runtime)
+MozjsGlobalEnvironment::MozjsGlobalEnvironment(JSRuntime* runtime)
     : context_(NULL),
       cached_interface_data_deleter_(&cached_interface_data_),
       context_destructor_(&context_),
@@ -149,20 +149,22 @@
 #endif
   JS_SetOptions(context_, options);
 
-  JS_SetErrorReporter(context_, &MozjsGlobalObjectProxy::ReportErrorHandler);
+  JS_SetErrorReporter(context_, &MozjsGlobalEnvironment::ReportErrorHandler);
 
   wrapper_factory_.reset(new WrapperFactory(context_));
   referenced_objects_.reset(new ReferencedObjectMap(context_));
+  opaque_root_tracker_.reset(new OpaqueRootTracker(
+      context_, referenced_objects_.get(), wrapper_factory_.get()));
 
   JS_AddExtraGCRootsTracer(runtime, TraceFunction, this);
 }
 
-MozjsGlobalObjectProxy::~MozjsGlobalObjectProxy() {
+MozjsGlobalEnvironment::~MozjsGlobalEnvironment() {
   DCHECK(thread_checker_.CalledOnValidThread());
   JS_RemoveExtraGCRootsTracer(JS_GetRuntime(context_), TraceFunction, this);
 }
 
-void MozjsGlobalObjectProxy::CreateGlobalObject() {
+void MozjsGlobalEnvironment::CreateGlobalObject() {
   DCHECK(thread_checker_.CalledOnValidThread());
   DCHECK(!global_object_proxy_);
 
@@ -188,7 +190,7 @@
   global_object_proxy_ = proxy;
 }
 
-bool MozjsGlobalObjectProxy::EvaluateScript(
+bool MozjsGlobalEnvironment::EvaluateScript(
     const scoped_refptr<SourceCode>& source_code,
     std::string* out_result_utf8) {
   DCHECK(thread_checker_.CalledOnValidThread());
@@ -233,12 +235,12 @@
   return success;
 }
 
-std::vector<StackFrame> MozjsGlobalObjectProxy::GetStackTrace(int max_frames) {
+std::vector<StackFrame> MozjsGlobalEnvironment::GetStackTrace(int max_frames) {
   DCHECK(thread_checker_.CalledOnValidThread());
   return util::GetStackTrace(context_, max_frames);
 }
 
-void MozjsGlobalObjectProxy::PreventGarbageCollection(
+void MozjsGlobalEnvironment::PreventGarbageCollection(
     const scoped_refptr<Wrappable>& wrappable) {
   DCHECK(thread_checker_.CalledOnValidThread());
   JSAutoRequest auto_request(context_);
@@ -250,7 +252,7 @@
       wrappable.get(), JS::Heap<JSObject*>(proxy)));
 }
 
-void MozjsGlobalObjectProxy::AllowGarbageCollection(
+void MozjsGlobalEnvironment::AllowGarbageCollection(
     const scoped_refptr<Wrappable>& wrappable) {
   DCHECK(thread_checker_.CalledOnValidThread());
   CachedWrapperMultiMap::iterator it =
@@ -261,25 +263,25 @@
   }
 }
 
-void MozjsGlobalObjectProxy::DisableEval(const std::string& message) {
+void MozjsGlobalEnvironment::DisableEval(const std::string& message) {
   DCHECK(thread_checker_.CalledOnValidThread());
   eval_disabled_message_.emplace(message);
   eval_enabled_ = false;
 }
 
-void MozjsGlobalObjectProxy::EnableEval() {
+void MozjsGlobalEnvironment::EnableEval() {
   DCHECK(thread_checker_.CalledOnValidThread());
   eval_disabled_message_ = base::nullopt;
   eval_enabled_ = true;
 }
 
-void MozjsGlobalObjectProxy::SetReportEvalCallback(
+void MozjsGlobalEnvironment::SetReportEvalCallback(
     const base::Closure& report_eval) {
   DCHECK(thread_checker_.CalledOnValidThread());
   report_eval_ = report_eval;
 }
 
-void MozjsGlobalObjectProxy::Bind(const std::string& identifier,
+void MozjsGlobalEnvironment::Bind(const std::string& identifier,
                                   const scoped_refptr<Wrappable>& impl) {
   JSAutoRequest auto_request(context_);
   JSAutoCompartment auto_compartment(context_, global_object_proxy_);
@@ -294,7 +296,7 @@
   DCHECK(success);
 }
 
-InterfaceData* MozjsGlobalObjectProxy::GetInterfaceData(intptr_t key) {
+InterfaceData* MozjsGlobalEnvironment::GetInterfaceData(intptr_t key) {
   CachedInterfaceData::iterator it = cached_interface_data_.find(key);
   if (it != cached_interface_data_.end()) {
     return it->second;
@@ -302,21 +304,37 @@
   return NULL;
 }
 
-void MozjsGlobalObjectProxy::DoSweep() {
+void MozjsGlobalEnvironment::DoSweep() {
   weak_object_manager_.SweepUnmarkedObjects();
   // Remove NULL references after sweeping weak references.
   referenced_objects_->RemoveNullReferences();
 }
 
-MozjsGlobalObjectProxy* MozjsGlobalObjectProxy::GetFromContext(
+void MozjsGlobalEnvironment::BeginGarbageCollection() {
+  DCHECK(!opaque_root_state_);
+  JSAutoRequest auto_request(context_);
+  JSAutoCompartment auto_comparment(context_, global_object_proxy_);
+  // Get the current state of opaque root relationships. Keep this object
+  // alive for the duration of the GC phase to ensure that reachability between
+  // roots and reachable objects is maintained.
+  opaque_root_state_ = opaque_root_tracker_->GetCurrentOpaqueRootState();
+}
+
+void MozjsGlobalEnvironment::EndGarbageCollection() {
+  DCHECK(opaque_root_state_);
+  // Reset opaque root reachability relationships.
+  opaque_root_state_.reset(NULL);
+}
+
+MozjsGlobalEnvironment* MozjsGlobalEnvironment::GetFromContext(
     JSContext* context) {
-  MozjsGlobalObjectProxy* global_proxy =
-      static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+  MozjsGlobalEnvironment* global_proxy =
+      static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
   DCHECK(global_proxy);
   return global_proxy;
 }
 
-void MozjsGlobalObjectProxy::SetGlobalObjectProxyAndWrapper(
+void MozjsGlobalEnvironment::SetGlobalObjectProxyAndWrapper(
     JS::HandleObject global_object_proxy,
     const scoped_refptr<Wrappable>& wrappable) {
   DCHECK(!global_object_proxy_);
@@ -338,17 +356,17 @@
   SetCachedWrapper(wrappable.get(), object_handle.Pass());
 }
 
-void MozjsGlobalObjectProxy::CacheInterfaceData(intptr_t key,
+void MozjsGlobalEnvironment::CacheInterfaceData(intptr_t key,
                                                 InterfaceData* interface_data) {
   std::pair<CachedInterfaceData::iterator, bool> pib =
       cached_interface_data_.insert(std::make_pair(key, interface_data));
   DCHECK(pib.second);
 }
 
-void MozjsGlobalObjectProxy::ReportErrorHandler(JSContext* context,
+void MozjsGlobalEnvironment::ReportErrorHandler(JSContext* context,
                                                 const char* message,
                                                 JSErrorReport* report) {
-  MozjsGlobalObjectProxy* global_object_proxy = GetFromContext(context);
+  MozjsGlobalEnvironment* global_object_proxy = GetFromContext(context);
   std::string error_message;
   if (report->errorNumber == JSMSG_CSP_BLOCKED_EVAL) {
     error_message =
@@ -364,13 +382,13 @@
   }
 }
 
-void MozjsGlobalObjectProxy::TraceFunction(JSTracer* trace, void* data) {
-  MozjsGlobalObjectProxy* global_object_environment =
-      reinterpret_cast<MozjsGlobalObjectProxy*>(data);
+void MozjsGlobalEnvironment::TraceFunction(JSTracer* trace, void* data) {
+  MozjsGlobalEnvironment* global_object_environment =
+      reinterpret_cast<MozjsGlobalEnvironment*>(data);
   if (global_object_environment->global_object_proxy_) {
     JS_CallHeapObjectTracer(trace,
                             &global_object_environment->global_object_proxy_,
-                            "MozjsGlobalObjectProxy");
+                            "MozjsGlobalEnvironment");
   }
   for (CachedInterfaceData::iterator it =
            global_object_environment->cached_interface_data_.begin();
@@ -380,22 +398,22 @@
     // created yet or not before attempting to trace them.
     if (data->prototype) {
       JS_CallHeapObjectTracer(trace, &data->prototype,
-                              "MozjsGlobalObjectProxy");
+                              "MozjsGlobalEnvironment");
     }
     if (data->interface_object) {
       JS_CallHeapObjectTracer(trace, &data->interface_object,
-                              "MozjsGlobalObjectProxy");
+                              "MozjsGlobalEnvironment");
     }
   }
   for (CachedWrapperMultiMap::iterator it =
            global_object_environment->kept_alive_objects_.begin();
        it != global_object_environment->kept_alive_objects_.end(); ++it) {
-    JS_CallHeapObjectTracer(trace, &it->second, "MozjsGlobalObjectProxy");
+    JS_CallHeapObjectTracer(trace, &it->second, "MozjsGlobalEnvironment");
   }
 }
 
-JSBool MozjsGlobalObjectProxy::CheckEval(JSContext* context) {
-  MozjsGlobalObjectProxy* global_object_proxy = GetFromContext(context);
+JSBool MozjsGlobalEnvironment::CheckEval(JSContext* context) {
+  MozjsGlobalEnvironment* global_object_proxy = GetFromContext(context);
   DCHECK(global_object_proxy);
   if (!global_object_proxy->report_eval_.is_null()) {
     global_object_proxy->report_eval_.Run();
diff --git a/src/cobalt/script/mozjs/mozjs_global_object_proxy.h b/src/cobalt/script/mozjs/mozjs_global_environment.h
similarity index 86%
rename from src/cobalt/script/mozjs/mozjs_global_object_proxy.h
rename to src/cobalt/script/mozjs/mozjs_global_environment.h
index de36ae6..eb0d2eb 100644
--- a/src/cobalt/script/mozjs/mozjs_global_object_proxy.h
+++ b/src/cobalt/script/mozjs/mozjs_global_environment.h
@@ -13,8 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-#ifndef COBALT_SCRIPT_MOZJS_MOZJS_GLOBAL_OBJECT_PROXY_H_
-#define COBALT_SCRIPT_MOZJS_MOZJS_GLOBAL_OBJECT_PROXY_H_
+#ifndef COBALT_SCRIPT_MOZJS_MOZJS_GLOBAL_ENVIRONMENT_H_
+#define COBALT_SCRIPT_MOZJS_MOZJS_GLOBAL_ENVIRONMENT_H_
 
 #include <string>
 #include <vector>
@@ -24,8 +24,9 @@
 #include "base/optional.h"
 #include "base/stl_util.h"
 #include "base/threading/thread_checker.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/mozjs/interface_data.h"
+#include "cobalt/script/mozjs/opaque_root_tracker.h"
 #include "cobalt/script/mozjs/util/exception_helpers.h"
 #include "cobalt/script/mozjs/weak_heap_object_manager.h"
 #include "cobalt/script/mozjs/wrapper_factory.h"
@@ -41,11 +42,11 @@
 
 // Manages a handle to a JavaScript engine's global object. The lifetime of
 // the global object is not necessarily tied to the lifetime of the proxy.
-class MozjsGlobalObjectProxy : public GlobalObjectProxy,
+class MozjsGlobalEnvironment : public GlobalEnvironment,
                                public Wrappable::CachedWrapperAccessor {
  public:
-  explicit MozjsGlobalObjectProxy(JSRuntime* runtime);
-  ~MozjsGlobalObjectProxy() OVERRIDE;
+  explicit MozjsGlobalEnvironment(JSRuntime* runtime);
+  ~MozjsGlobalEnvironment() OVERRIDE;
 
   void CreateGlobalObject() OVERRIDE;
 
@@ -92,6 +93,10 @@
 
   WeakHeapObjectManager* weak_object_manager() { return &weak_object_manager_; }
 
+  OpaqueRootTracker* opaque_root_tracker() {
+    return opaque_root_tracker_.get();
+  }
+
   // Used for CallWith=EnvironmentSettings
   void SetEnvironmentSettings(EnvironmentSettings* environment_settings) {
     DCHECK(!environment_settings_);
@@ -108,7 +113,7 @@
       const scoped_refptr<Wrappable>& wrappable);
 
   // Any tracked InterfaceData will have it's GC handles visited and marked as
-  // roots. The MozjsGlobalObjectProxy takes ownership of the InterfaceData
+  // roots. The MozjsGlobalEnvironment takes ownership of the InterfaceData
   // instances and will destroy them.
   void CacheInterfaceData(intptr_t key, InterfaceData* interface_data);
   InterfaceData* GetInterfaceData(intptr_t key);
@@ -118,7 +123,10 @@
   // sweep away references to GC objects that will be deleted.
   void DoSweep();
 
-  static MozjsGlobalObjectProxy* GetFromContext(JSContext* context);
+  void BeginGarbageCollection();
+  void EndGarbageCollection();
+
+  static MozjsGlobalEnvironment* GetFromContext(JSContext* context);
 
  protected:
   static void ReportErrorHandler(JSContext* context, const char* message,
@@ -132,7 +140,7 @@
   static JSBool CheckEval(JSContext* context);
 
   // Helper struct to ensure the context is destroyed in the correct order
-  // relative to the MozjsGlobalObjectProxy's other members.
+  // relative to the MozjsGlobalEnvironment's other members.
   struct ContextDestructor {
     explicit ContextDestructor(JSContext** context) : context(context) {}
     ~ContextDestructor() { JS_DestroyContext(*context); }
@@ -148,10 +156,12 @@
   WeakHeapObjectManager weak_object_manager_;
   CachedWrapperMultiMap kept_alive_objects_;
   scoped_ptr<ReferencedObjectMap> referenced_objects_;
+  scoped_ptr<OpaqueRootTracker> opaque_root_tracker_;
   CachedInterfaceData cached_interface_data_;
   STLValueDeleter<CachedInterfaceData> cached_interface_data_deleter_;
   ContextDestructor context_destructor_;
   scoped_ptr<WrapperFactory> wrapper_factory_;
+  scoped_ptr<OpaqueRootTracker::OpaqueRootState> opaque_root_state_;
   JS::Heap<JSObject*> global_object_proxy_;
   EnvironmentSettings* environment_settings_;
 
@@ -170,4 +180,4 @@
 }  // namespace script
 }  // namespace cobalt
 
-#endif  // COBALT_SCRIPT_MOZJS_MOZJS_GLOBAL_OBJECT_PROXY_H_
+#endif  // COBALT_SCRIPT_MOZJS_MOZJS_GLOBAL_ENVIRONMENT_H_
diff --git a/src/cobalt/script/mozjs/mozjs_user_object_holder.h b/src/cobalt/script/mozjs/mozjs_user_object_holder.h
index e51a8bb..2ee384f 100644
--- a/src/cobalt/script/mozjs/mozjs_user_object_holder.h
+++ b/src/cobalt/script/mozjs/mozjs_user_object_holder.h
@@ -19,7 +19,7 @@
 #include "base/hash_tables.h"
 #include "base/memory/weak_ptr.h"
 #include "cobalt/base/polymorphic_downcast.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/referenced_object_map.h"
 #include "cobalt/script/mozjs/wrapper_factory.h"
 #include "cobalt/script/mozjs/wrapper_private.h"
@@ -55,8 +55,8 @@
     DLOG_IF(WARNING, !owned_object)
         << "Owned object has been garbage collected.";
     if (owned_object) {
-      MozjsGlobalObjectProxy* global_environment =
-          MozjsGlobalObjectProxy::GetFromContext(context_);
+      MozjsGlobalEnvironment* global_environment =
+          MozjsGlobalEnvironment::GetFromContext(context_);
       intptr_t key = ReferencedObjectMap::GetKeyForWrappable(owner);
       global_environment->referenced_objects()->AddReferencedObject(
           key, owned_object);
@@ -67,8 +67,8 @@
     // |owner| may be in the process of being destructed, so don't use it.
     JS::RootedObject owned_object(context_, js_object());
     if (owned_object) {
-      MozjsGlobalObjectProxy* global_environment =
-          MozjsGlobalObjectProxy::GetFromContext(context_);
+      MozjsGlobalEnvironment* global_environment =
+          MozjsGlobalEnvironment::GetFromContext(context_);
       intptr_t key = ReferencedObjectMap::GetKeyForWrappable(owner);
       global_environment->referenced_objects()->RemoveReferencedObject(
           key, owned_object);
diff --git a/src/cobalt/script/mozjs/opaque_root_tracker.cc b/src/cobalt/script/mozjs/opaque_root_tracker.cc
new file mode 100644
index 0000000..22bfc40
--- /dev/null
+++ b/src/cobalt/script/mozjs/opaque_root_tracker.cc
@@ -0,0 +1,117 @@
+/*
+ * Copyright 2016 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.
+ */
+
+#include "cobalt/script/mozjs/opaque_root_tracker.h"
+
+#include <utility>
+#include <vector>
+
+#include "cobalt/script/mozjs/weak_heap_object.h"
+
+namespace cobalt {
+namespace script {
+namespace mozjs {
+namespace {
+// Implementation of OpaqueRootTracker::OpaqueRootState.
+// On creation, this class will register reachability between objects and their
+// roots in |ReferencedObjectMap|. On destruction, the reachability
+// relationship will be removed.
+class OpaqueRootStateImpl : public OpaqueRootTracker::OpaqueRootState {
+ public:
+  OpaqueRootStateImpl(JSContext* context,
+                      ReferencedObjectMap* referenced_object_map)
+      : context_(context), referenced_object_map_(referenced_object_map) {}
+
+  void TrackReachability(WrapperPrivate* from, WrapperPrivate* to) {
+    intptr_t from_key = ReferencedObjectMap::GetKeyForWrappable(
+        from->wrappable<Wrappable>().get());
+    JS::RootedObject to_object(context_, to->js_object_proxy());
+    referenced_objects_.push_back(
+        std::make_pair(from_key, WeakHeapObject(context_, to_object)));
+    referenced_object_map_->AddReferencedObject(from_key, to_object);
+  }
+
+  ~OpaqueRootStateImpl() {
+    for (ReferencedObjectPairVector::iterator it = referenced_objects_.begin();
+         it != referenced_objects_.end(); ++it) {
+      if (it->second.Get()) {
+        JS::RootedObject reachable_object(context_, it->second.Get());
+        referenced_object_map_->RemoveReferencedObject(it->first,
+                                                       reachable_object);
+      }
+    }
+  }
+
+ private:
+  typedef std::vector<std::pair<intptr_t, WeakHeapObject> >
+      ReferencedObjectPairVector;
+
+  JSContext* context_;
+  ReferencedObjectMap* referenced_object_map_;
+  ReferencedObjectPairVector referenced_objects_;
+};
+}  // namespace
+
+OpaqueRootTracker::OpaqueRootTracker(JSContext* context,
+                                     ReferencedObjectMap* referenced_object_map,
+                                     WrapperFactory* wrapper_factory)
+    : context_(context),
+      referenced_object_map_(referenced_object_map),
+      wrapper_factory_(wrapper_factory) {}
+
+void OpaqueRootTracker::AddObjectWithOpaqueRoot(
+    WrapperPrivate* wrapper_private) {
+  all_objects_.insert(wrapper_private);
+}
+
+void OpaqueRootTracker::RemoveObjectWithOpaqueRoot(
+    WrapperPrivate* wrapper_private) {
+  all_objects_.erase(wrapper_private);
+}
+
+scoped_ptr<OpaqueRootTracker::OpaqueRootState>
+OpaqueRootTracker::GetCurrentOpaqueRootState() {
+  scoped_ptr<OpaqueRootStateImpl> state(
+      new OpaqueRootStateImpl(context_, referenced_object_map_));
+  // Get the current opaque root for all objects that are being tracked.
+  for (WrapperPrivateSet::iterator it = all_objects_.begin();
+       it != all_objects_.end(); ++it) {
+    WrapperPrivate* reachable_object_wrapper_private = *it;
+    Wrappable* opaque_root = reachable_object_wrapper_private->GetOpaqueRoot();
+    if (opaque_root) {
+      WrapperPrivate* opaque_root_private = WrapperPrivate::GetFromWrappable(
+          opaque_root, context_, wrapper_factory_);
+      // Always mark the root as reachable from the non-root object.
+      state->TrackReachability(reachable_object_wrapper_private,
+                               opaque_root_private);
+
+      // Only mark the non-root object as reachable if we need to keep the
+      // wrapper alive for some reason. In general it's okay for a wrapper to
+      // get GC'd because the Cobalt object will still be kept alive, and a new
+      // JS object can be created if needed again.
+      if (reachable_object_wrapper_private
+              ->ShouldKeepWrapperAliveIfReachable()) {
+        state->TrackReachability(opaque_root_private,
+                                 reachable_object_wrapper_private);
+      }
+    }
+  }
+  return state.PassAs<OpaqueRootState>();
+}
+
+}  // namespace mozjs
+}  // namespace script
+}  // namespace cobalt
diff --git a/src/cobalt/script/mozjs/opaque_root_tracker.h b/src/cobalt/script/mozjs/opaque_root_tracker.h
new file mode 100644
index 0000000..bd9ef2a
--- /dev/null
+++ b/src/cobalt/script/mozjs/opaque_root_tracker.h
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2016 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_SCRIPT_MOZJS_OPAQUE_ROOT_TRACKER_H_
+#define COBALT_SCRIPT_MOZJS_OPAQUE_ROOT_TRACKER_H_
+
+#include "base/hash_tables.h"
+#include "cobalt/script/mozjs/referenced_object_map.h"
+#include "cobalt/script/mozjs/wrapper_factory.h"
+#include "cobalt/script/mozjs/wrapper_private.h"
+
+namespace cobalt {
+namespace script {
+namespace mozjs {
+
+// This class manages lifetime of structures containing objects that are
+// reachable from through the interface implementation, but not through
+// JavaScript, by ensuring that the root of the structure is not garbage
+// collected if any of the members of the structure are reachable.
+//
+// The implementation of the structure in Cobalt is typically reference counted.
+// The |root| of that structure is a single node that transitively holds a
+// reference to every other node in the structure. It may be the case that the
+// only reference to that root node is from a JS object's WrapperPrivate. The
+// OpaqueRootTracker class ensures that if some node in the structure is
+// reachable from JavaScript, the JS object holding the reference to the root
+// of the structure is marked as reachable as well, which preserves the final
+// reference to the root of the structure, keeping the entire structure alive.
+//
+// For example, any DOM Node can be reached from any other DOM Node object in
+// the same tree. If an arbitary internal Node is reachable from JavaScript,
+// this class will ensure that the root of the tree will also be kept alive,
+// preserving the entire tree until no nodes in the tree are reachable from
+// JavaScript.
+//
+// An object's opaque root can change throughout the object's lifetime, so the
+// root needs to be recalculated every garbage collection phase.
+class OpaqueRootTracker {
+ public:
+  // Callers do not need to operate on this class. They just need to manage its
+  // lifetime appropriately as described below.
+  class OpaqueRootState {
+   protected:
+    OpaqueRootState() {}
+    virtual ~OpaqueRootState() {}
+    friend class scoped_ptr<OpaqueRootState>;
+  };
+
+  OpaqueRootTracker(JSContext* context,
+                    ReferencedObjectMap* referenced_object_map,
+                    WrapperFactory* wrapper_factory);
+
+  // All objects that implement this functionality must be registered to this
+  // class.
+  void AddObjectWithOpaqueRoot(WrapperPrivate* wrapper_private);
+  void RemoveObjectWithOpaqueRoot(WrapperPrivate* wrapper_private);
+
+  // Get the current state of opaque roots. This should be called when garbage
+  // collection begins before marking has begun. Once garbage collection is
+  // complete, this should be released.
+  scoped_ptr<OpaqueRootState> GetCurrentOpaqueRootState();
+
+ private:
+  typedef base::hash_set<WrapperPrivate*> WrapperPrivateSet;
+
+  JSContext* context_;
+  ReferencedObjectMap* referenced_object_map_;
+  WrapperFactory* wrapper_factory_;
+  // list of objects that are potentially reachable from an opaque root
+  WrapperPrivateSet all_objects_;
+};
+}  // namespace mozjs
+}  // namespace script
+}  // namespace cobalt
+#endif  // COBALT_SCRIPT_MOZJS_OPAQUE_ROOT_TRACKER_H_
diff --git a/src/cobalt/script/mozjs/proxy_handler.cc b/src/cobalt/script/mozjs/proxy_handler.cc
index 17849cd..498edb2 100644
--- a/src/cobalt/script/mozjs/proxy_handler.cc
+++ b/src/cobalt/script/mozjs/proxy_handler.cc
@@ -27,7 +27,8 @@
                            const NamedPropertyHooks& named_hooks)
     : js::DirectProxyHandler(NULL),
       indexed_property_hooks_(indexed_hooks),
-      named_property_hooks_(named_hooks) {
+      named_property_hooks_(named_hooks),
+      has_custom_property_(false) {
   // If an interface supports named/indexed properties, they must have a hook to
   // check if the name/index is supported and to enumerate the properties.
   if (supports_named_properties()) {
@@ -180,6 +181,13 @@
   return js::DirectProxyHandler::enumerate(context, proxy, properties);
 }
 
+bool ProxyHandler::defineProperty(JSContext* context, JS::HandleObject proxy,
+                                  JS::HandleId id,
+                                  JSPropertyDescriptor* descriptor) {
+  has_custom_property_ = true;
+  return js::DirectProxyHandler::defineProperty(context, proxy, id, descriptor);
+}
+
 bool ProxyHandler::IsSupportedIndex(JSContext* context, JS::HandleObject object,
                                     uint32_t index) {
   DCHECK(indexed_property_hooks_.is_supported);
diff --git a/src/cobalt/script/mozjs/proxy_handler.h b/src/cobalt/script/mozjs/proxy_handler.h
index e6a7c54..ffbadca 100644
--- a/src/cobalt/script/mozjs/proxy_handler.h
+++ b/src/cobalt/script/mozjs/proxy_handler.h
@@ -93,6 +93,9 @@
                bool* succeeded) OVERRIDE;
   bool enumerate(JSContext* context, JS::HandleObject proxy,
                  JS::AutoIdVector& properties) OVERRIDE;  // NOLINT[runtime/references]
+  bool defineProperty(JSContext* context, JS::HandleObject proxy,
+                      JS::HandleId id,
+                      JSPropertyDescriptor* descriptor) OVERRIDE;
 
   // The derived traps in js::DirectProxyHandler are not implemented in terms of
   // the fundamental traps, where the traps in js::BaseProxyHandler are.
@@ -131,6 +134,8 @@
     return js::BaseProxyHandler::iterate(context, proxy, flags, vp);
   }
 
+  bool has_custom_property() const { return has_custom_property_; }
+
  private:
   bool supports_named_properties() {
     return named_property_hooks_.getter != NULL;
@@ -155,6 +160,8 @@
 
   IndexedPropertyHooks indexed_property_hooks_;
   NamedPropertyHooks named_property_hooks_;
+  // Set to true if this object may have a custom property set on it.
+  bool has_custom_property_;
 };
 
 }  // namespace mozjs
diff --git a/src/cobalt/script/mozjs/union_type_conversion_forward.h b/src/cobalt/script/mozjs/union_type_conversion_forward.h
index c001f65..993f572 100644
--- a/src/cobalt/script/mozjs/union_type_conversion_forward.h
+++ b/src/cobalt/script/mozjs/union_type_conversion_forward.h
@@ -22,7 +22,6 @@
 #define COBALT_SCRIPT_MOZJS_UNION_TYPE_CONVERSION_FORWARD_H_
 
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
 #include "cobalt/script/mozjs/type_traits.h"
diff --git a/src/cobalt/script/mozjs/union_type_conversion_forward.h.pump b/src/cobalt/script/mozjs/union_type_conversion_forward.h.pump
index 876b511..bfdf0b9 100644
--- a/src/cobalt/script/mozjs/union_type_conversion_forward.h.pump
+++ b/src/cobalt/script/mozjs/union_type_conversion_forward.h.pump
@@ -27,7 +27,6 @@
 #define COBALT_SCRIPT_MOZJS_UNION_TYPE_CONVERSION_FORWARD_H_
 
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
 #include "cobalt/script/mozjs/type_traits.h"
diff --git a/src/cobalt/script/mozjs/union_type_conversion_impl.h b/src/cobalt/script/mozjs/union_type_conversion_impl.h
index a8f7e6f..4e6bb23 100644
--- a/src/cobalt/script/mozjs/union_type_conversion_impl.h
+++ b/src/cobalt/script/mozjs/union_type_conversion_impl.h
@@ -23,7 +23,7 @@
 
 #include "cobalt/base/type_id.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
 #include "cobalt/script/mozjs/type_traits.h"
@@ -88,10 +88,10 @@
     JS::RootedObject rooted_object(context);
     bool success = JS_ValueToObject(context, value, rooted_object.address());
     DCHECK(success);
-    MozjsGlobalObjectProxy* global_object_proxy =
-        static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+    MozjsGlobalEnvironment* global_environment =
+        static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
     const WrapperFactory* wrapper_factory =
-        global_object_proxy->wrapper_factory();
+        global_environment->wrapper_factory();
     if (UnionTypeTraitsT1::is_interface_type &&
         wrapper_factory->DoesObjectImplementInterface(
             rooted_object, UnionTypeTraitsT1::GetTypeID())) {
@@ -250,10 +250,10 @@
     JS::RootedObject rooted_object(context);
     bool success = JS_ValueToObject(context, value, rooted_object.address());
     DCHECK(success);
-    MozjsGlobalObjectProxy* global_object_proxy =
-        static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+    MozjsGlobalEnvironment* global_environment =
+        static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
     const WrapperFactory* wrapper_factory =
-        global_object_proxy->wrapper_factory();
+        global_environment->wrapper_factory();
     if (UnionTypeTraitsT1::is_interface_type &&
         wrapper_factory->DoesObjectImplementInterface(
             rooted_object, UnionTypeTraitsT1::GetTypeID())) {
@@ -453,10 +453,10 @@
     JS::RootedObject rooted_object(context);
     bool success = JS_ValueToObject(context, value, rooted_object.address());
     DCHECK(success);
-    MozjsGlobalObjectProxy* global_object_proxy =
-        static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+    MozjsGlobalEnvironment* global_environment =
+        static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
     const WrapperFactory* wrapper_factory =
-        global_object_proxy->wrapper_factory();
+        global_environment->wrapper_factory();
     if (UnionTypeTraitsT1::is_interface_type &&
         wrapper_factory->DoesObjectImplementInterface(
             rooted_object, UnionTypeTraitsT1::GetTypeID())) {
diff --git a/src/cobalt/script/mozjs/union_type_conversion_impl.h.pump b/src/cobalt/script/mozjs/union_type_conversion_impl.h.pump
index d4103ca..4376776 100644
--- a/src/cobalt/script/mozjs/union_type_conversion_impl.h.pump
+++ b/src/cobalt/script/mozjs/union_type_conversion_impl.h.pump
@@ -28,7 +28,7 @@
 
 #include "cobalt/base/type_id.h"
 #include "cobalt/script/mozjs/mozjs_exception_state.h"
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 #include "cobalt/script/mozjs/mozjs_object_handle.h"
 #include "cobalt/script/mozjs/mozjs_user_object_holder.h"
 #include "cobalt/script/mozjs/type_traits.h"
@@ -107,10 +107,10 @@
     JS::RootedObject rooted_object(context);
     bool success = JS_ValueToObject(context, value, rooted_object.address());
     DCHECK(success);
-    MozjsGlobalObjectProxy* global_object_proxy =
-        static_cast<MozjsGlobalObjectProxy*>(JS_GetContextPrivate(context));
+    MozjsGlobalEnvironment* global_environment =
+        static_cast<MozjsGlobalEnvironment*>(JS_GetContextPrivate(context));
     const WrapperFactory* wrapper_factory =
-        global_object_proxy->wrapper_factory();
+        global_environment->wrapper_factory();
 
 $for TYPE [[
     if (UnionTypeTraitsT$(TYPE)::is_interface_type &&
diff --git a/src/cobalt/script/mozjs/weak_heap_object.cc b/src/cobalt/script/mozjs/weak_heap_object.cc
index 6b719bb..1fb5c8d 100644
--- a/src/cobalt/script/mozjs/weak_heap_object.cc
+++ b/src/cobalt/script/mozjs/weak_heap_object.cc
@@ -16,15 +16,15 @@
 
 #include "cobalt/script/mozjs/weak_heap_object.h"
 
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
 
 namespace cobalt {
 namespace script {
 namespace mozjs {
 
 WeakHeapObject::WeakHeapObject(JSContext* context, JS::HandleObject handle) {
-  MozjsGlobalObjectProxy* global_environment =
-      MozjsGlobalObjectProxy::GetFromContext(context);
+  MozjsGlobalEnvironment* global_environment =
+      MozjsGlobalEnvironment::GetFromContext(context);
   Initialize(global_environment->weak_object_manager(), handle);
 }
 
diff --git a/src/cobalt/script/mozjs/wrapper_private.cc b/src/cobalt/script/mozjs/wrapper_private.cc
index 9328993..ad2113a 100644
--- a/src/cobalt/script/mozjs/wrapper_private.cc
+++ b/src/cobalt/script/mozjs/wrapper_private.cc
@@ -16,7 +16,8 @@
 
 #include "cobalt/script/mozjs/wrapper_private.h"
 
-#include "cobalt/script/mozjs/mozjs_global_object_proxy.h"
+#include "cobalt/script/mozjs/mozjs_global_environment.h"
+#include "cobalt/script/mozjs/proxy_handler.h"
 #include "cobalt/script/mozjs/referenced_object_map.h"
 #include "third_party/mozjs/js/src/jsapi.h"
 #include "third_party/mozjs/js/src/jsproxy.h"
@@ -25,13 +26,29 @@
 namespace script {
 namespace mozjs {
 
+Wrappable* WrapperPrivate::GetOpaqueRoot() const {
+  if (!get_opaque_root_function_.is_null()) {
+    return get_opaque_root_function_.Run(wrappable_);
+  }
+  return NULL;
+}
+
+bool WrapperPrivate::ShouldKeepWrapperAliveIfReachable() {
+  ProxyHandler* proxy_handler = base::polymorphic_downcast<ProxyHandler*>(
+      js::GetProxyHandler(wrapper_proxy_));
+  DCHECK(proxy_handler);
+  return proxy_handler->has_custom_property() ||
+         wrappable_->ShouldKeepWrapperAlive();
+}
+
 // static
-void WrapperPrivate::AddPrivateData(JSContext* context,
-                                    JS::HandleObject wrapper_proxy,
-                                    const scoped_refptr<Wrappable>& wrappable) {
+void WrapperPrivate::AddPrivateData(
+    JSContext* context, JS::HandleObject wrapper_proxy,
+    const scoped_refptr<Wrappable>& wrappable,
+    const GetOpaqueRootFunction& get_opaque_root_function) {
   DCHECK(js::IsProxy(wrapper_proxy));
-  WrapperPrivate* private_data =
-      new WrapperPrivate(context, wrappable, wrapper_proxy);
+  WrapperPrivate* private_data = new WrapperPrivate(
+      context, wrappable, wrapper_proxy, get_opaque_root_function);
   JS::RootedObject target_object(context,
                                  js::GetProxyTargetObject(wrapper_proxy));
   JS_SetPrivate(target_object, private_data);
@@ -106,8 +123,8 @@
     JS_CallHeapObjectTracer(trace, &wrapper_private->wrapper_proxy_,
                             "WrapperPrivate::Trace");
 
-    MozjsGlobalObjectProxy* global_environment =
-        MozjsGlobalObjectProxy::GetFromContext(wrapper_private->context_);
+    MozjsGlobalEnvironment* global_environment =
+        MozjsGlobalEnvironment::GetFromContext(wrapper_private->context_);
     intptr_t key = ReferencedObjectMap::GetKeyForWrappable(
         wrapper_private->wrappable_.get());
     global_environment->referenced_objects()->TraceReferencedObjects(trace,
@@ -115,14 +132,30 @@
   }
 }
 
-WrapperPrivate::WrapperPrivate(JSContext* context,
-                               const scoped_refptr<Wrappable>& wrappable,
-                               JS::HandleObject wrapper_proxy)
-    : context_(context), wrappable_(wrappable), wrapper_proxy_(wrapper_proxy) {
+WrapperPrivate::WrapperPrivate(
+    JSContext* context, const scoped_refptr<Wrappable>& wrappable,
+    JS::HandleObject wrapper_proxy,
+    const GetOpaqueRootFunction& get_opaque_root_function)
+    : context_(context),
+      wrappable_(wrappable),
+      wrapper_proxy_(wrapper_proxy),
+      get_opaque_root_function_(get_opaque_root_function) {
   DCHECK(js::IsProxy(wrapper_proxy));
+  if (!get_opaque_root_function_.is_null()) {
+    MozjsGlobalEnvironment* global_environment =
+        MozjsGlobalEnvironment::GetFromContext(context_);
+    global_environment->opaque_root_tracker()->AddObjectWithOpaqueRoot(this);
+  }
 }
 
-WrapperPrivate::~WrapperPrivate() { wrapper_proxy_ = NULL; }
+WrapperPrivate::~WrapperPrivate() {
+  if (!get_opaque_root_function_.is_null()) {
+    MozjsGlobalEnvironment* global_environment =
+        MozjsGlobalEnvironment::GetFromContext(context_);
+    global_environment->opaque_root_tracker()->RemoveObjectWithOpaqueRoot(this);
+  }
+  wrapper_proxy_ = NULL;
+}
 
 }  // namespace mozjs
 }  // namespace script
diff --git a/src/cobalt/script/mozjs/wrapper_private.h b/src/cobalt/script/mozjs/wrapper_private.h
index aecb44d..5bce933 100644
--- a/src/cobalt/script/mozjs/wrapper_private.h
+++ b/src/cobalt/script/mozjs/wrapper_private.h
@@ -34,6 +34,9 @@
 // must be destroyed when its JSObject is garbage collected.
 class WrapperPrivate : public base::SupportsWeakPtr<WrapperPrivate> {
  public:
+  typedef base::Callback<Wrappable*(const scoped_refptr<Wrappable>&)>
+      GetOpaqueRootFunction;
+
   template <typename T>
   scoped_refptr<T> wrappable() const {
     return base::polymorphic_downcast<T*>(wrappable_.get());
@@ -41,14 +44,22 @@
 
   JSObject* js_object_proxy() const { return wrapper_proxy_; }
 
-  // Add/Remove a reference to the object. The object will be visited during
-  // garbage collection.
-  void AddReferencedObject(JS::HandleObject referee);
-  void RemoveReferencedObject(JS::HandleObject referee);
+  Wrappable* GetOpaqueRoot() const;
+
+  // Return true if the GC should avoid collecting this wrapper. Note that if
+  // the wrapper is unreachable, it may still be collected.
+  bool ShouldKeepWrapperAliveIfReachable();
 
   // Create a new WrapperPrivate instance and associate it with the wrapper.
+  static void AddPrivateData(
+      JSContext* context, JS::HandleObject wrapper_proxy,
+      const scoped_refptr<Wrappable>& wrappable,
+      const GetOpaqueRootFunction& get_opaque_root_function);
+
   static void AddPrivateData(JSContext* context, JS::HandleObject wrapper_proxy,
-                             const scoped_refptr<Wrappable>& wrappable);
+                             const scoped_refptr<Wrappable>& wrappable) {
+    AddPrivateData(context, wrapper_proxy, wrappable, GetOpaqueRootFunction());
+  }
 
   // Get the WrapperPrivate associated with the given Wrappable. A new JSObject
   // and WrapperPrivate object may be created.
@@ -76,12 +87,14 @@
 
  private:
   WrapperPrivate(JSContext* context, const scoped_refptr<Wrappable>& wrappable,
-                 JS::HandleObject wrapper_proxy);
+                 JS::HandleObject wrapper_proxy,
+                 const GetOpaqueRootFunction& get_opaque_root_function);
   ~WrapperPrivate();
 
   JSContext* context_;
   scoped_refptr<Wrappable> wrappable_;
   JS::Heap<JSObject*> wrapper_proxy_;
+  GetOpaqueRootFunction get_opaque_root_function_;
 };
 
 }  // namespace mozjs
diff --git a/src/cobalt/script/script_debugger.h b/src/cobalt/script/script_debugger.h
index f2e58b3..8d43d1e 100644
--- a/src/cobalt/script/script_debugger.h
+++ b/src/cobalt/script/script_debugger.h
@@ -25,7 +25,7 @@
 namespace cobalt {
 namespace script {
 
-class GlobalObjectProxy;
+class GlobalEnvironment;
 
 // Engine-independent pure virtual interface to a JavaScript debugger.
 // Used as an opaque interface to the specific debugger implementation,
@@ -78,7 +78,7 @@
   // Factory method to create an engine-specific instance. Implementation to be
   // provided by derived class.
   static scoped_ptr<ScriptDebugger> CreateDebugger(
-      GlobalObjectProxy* global_object_proxy, Delegate* delegate);
+      GlobalEnvironment* global_environment, Delegate* delegate);
 
   // Attach/detach the script debugger.
   virtual void Attach() = 0;
diff --git a/src/cobalt/script/script_runner.cc b/src/cobalt/script/script_runner.cc
index cb9193b..d680966 100644
--- a/src/cobalt/script/script_runner.cc
+++ b/src/cobalt/script/script_runner.cc
@@ -17,7 +17,7 @@
 #include "cobalt/script/script_runner.h"
 
 #include "base/logging.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/source_code.h"
 
 namespace cobalt {
@@ -28,17 +28,17 @@
 class ScriptRunnerImpl : public ScriptRunner {
  public:
   explicit ScriptRunnerImpl(
-      const scoped_refptr<GlobalObjectProxy> global_object_proxy)
-      : global_object_proxy_(global_object_proxy) {}
+      const scoped_refptr<GlobalEnvironment> global_environment)
+      : global_environment_(global_environment) {}
 
   std::string Execute(const std::string& script_utf8,
                       const base::SourceLocation& script_location) OVERRIDE;
-  GlobalObjectProxy* GetGlobalObjectProxy() const OVERRIDE {
-    return global_object_proxy_;
+  GlobalEnvironment* GetGlobalEnvironment() const OVERRIDE {
+    return global_environment_;
   }
 
  private:
-  scoped_refptr<GlobalObjectProxy> global_object_proxy_;
+  scoped_refptr<GlobalEnvironment> global_environment_;
 };
 
 std::string ScriptRunnerImpl::Execute(
@@ -51,7 +51,7 @@
     return "";
   }
   std::string result;
-  if (!global_object_proxy_->EvaluateScript(source_code, &result)) {
+  if (!global_environment_->EvaluateScript(source_code, &result)) {
     DLOG(WARNING) << "Failed to execute JavaScript: " << result;
     return "";
   }
@@ -61,8 +61,8 @@
 }  // namespace
 
 scoped_ptr<ScriptRunner> ScriptRunner::CreateScriptRunner(
-    const scoped_refptr<GlobalObjectProxy>& global_object_proxy) {
-  return scoped_ptr<ScriptRunner>(new ScriptRunnerImpl(global_object_proxy));
+    const scoped_refptr<GlobalEnvironment>& global_environment) {
+  return scoped_ptr<ScriptRunner>(new ScriptRunnerImpl(global_environment));
 }
 
 }  // namespace script
diff --git a/src/cobalt/script/script_runner.h b/src/cobalt/script/script_runner.h
index 978c27f..42052ac 100644
--- a/src/cobalt/script/script_runner.h
+++ b/src/cobalt/script/script_runner.h
@@ -25,18 +25,18 @@
 namespace cobalt {
 namespace script {
 
-class GlobalObjectProxy;
+class GlobalEnvironment;
 
 // Maintains a handle to a JavaScript global object, and provides an interface
 // to execute JavaScript code.
 class ScriptRunner {
  public:
   static scoped_ptr<ScriptRunner> CreateScriptRunner(
-      const scoped_refptr<GlobalObjectProxy>& global_object_proxy);
+      const scoped_refptr<GlobalEnvironment>& global_environment);
 
   virtual std::string Execute(const std::string& script_utf8,
                               const base::SourceLocation& script_location) = 0;
-  virtual GlobalObjectProxy* GetGlobalObjectProxy() const { return NULL; }
+  virtual GlobalEnvironment* GetGlobalEnvironment() const { return NULL; }
   virtual ~ScriptRunner() {}
 };
 
diff --git a/src/cobalt/script/standalone_javascript_runner.cc b/src/cobalt/script/standalone_javascript_runner.cc
index 4f5af91..d67c87b 100644
--- a/src/cobalt/script/standalone_javascript_runner.cc
+++ b/src/cobalt/script/standalone_javascript_runner.cc
@@ -27,7 +27,7 @@
 
 StandaloneJavascriptRunner::StandaloneJavascriptRunner() {
   CommonInitialization();
-  global_object_proxy_->CreateGlobalObject();
+  global_environment_->CreateGlobalObject();
 }
 
 void StandaloneJavascriptRunner::RunInteractive() {
@@ -56,7 +56,7 @@
 
 void StandaloneJavascriptRunner::CommonInitialization() {
   engine_ = JavaScriptEngine::CreateEngine();
-  global_object_proxy_ = engine_->CreateGlobalObjectProxy();
+  global_environment_ = engine_->CreateGlobalEnvironment();
   environment_settings_.reset(new EnvironmentSettings());
 }
 
@@ -69,7 +69,7 @@
 
   // Execute the script and get the results of execution.
   std::string result;
-  bool success = global_object_proxy_->EvaluateScript(source, &result);
+  bool success = global_environment_->EvaluateScript(source, &result);
   // Echo the results to stdout.
   if (!success) {
     std::cout << "Exception: ";
diff --git a/src/cobalt/script/standalone_javascript_runner.h b/src/cobalt/script/standalone_javascript_runner.h
index 2f364a9..ec35833 100644
--- a/src/cobalt/script/standalone_javascript_runner.h
+++ b/src/cobalt/script/standalone_javascript_runner.h
@@ -20,7 +20,7 @@
 
 #include "base/file_path.h"
 #include "cobalt/script/environment_settings.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/javascript_engine.h"
 #include "cobalt/script/wrappable.h"
 
@@ -37,8 +37,8 @@
   explicit StandaloneJavascriptRunner(
       const scoped_refptr<GlobalInterface>& global_object) {
     CommonInitialization();
-    global_object_proxy_->CreateGlobalObject(global_object,
-                                             environment_settings_.get());
+    global_environment_->CreateGlobalObject(global_object,
+                                            environment_settings_.get());
   }
 
   // Executes input from stdin and echoes the result to stdout. Loops until EOF
@@ -48,8 +48,8 @@
   // Read the file from disk and execute the script. Echos the result to stdout.
   void ExecuteFile(const FilePath& file);
 
-  const scoped_refptr<GlobalObjectProxy>& global_object_proxy() const {
-    return global_object_proxy_;
+  const scoped_refptr<GlobalEnvironment>& global_environment() const {
+    return global_environment_;
   }
 
  private:
@@ -59,7 +59,7 @@
 
   scoped_ptr<JavaScriptEngine> engine_;
   scoped_ptr<EnvironmentSettings> environment_settings_;
-  scoped_refptr<GlobalObjectProxy> global_object_proxy_;
+  scoped_refptr<GlobalEnvironment> global_environment_;
 };
 }  // namespace script
 }  // namespace cobalt
diff --git a/src/cobalt/system_window/starboard/system_window.cc b/src/cobalt/system_window/starboard/system_window.cc
index 7cd1178..331e028 100644
--- a/src/cobalt/system_window/starboard/system_window.cc
+++ b/src/cobalt/system_window/starboard/system_window.cc
@@ -16,7 +16,9 @@
 
 #include "base/logging.h"
 #include "base/memory/scoped_ptr.h"
+#include "base/stringprintf.h"
 #include "cobalt/base/event_dispatcher.h"
+#include "cobalt/deprecated/platform_delegate.h"
 #include "cobalt/system_window/keyboard_event.h"
 #include "cobalt/system_window/starboard/system_window.h"
 #include "starboard/system.h"
@@ -25,6 +27,7 @@
 namespace system_window {
 
 namespace {
+
 SystemWindowStarboard* g_the_window = NULL;
 
 // Unbound callback handler for SbWindowShowDialog.
@@ -32,6 +35,25 @@
   DCHECK(g_the_window);
   g_the_window->HandleDialogClose(response);
 }
+
+void UpdateVideoContainerSizeOverride(SbWindow window) {
+  SbWindowSize window_size;
+  if (!SbWindowGetSize(window, &window_size)) {
+    DLOG(WARNING) << "SbWindowGetSize() failed.";
+    return;
+  }
+  if (window_size.video_pixel_ratio == 1.0f) {
+    return;
+  }
+
+  deprecated::PlatformDelegate::Get()->SetVideoContainerSizeOverride(
+      base::StringPrintf(
+          "%dx%d",
+          static_cast<int>(window_size.width * window_size.video_pixel_ratio),
+          static_cast<int>(window_size.height *
+                           window_size.video_pixel_ratio)));
+}
+
 }  // namespace
 
 SystemWindowStarboard::SystemWindowStarboard(
@@ -42,6 +64,7 @@
   window_ = SbWindowCreate(NULL);
   DCHECK(SbWindowIsValid(window_));
   DCHECK(!g_the_window) << "TODO: Support multiple SystemWindows.";
+  UpdateVideoContainerSizeOverride(window_);
   g_the_window = this;
 }
 
@@ -57,12 +80,15 @@
   window_ = SbWindowCreate(&options);
   DCHECK(SbWindowIsValid(window_));
   DCHECK(!g_the_window) << "TODO: Support multiple SystemWindows.";
+  UpdateVideoContainerSizeOverride(window_);
   g_the_window = this;
 }
 
 SystemWindowStarboard::~SystemWindowStarboard() {
   DCHECK_EQ(this, g_the_window);
+
   if (g_the_window == this) {
+    deprecated::PlatformDelegate::Get()->SetVideoContainerSizeOverride("");
     g_the_window = NULL;
   }
   SbWindowDestroy(window_);
@@ -70,7 +96,10 @@
 
 math::Size SystemWindowStarboard::GetWindowSize() const {
   SbWindowSize window_size;
-  SbWindowGetSize(window_, &window_size);
+  if (!SbWindowGetSize(window_, &window_size)) {
+    DLOG(WARNING) << "SbWindowGetSize() failed.";
+    return math::Size(0, 0);
+  }
   return math::Size(window_size.width, window_size.height);
 }
 
diff --git a/src/cobalt/webdriver/window_driver.cc b/src/cobalt/webdriver/window_driver.cc
index b896311..3e77e54 100644
--- a/src/cobalt/webdriver/window_driver.cc
+++ b/src/cobalt/webdriver/window_driver.cc
@@ -26,7 +26,7 @@
 #include "base/synchronization/waitable_event.h"
 #include "cobalt/dom/document.h"
 #include "cobalt/dom/location.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/source_code.h"
 #include "cobalt/webdriver/keyboard.h"
 #include "cobalt/webdriver/search.h"
@@ -74,7 +74,7 @@
 
 scoped_refptr<ScriptExecutor> CreateScriptExecutor(
     ElementMapping* element_mapping,
-    const scoped_refptr<script::GlobalObjectProxy>& global_object_proxy) {
+    const scoped_refptr<script::GlobalEnvironment>& global_environment) {
   // This could be NULL if there was an error loading the harness source from
   // disk.
   scoped_refptr<script::SourceCode> source =
@@ -86,11 +86,11 @@
   // Create a new ScriptExecutor and bind it to the global object.
   scoped_refptr<ScriptExecutor> script_executor =
       new ScriptExecutor(element_mapping);
-  global_object_proxy->Bind("webdriverExecutor", script_executor);
+  global_environment->Bind("webdriverExecutor", script_executor);
 
   // Evaluate the harness initialization script.
   std::string result;
-  if (!global_object_proxy->EvaluateScript(source, &result)) {
+  if (!global_environment->EvaluateScript(source, &result)) {
     return NULL;
   }
 
@@ -101,7 +101,7 @@
 
 void CreateFunction(
     const std::string& function_body,
-    const scoped_refptr<script::GlobalObjectProxy>& global_object_proxy,
+    const scoped_refptr<script::GlobalEnvironment>& global_environment,
     scoped_refptr<ScriptExecutor> script_executor,
     base::optional<script::OpaqueHandleHolder::Reference>* out_opaque_handle) {
   std::string function =
@@ -110,7 +110,7 @@
       script::SourceCode::CreateSourceCode(
           function.c_str(), base::SourceLocation("[webdriver]", 1, 1));
 
-  if (!global_object_proxy->EvaluateScript(
+  if (!global_environment->EvaluateScript(
           function_source, make_scoped_refptr(script_executor.get()),
           out_opaque_handle)) {
     DLOG(ERROR) << "Failed to create Function object";
@@ -157,11 +157,11 @@
 WindowDriver::WindowDriver(
     const protocol::WindowId& window_id,
     const base::WeakPtr<dom::Window>& window,
-    const GetGlobalObjectProxyFunction& get_global_object_proxy_function,
+    const GetGlobalEnvironmentFunction& get_global_environment_function,
     const scoped_refptr<base::MessageLoopProxy>& message_loop)
     : window_id_(window_id),
       window_(window),
-      get_global_object_proxy_(get_global_object_proxy_function),
+      get_global_environment_(get_global_environment_function),
       window_message_loop_(message_loop),
       element_driver_map_deleter_(&element_drivers_),
       next_element_id_(0) {
@@ -380,9 +380,9 @@
     return CommandResult(protocol::Response::kNoSuchWindow);
   }
 
-  scoped_refptr<script::GlobalObjectProxy> global_object_proxy =
-      get_global_object_proxy_.Run();
-  DCHECK(global_object_proxy);
+  scoped_refptr<script::GlobalEnvironment> global_environment =
+      get_global_environment_.Run();
+  DCHECK(global_environment);
 
   // Lazily initialize this the first time we need to run a script. It must be
   // initialized on window_message_loop_. It can persist across multiple calls
@@ -390,7 +390,7 @@
   // global object, thus with the WindowDriver.
   if (!script_executor_) {
     scoped_refptr<ScriptExecutor> script_executor =
-        CreateScriptExecutor(this, global_object_proxy);
+        CreateScriptExecutor(this, global_environment);
     if (!script_executor) {
       DLOG(INFO) << "Failed to create ScriptExecutor.";
       return CommandResult(protocol::Response::kUnknownError);
@@ -402,7 +402,7 @@
   DLOG(INFO) << "Arguments: " << script.argument_array();
 
   base::optional<script::OpaqueHandleHolder::Reference> function_object;
-  CreateFunction(script.function_body(), global_object_proxy,
+  CreateFunction(script.function_body(), global_environment,
                  make_scoped_refptr(script_executor_.get()), &function_object);
   if (!function_object) {
     return CommandResult(protocol::Response::kJavaScriptError);
diff --git a/src/cobalt/webdriver/window_driver.h b/src/cobalt/webdriver/window_driver.h
index 08ac58e..ae03a9f 100644
--- a/src/cobalt/webdriver/window_driver.h
+++ b/src/cobalt/webdriver/window_driver.h
@@ -54,11 +54,11 @@
 // will map to a method on this class.
 class WindowDriver : private ElementMapping {
  public:
-  typedef base::Callback<scoped_refptr<script::GlobalObjectProxy>()>
-      GetGlobalObjectProxyFunction;
+  typedef base::Callback<scoped_refptr<script::GlobalEnvironment>()>
+      GetGlobalEnvironmentFunction;
   WindowDriver(const protocol::WindowId& window_id,
                const base::WeakPtr<dom::Window>& window,
-               const GetGlobalObjectProxyFunction& get_global_object_proxy,
+               const GetGlobalEnvironmentFunction& get_global_environment,
                const scoped_refptr<base::MessageLoopProxy>& message_loop);
   ~WindowDriver();
   const protocol::WindowId& window_id() { return window_id_; }
@@ -137,7 +137,7 @@
   base::WeakPtr<dom::Window> window_;
 
   // This must only be accessed from |window_message_loop_|.
-  GetGlobalObjectProxyFunction get_global_object_proxy_;
+  GetGlobalEnvironmentFunction get_global_environment_;
 
   // Helper object for commands that execute script. This must only be accessed
   // from the |window_message_loop_|.
diff --git a/src/cobalt/xhr/xml_http_request.cc b/src/cobalt/xhr/xml_http_request.cc
index 04b02e1..d1877a9 100644
--- a/src/cobalt/xhr/xml_http_request.cc
+++ b/src/cobalt/xhr/xml_http_request.cc
@@ -32,7 +32,7 @@
 #include "cobalt/dom/xml_document.h"
 #include "cobalt/dom_parser/xml_decoder.h"
 #include "cobalt/loader/fetcher_factory.h"
-#include "cobalt/script/global_object_proxy.h"
+#include "cobalt/script/global_environment.h"
 #include "cobalt/script/javascript_engine.h"
 #include "net/http/http_util.h"
 
@@ -697,11 +697,11 @@
     XMLHttpRequest::RequestErrorType request_error_type) {
   // https://www.w3.org/TR/XMLHttpRequest/#timeout-error
   DCHECK(thread_checker_.CalledOnValidThread());
-  DLOG_IF(INFO, verbose()) << __FUNCTION__ << " ("
-                           << RequestErrorTypeName(request_error_type) << ") "
-                           << *this << std::endl
-                           << script::StackTraceToString(
-                                  settings_->global_object()->GetStackTrace());
+  DLOG_IF(INFO, verbose())
+      << __FUNCTION__ << " (" << RequestErrorTypeName(request_error_type)
+      << ") " << *this << std::endl
+      << script::StackTraceToString(
+             settings_->global_environment()->GetStackTrace());
   // Step 1
   TerminateRequest();
   // Steps 2-4
@@ -798,7 +798,7 @@
 }
 
 void XMLHttpRequest::PreventGarbageCollection() {
-  settings_->global_object()->PreventGarbageCollection(
+  settings_->global_environment()->PreventGarbageCollection(
       make_scoped_refptr(this));
   DCHECK(!did_add_ref_);
   did_add_ref_ = true;
@@ -823,7 +823,8 @@
   did_add_ref_ = false;
   settings_->javascript_engine()->ReportExtraMemoryCost(
       response_body_.capacity());
-  settings_->global_object()->AllowGarbageCollection(make_scoped_refptr(this));
+  settings_->global_environment()->AllowGarbageCollection(
+      make_scoped_refptr(this));
 }
 
 void XMLHttpRequest::StartRequest(const std::string& request_body) {
@@ -909,7 +910,8 @@
   // parsing the response entity body following the rules set forth in the XML
   // specifications. If that fails (unsupported character encoding, namespace
   // well-formedness error, etc.), return null.
-  scoped_refptr<dom::XMLDocument> xml_document = new dom::XMLDocument();
+  scoped_refptr<dom::XMLDocument> xml_document =
+      new dom::XMLDocument(settings_->window()->html_element_context());
   dom_parser::XMLDecoder xml_decoder(
       xml_document, xml_document, NULL, settings_->max_dom_element_depth(),
       base::SourceLocation("[object XMLHttpRequest]", 1, 1), base::Closure(),
diff --git a/src/media/base/sbplayer_pipeline.cc b/src/media/base/sbplayer_pipeline.cc
index 2424340..4130b45 100644
--- a/src/media/base/sbplayer_pipeline.cc
+++ b/src/media/base/sbplayer_pipeline.cc
@@ -58,15 +58,6 @@
          Time::kMicrosecondsPerSecond;
 }
 
-void UpdateDecoderConfig(scoped_refptr<DemuxerStream> stream) {
-  if (stream->type() == DemuxerStream::AUDIO) {
-    stream->audio_decoder_config();
-  } else {
-    DCHECK_EQ(stream->type(), DemuxerStream::VIDEO);
-    stream->video_decoder_config();
-  }
-}
-
 bool IsEncrypted(const scoped_refptr<DemuxerStream>& stream) {
   if (stream->type() == DemuxerStream::AUDIO) {
     return stream->audio_decoder_config().is_encrypted();
@@ -228,6 +219,8 @@
                                  void* context,
                                  const void* sample_buffer);
 
+  void UpdateDecoderConfig(const scoped_refptr<DemuxerStream>& stream);
+
   // Message loop used to execute pipeline tasks.
   scoped_refptr<base::MessageLoopProxy> message_loop_;
 
@@ -616,6 +609,7 @@
   if (has_video_) {
     const VideoDecoderConfig& video_config =
         demuxer_->GetStream(DemuxerStream::VIDEO)->video_decoder_config();
+    natural_size_ = video_config.natural_size();
     is_encrypted |= video_config.is_encrypted();
   }
   if (is_encrypted) {
@@ -872,6 +866,19 @@
                             sample_buffer));
 }
 
+void SbPlayerPipeline::UpdateDecoderConfig(
+    const scoped_refptr<DemuxerStream>& stream) {
+  DCHECK(message_loop_->BelongsToCurrentThread());
+  if (stream->type() == DemuxerStream::AUDIO) {
+    stream->audio_decoder_config();
+  } else {
+    DCHECK_EQ(stream->type(), DemuxerStream::VIDEO);
+    const VideoDecoderConfig& decoder_config = stream->video_decoder_config();
+    base::AutoLock auto_lock(lock_);
+    natural_size_ = decoder_config.natural_size();
+  }
+}
+
 }  // namespace
 
 #endif  // SB_HAS(PLAYER)
diff --git a/src/starboard/nplb/window_get_size_test.cc b/src/starboard/nplb/window_get_size_test.cc
index a42ebc2..8a52d78 100644
--- a/src/starboard/nplb/window_get_size_test.cc
+++ b/src/starboard/nplb/window_get_size_test.cc
@@ -24,19 +24,28 @@
   ASSERT_TRUE(SbWindowIsValid(window));
 
   SbWindowSize size;
-  size.width = 0;
-  size.height = 0;
+  size.width = -1;
+  size.height = -2;
+  size.video_pixel_ratio = -1.0f;
 
   ASSERT_TRUE(SbWindowGetSize(window, &size));
   EXPECT_LT(0, size.width);
   EXPECT_LT(0, size.height);
+  EXPECT_LE(0.0f, size.video_pixel_ratio);
+  EXPECT_GT(10.0f, size.video_pixel_ratio);
 
   ASSERT_TRUE(SbWindowDestroy(window));
 }
 
 TEST(SbWindowGetSizeTest, RainyDayInvalid) {
   SbWindowSize size;
+  size.width = -1;
+  size.height = -2;
+  size.video_pixel_ratio = -1.0f;
   ASSERT_FALSE(SbWindowGetSize(kSbWindowInvalid, &size));
+  EXPECT_EQ(-1, size.width);
+  EXPECT_EQ(-2, size.height);
+  EXPECT_EQ(-1.0f, size.video_pixel_ratio);
 }
 
 }  // namespace
diff --git a/src/starboard/raspi/shared/window_get_size.cc b/src/starboard/raspi/shared/window_get_size.cc
index e64865f..905d83f 100644
--- a/src/starboard/raspi/shared/window_get_size.cc
+++ b/src/starboard/raspi/shared/window_get_size.cc
@@ -14,16 +14,17 @@
 
 #include "starboard/window.h"
 
-#include "starboard/raspi/shared/window_internal.h"
 #include "starboard/log.h"
+#include "starboard/raspi/shared/window_internal.h"
 
 bool SbWindowGetSize(SbWindow window, SbWindowSize* size) {
   if (!SbWindowIsValid(window)) {
-    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid context.";
+    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid window.";
     return false;
   }
 
   size->width = window->window.width;
   size->height = window->window.height;
+  size->video_pixel_ratio = 1.0f;
   return true;
 }
diff --git a/src/starboard/shared/alsa/alsa_audio_sink_type.cc b/src/starboard/shared/alsa/alsa_audio_sink_type.cc
index 8f2ce61..1556242 100644
--- a/src/starboard/shared/alsa/alsa_audio_sink_type.cc
+++ b/src/starboard/shared/alsa/alsa_audio_sink_type.cc
@@ -165,13 +165,14 @@
   SB_DCHECK(frame_buffer_);
   SB_DCHECK(SbAudioSinkIsAudioSampleTypeSupported(sample_type_));
 
+  SbMemorySet(silence_frames_, 0,
+              channels * kFramesPerRequest * GetSampleSize(sample_type));
+
   ScopedLock lock(mutex_);
   audio_out_thread_ =
       SbThreadCreate(0, kSbThreadPriorityRealTime, kSbThreadNoAffinity, true,
                      "alsa_audio_out", &AlsaAudioSink::ThreadEntryPoint, this);
   SB_DCHECK(SbThreadIsValid(audio_out_thread_));
-  SbMemorySet(silence_frames_, 0,
-              channels * kFramesPerRequest * GetSampleSize(sample_type));
   creation_signal_.Wait();
 }
 
diff --git a/src/starboard/shared/directfb/window_get_size.cc b/src/starboard/shared/directfb/window_get_size.cc
index 2fd923a..b68f288 100644
--- a/src/starboard/shared/directfb/window_get_size.cc
+++ b/src/starboard/shared/directfb/window_get_size.cc
@@ -19,11 +19,12 @@
 
 bool SbWindowGetSize(SbWindow window, SbWindowSize* size) {
   if (!SbWindowIsValid(window)) {
-    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid context.";
+    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid window.";
     return false;
   }
 
   size->width = window->width;
   size->height = window->height;
+  size->video_pixel_ratio = 1.0f;
   return true;
 }
diff --git a/src/starboard/shared/starboard/audio_sink/stub_audio_sink_type.cc b/src/starboard/shared/starboard/audio_sink/stub_audio_sink_type.cc
index 381d2a1..09b2402 100644
--- a/src/starboard/shared/starboard/audio_sink/stub_audio_sink_type.cc
+++ b/src/starboard/shared/starboard/audio_sink/stub_audio_sink_type.cc
@@ -69,7 +69,7 @@
       destroying_(false) {
   audio_out_thread_ =
       SbThreadCreate(0, kSbThreadPriorityRealTime, kSbThreadNoAffinity, true,
-                     "alsa_audio_out", &StubAudioSink::ThreadEntryPoint, this);
+                     "stub_audio_out", &StubAudioSink::ThreadEntryPoint, this);
   SB_DCHECK(SbThreadIsValid(audio_out_thread_));
 }
 
diff --git a/src/starboard/shared/starboard/player/audio_renderer_internal.cc b/src/starboard/shared/starboard/player/audio_renderer_internal.cc
index 4648f66..c761c09 100644
--- a/src/starboard/shared/starboard/player/audio_renderer_internal.cc
+++ b/src/starboard/shared/starboard/player/audio_renderer_internal.cc
@@ -68,17 +68,19 @@
     return;
   }
 
-  ScopedLock lock(mutex_);
-  if (seeking_) {
-    if (input_pts < seeking_to_pts_) {
-      return;
+  {
+    ScopedLock lock(mutex_);
+    if (seeking_) {
+      if (input_pts < seeking_to_pts_) {
+        return;
+      }
     }
-  }
 
-  AppendFrames(&decoded_audio[0], decoded_audio.size() / channels_);
+    AppendFrames(&decoded_audio[0], decoded_audio.size() / channels_);
 
-  if (seeking_ && frame_buffer_.size() > kPrerollFrames * channels_) {
-    seeking_ = false;
+    if (seeking_ && frame_buffer_.size() > kPrerollFrames * channels_) {
+      seeking_ = false;
+    }
   }
 
   // Create the audio sink if it is the first incoming AU after seeking.
diff --git a/src/starboard/shared/x11/window_get_size.cc b/src/starboard/shared/x11/window_get_size.cc
index a5af1ec..c63fdc1 100644
--- a/src/starboard/shared/x11/window_get_size.cc
+++ b/src/starboard/shared/x11/window_get_size.cc
@@ -14,16 +14,17 @@
 
 #include "starboard/window.h"
 
-#include "starboard/shared/x11/window_internal.h"
 #include "starboard/log.h"
+#include "starboard/shared/x11/window_internal.h"
 
 bool SbWindowGetSize(SbWindow window, SbWindowSize* size) {
   if (!SbWindowIsValid(window)) {
-    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid context.";
+    SB_DLOG(ERROR) << __FUNCTION__ << ": Invalid window.";
     return false;
   }
 
   size->width = window->width;
   size->height = window->height;
+  size->video_pixel_ratio = 1.0f;
   return true;
 }
diff --git a/src/starboard/window.h b/src/starboard/window.h
index c21af9e..c3e25dd 100644
--- a/src/starboard/window.h
+++ b/src/starboard/window.h
@@ -30,15 +30,39 @@
 // A handle to a window.
 typedef SbWindowPrivate* SbWindow;
 
-// A dimensional measurement of an SbWindow.
+// The size of a window in graphics rendering coordinates. The width and height
+// of a window should correspond to the size of the graphics surface used for
+// drawing that would be created to back that window.
 typedef struct SbWindowSize {
+  // The width of the window in graphics pixels.
   int width;
+
+  // The height of the window in graphics pixels.
   int height;
+
+  // The ratio of video pixels to graphics pixels. This ratio must be applied
+  // equally to width and height, meaning the aspect ratio is maintained.
+  //
+  // A value of 1.0f means the video resolution is the same as the graphics
+  // resolution. This is the most common case.
+  //
+  // Values greater than 1.0f mean that the video resolution is higher (denser,
+  // larger) than the graphics resolution. This is a common case as devices
+  // often have less video decoding capabilities than graphics rendering
+  // capabilities (or memory, etc...).
+  //
+  // Values less than 1.0f mean that the maximum video resolution is smaller
+  // than the graphics resolution.
+  //
+  // A value of 0.0f means the ratio could not be determined, it should be
+  // assumed to be the same as the graphics resolution (i.e. 1.0f).
+  float video_pixel_ratio;
 } SbWindowSize;
 
 // Options that can be requested at window creation time.
 typedef struct SbWindowOptions {
-  // The requested size or resolution of the new window.
+  // The requested size of the new window. The value of |video_pixel_ratio| will
+  // not be used or looked at.
   SbWindowSize size;
 
   // Whether the new window should be windowed or not. If not, the requested
@@ -83,7 +107,8 @@
 // Destroys |window|, reclaiming associated resources.
 SB_EXPORT bool SbWindowDestroy(SbWindow window);
 
-// Sets |size| to the dimensions of the window.  Returns true on success.
+// Sets |size| to the dimensions of |window|. Returns true on success. If false
+// is returned, |size| will not be modified.
 SB_EXPORT bool SbWindowGetSize(SbWindow window, SbWindowSize* size);
 
 // Gets the platform-specific handle for |window|, which can be passed as an
